From 59994eb5a3937b55ebbbc43963f0e18f2430bfcf Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sat, 19 Jun 2021 16:18:23 -0400 Subject: [PATCH] Report exact position of invalid characters in scanner --- src/compiler/scanner.ts | 5 +++-- .../MemberFunctionDeclaration8_es6.errors.txt | 2 +- tests/baselines/reference/emitBOM.js | 4 ++-- .../parseErrorInHeritageClause1.errors.txt | 2 +- .../parserErrorRecovery_Block2.errors.txt | 2 +- ...parserErrorRecovery_ClassElement3.errors.txt | 4 ++-- ...arserErrorRecovery_ParameterList4.errors.txt | 2 +- .../reference/parserSkippedTokens16.errors.txt | 2 +- .../scannerUnexpectedNullCharacter1.errors.txt | Bin 811 -> 813 bytes .../reference/unicodeIdentifierName2.errors.txt | 4 ++-- 10 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 7b7fc7b9ce353..af00e728660e1 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -2056,8 +2056,9 @@ namespace ts { pos += charSize(ch); continue; } - error(Diagnostics.Invalid_character); - pos += charSize(ch); + const size = charSize(ch); + error(Diagnostics.Invalid_character, pos, size); + pos += size; return token = SyntaxKind.Unknown; } } diff --git a/tests/baselines/reference/MemberFunctionDeclaration8_es6.errors.txt b/tests/baselines/reference/MemberFunctionDeclaration8_es6.errors.txt index d2e603d224c85..6c6e9f5b59f11 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration8_es6.errors.txt +++ b/tests/baselines/reference/MemberFunctionDeclaration8_es6.errors.txt @@ -12,7 +12,7 @@ tests/cases/conformance/es6/memberFunctionDeclarations/MemberFunctionDeclaration if (a) ¬ * bar; ~ !!! error TS2304: Cannot find name 'a'. - + ~ !!! error TS1127: Invalid character. ~ !!! error TS1109: Expression expected. diff --git a/tests/baselines/reference/emitBOM.js b/tests/baselines/reference/emitBOM.js index 2890ba0d81dbc..ad320b3625a1d 100644 --- a/tests/baselines/reference/emitBOM.js +++ b/tests/baselines/reference/emitBOM.js @@ -8,9 +8,9 @@ tests/cases/compiler/emitBOM.js(1,3): error TS1127: Invalid character. ==== tests/cases/compiler/emitBOM.js (2 errors) ==== // JS and d.ts output should have a BOM but not the sourcemap - + ~ !!! error TS1127: Invalid character. - + ~ !!! error TS1127: Invalid character. var x; //# sourceMappingURL=emitBOM.js.map diff --git a/tests/baselines/reference/parseErrorInHeritageClause1.errors.txt b/tests/baselines/reference/parseErrorInHeritageClause1.errors.txt index 6f705d2e04978..0edaf24241fe6 100644 --- a/tests/baselines/reference/parseErrorInHeritageClause1.errors.txt +++ b/tests/baselines/reference/parseErrorInHeritageClause1.errors.txt @@ -6,6 +6,6 @@ tests/cases/compiler/parseErrorInHeritageClause1.ts(1,19): error TS1127: Invalid class C extends A ¬ { ~ !!! error TS2304: Cannot find name 'A'. - + ~ !!! error TS1127: Invalid character. } \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_Block2.errors.txt b/tests/baselines/reference/parserErrorRecovery_Block2.errors.txt index 5aca4625d6caf..87381da45e932 100644 --- a/tests/baselines/reference/parserErrorRecovery_Block2.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_Block2.errors.txt @@ -4,7 +4,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/Blocks/parserErrorRecov ==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/Blocks/parserErrorRecovery_Block2.ts (1 errors) ==== function f() { ¬ - + ~ !!! error TS1127: Invalid character. return; } \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_ClassElement3.errors.txt b/tests/baselines/reference/parserErrorRecovery_ClassElement3.errors.txt index 703e7c2273824..889d84b6301e0 100644 --- a/tests/baselines/reference/parserErrorRecovery_ClassElement3.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ClassElement3.errors.txt @@ -7,7 +7,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ClassElements/parserErr ==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ClassElements/parserErrorRecovery_ClassElement3.ts (4 errors) ==== module M { ¬ - + ~ !!! error TS1127: Invalid character. class C { } @@ -16,7 +16,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ClassElements/parserErr ~~~~ !!! error TS1109: Expression expected. ¬ - + ~ !!! error TS1127: Invalid character. !!! error TS1005: '}' expected. \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList4.errors.txt b/tests/baselines/reference/parserErrorRecovery_ParameterList4.errors.txt index 31f25375fa2f6..cc06eb70d4372 100644 --- a/tests/baselines/reference/parserErrorRecovery_ParameterList4.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList4.errors.txt @@ -3,6 +3,6 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserEr ==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList4.ts (1 errors) ==== function f(a,¬) { - + ~ !!! error TS1127: Invalid character. } \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens16.errors.txt b/tests/baselines/reference/parserSkippedTokens16.errors.txt index dc39b9c7e3113..a164a655d4790 100644 --- a/tests/baselines/reference/parserSkippedTokens16.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens16.errors.txt @@ -20,7 +20,7 @@ tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens16.t ~ !!! error TS1005: ';' expected. function Foo () ¬ { } - + ~ !!! error TS1127: Invalid character. 4+:5 ~ diff --git a/tests/baselines/reference/scannerUnexpectedNullCharacter1.errors.txt b/tests/baselines/reference/scannerUnexpectedNullCharacter1.errors.txt index 6c9e72240ca31b6cf952736ddab788c0a1a677c6..74f03c84574cc3b070c2e67956bb54eb066c8a06 100644 GIT binary patch delta 19 XcmZ3@ww7(fEGEXf$)}kN!DIpeM=l2d delta 15 VcmZ3>wwi6jET+k4nGAtA0RS;>1_l5C diff --git a/tests/baselines/reference/unicodeIdentifierName2.errors.txt b/tests/baselines/reference/unicodeIdentifierName2.errors.txt index d59b5c2b21a03..5c3ebd73c914d 100644 --- a/tests/baselines/reference/unicodeIdentifierName2.errors.txt +++ b/tests/baselines/reference/unicodeIdentifierName2.errors.txt @@ -6,11 +6,11 @@ tests/cases/compiler/unicodeIdentifierName2.ts(1,26): error TS1127: Invalid char ==== tests/cases/compiler/unicodeIdentifierName2.ts (4 errors) ==== var a₁ = "hello"; alert(a₁) - + ~ !!! error TS1127: Invalid character. ~ !!! error TS1134: Variable declaration expected. ~~~~~~~ !!! error TS1134: Variable declaration expected. - + ~ !!! error TS1127: Invalid character. \ No newline at end of file