mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Fix incorrect line text computation to stop comment directive searching
Fixes #38289
This commit is contained in:
@@ -1803,7 +1803,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
// Stop searching if the line is not empty and not a comment
|
||||
const lineText = file.text.slice(lineStarts[line - 1], lineStarts[line]).trim();
|
||||
const lineText = file.text.slice(lineStarts[line], lineStarts[line + 1]).trim();
|
||||
if (lineText !== "" && !/^(\s*)\/\/(.*)$/.test(lineText)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
tests/cases/conformance/directives/ts-expect-error.ts(4,1): error TS2578: Unused '@ts-expect-error' directive.
|
||||
tests/cases/conformance/directives/ts-expect-error.ts(10,1): error TS2578: Unused '@ts-expect-error' directive.
|
||||
tests/cases/conformance/directives/ts-expect-error.ts(13,5): error TS2322: Type '"nope"' is not assignable to type 'number'.
|
||||
tests/cases/conformance/directives/ts-expect-error.ts(19,2): error TS2367: This condition will always return 'false' since the types 'true' and 'false' have no overlap.
|
||||
tests/cases/conformance/directives/ts-expect-error.ts(21,2): error TS2367: This condition will always return 'false' since the types 'true' and 'false' have no overlap.
|
||||
tests/cases/conformance/directives/ts-expect-error.ts(22,2): error TS2367: This condition will always return 'false' since the types 'true' and 'false' have no overlap.
|
||||
|
||||
|
||||
==== tests/cases/conformance/directives/ts-expect-error.ts (3 errors) ====
|
||||
==== tests/cases/conformance/directives/ts-expect-error.ts (6 errors) ====
|
||||
// @ts-expect-error additional commenting
|
||||
var invalidCommentedFancy: number = 'nope';
|
||||
|
||||
@@ -25,4 +28,16 @@ tests/cases/conformance/directives/ts-expect-error.ts(13,5): error TS2322: Type
|
||||
!!! error TS2322: Type '"nope"' is not assignable to type 'number'.
|
||||
|
||||
var validPlain: string = 'nope';
|
||||
|
||||
|
||||
// @ts-expect-error
|
||||
(({ a: true } as const).a === false); // <-- compiles (as expected via comment)
|
||||
(({ a: true } as const).a === false); // Should error
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2367: This condition will always return 'false' since the types 'true' and 'false' have no overlap.
|
||||
|
||||
(({ a: true } as const).a === false); // error
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2367: This condition will always return 'false' since the types 'true' and 'false' have no overlap.
|
||||
(({ a: true } as const).a === false); // error
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2367: This condition will always return 'false' since the types 'true' and 'false' have no overlap.
|
||||
@@ -14,7 +14,13 @@ var validCommentedPlain: string = 'nope';
|
||||
var invalidPlain: number = 'nope';
|
||||
|
||||
var validPlain: string = 'nope';
|
||||
|
||||
|
||||
// @ts-expect-error
|
||||
(({ a: true } as const).a === false); // <-- compiles (as expected via comment)
|
||||
(({ a: true } as const).a === false); // Should error
|
||||
|
||||
(({ a: true } as const).a === false); // error
|
||||
(({ a: true } as const).a === false); // error
|
||||
|
||||
//// [ts-expect-error.js]
|
||||
// @ts-expect-error additional commenting
|
||||
@@ -27,3 +33,8 @@ var invalidCommentedPlain = 'nope';
|
||||
var validCommentedPlain = 'nope';
|
||||
var invalidPlain = 'nope';
|
||||
var validPlain = 'nope';
|
||||
// @ts-expect-error
|
||||
({ a: true }.a === false); // <-- compiles (as expected via comment)
|
||||
({ a: true }.a === false); // Should error
|
||||
({ a: true }.a === false); // error
|
||||
({ a: true }.a === false); // error
|
||||
|
||||
@@ -21,3 +21,24 @@ var invalidPlain: number = 'nope';
|
||||
var validPlain: string = 'nope';
|
||||
>validPlain : Symbol(validPlain, Decl(ts-expect-error.ts, 14, 3))
|
||||
|
||||
// @ts-expect-error
|
||||
(({ a: true } as const).a === false); // <-- compiles (as expected via comment)
|
||||
>({ a: true } as const).a : Symbol(a, Decl(ts-expect-error.ts, 17, 3))
|
||||
>a : Symbol(a, Decl(ts-expect-error.ts, 17, 3))
|
||||
>a : Symbol(a, Decl(ts-expect-error.ts, 17, 3))
|
||||
|
||||
(({ a: true } as const).a === false); // Should error
|
||||
>({ a: true } as const).a : Symbol(a, Decl(ts-expect-error.ts, 18, 3))
|
||||
>a : Symbol(a, Decl(ts-expect-error.ts, 18, 3))
|
||||
>a : Symbol(a, Decl(ts-expect-error.ts, 18, 3))
|
||||
|
||||
(({ a: true } as const).a === false); // error
|
||||
>({ a: true } as const).a : Symbol(a, Decl(ts-expect-error.ts, 20, 3))
|
||||
>a : Symbol(a, Decl(ts-expect-error.ts, 20, 3))
|
||||
>a : Symbol(a, Decl(ts-expect-error.ts, 20, 3))
|
||||
|
||||
(({ a: true } as const).a === false); // error
|
||||
>({ a: true } as const).a : Symbol(a, Decl(ts-expect-error.ts, 21, 3))
|
||||
>a : Symbol(a, Decl(ts-expect-error.ts, 21, 3))
|
||||
>a : Symbol(a, Decl(ts-expect-error.ts, 21, 3))
|
||||
|
||||
|
||||
@@ -27,3 +27,52 @@ var validPlain: string = 'nope';
|
||||
>validPlain : string
|
||||
>'nope' : "nope"
|
||||
|
||||
// @ts-expect-error
|
||||
(({ a: true } as const).a === false); // <-- compiles (as expected via comment)
|
||||
>(({ a: true } as const).a === false) : boolean
|
||||
>({ a: true } as const).a === false : boolean
|
||||
>({ a: true } as const).a : true
|
||||
>({ a: true } as const) : { readonly a: true; }
|
||||
>{ a: true } as const : { readonly a: true; }
|
||||
>{ a: true } : { readonly a: true; }
|
||||
>a : true
|
||||
>true : true
|
||||
>a : true
|
||||
>false : false
|
||||
|
||||
(({ a: true } as const).a === false); // Should error
|
||||
>(({ a: true } as const).a === false) : boolean
|
||||
>({ a: true } as const).a === false : boolean
|
||||
>({ a: true } as const).a : true
|
||||
>({ a: true } as const) : { readonly a: true; }
|
||||
>{ a: true } as const : { readonly a: true; }
|
||||
>{ a: true } : { readonly a: true; }
|
||||
>a : true
|
||||
>true : true
|
||||
>a : true
|
||||
>false : false
|
||||
|
||||
(({ a: true } as const).a === false); // error
|
||||
>(({ a: true } as const).a === false) : boolean
|
||||
>({ a: true } as const).a === false : boolean
|
||||
>({ a: true } as const).a : true
|
||||
>({ a: true } as const) : { readonly a: true; }
|
||||
>{ a: true } as const : { readonly a: true; }
|
||||
>{ a: true } : { readonly a: true; }
|
||||
>a : true
|
||||
>true : true
|
||||
>a : true
|
||||
>false : false
|
||||
|
||||
(({ a: true } as const).a === false); // error
|
||||
>(({ a: true } as const).a === false) : boolean
|
||||
>({ a: true } as const).a === false : boolean
|
||||
>({ a: true } as const).a : true
|
||||
>({ a: true } as const) : { readonly a: true; }
|
||||
>{ a: true } as const : { readonly a: true; }
|
||||
>{ a: true } : { readonly a: true; }
|
||||
>a : true
|
||||
>true : true
|
||||
>a : true
|
||||
>false : false
|
||||
|
||||
|
||||
@@ -13,3 +13,10 @@ var validCommentedPlain: string = 'nope';
|
||||
var invalidPlain: number = 'nope';
|
||||
|
||||
var validPlain: string = 'nope';
|
||||
|
||||
// @ts-expect-error
|
||||
(({ a: true } as const).a === false); // <-- compiles (as expected via comment)
|
||||
(({ a: true } as const).a === false); // Should error
|
||||
|
||||
(({ a: true } as const).a === false); // error
|
||||
(({ a: true } as const).a === false); // error
|
||||
Reference in New Issue
Block a user