Skip to content

Commit

Permalink
Fix incorrect parser error assumption in semicolon handling leading t…
Browse files Browse the repository at this point in the history
…o incremental parser brokenness (#48067)
  • Loading branch information
jakebailey authored Mar 1, 2022
1 parent 7191875 commit e4fe50c
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 14 deletions.
13 changes: 1 addition & 12 deletions src/compiler/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1681,19 +1681,8 @@ namespace ts {
return;
}

// If an initializer was parsed but there is still an error in finding the next semicolon,
// we generally know there was an error already reported in the initializer...
// class Example { a = new Map([), ) }
// ~
if (initializer) {
// ...unless we've found the start of a block after a property declaration, in which
// case we can know that regardless of the initializer we should complain on the block.
// class Example { a = 0 {} }
// ~
if (token() === SyntaxKind.OpenBraceToken) {
parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(SyntaxKind.SemicolonToken));
}

parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(SyntaxKind.SemicolonToken));
return;
}

Expand Down
4 changes: 2 additions & 2 deletions tests/baselines/reference/parser0_004152.errors.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,28): error TS2304: Cannot find name 'DisplayPosition'.
tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,45): error TS1137: Expression or comma expected.
tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,46): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected.
tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,46): error TS1005: ';' expected.
tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,49): error TS1005: ';' expected.
tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,51): error TS2300: Duplicate identifier '3'.
tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,52): error TS1005: ';' expected.
Expand Down Expand Up @@ -41,7 +41,7 @@ tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(3,25): error T
~
!!! error TS1137: Expression or comma expected.
~
!!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected.
!!! error TS1005: ';' expected.
~
!!! error TS1005: ';' expected.
~
Expand Down
17 changes: 17 additions & 0 deletions tests/cases/fourslash/parserCorruptionAfterMapInClass.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/// <reference path="fourslash.ts" />

// @target: esnext
// @lib: es2015
// @strict: true

//// class C {
//// map = new Set<string, number>/*$*/
////
//// foo() {
////
//// }
//// }

goTo.marker('$');
edit.insert('()');
verify.getSyntacticDiagnostics([]);

0 comments on commit e4fe50c

Please sign in to comment.