From 35cd0e41dd73ac40397dcf2b20a4e3828794a610 Mon Sep 17 00:00:00 2001 From: Ayaz Hafiz Date: Fri, 20 Mar 2020 10:16:51 -0700 Subject: [PATCH] Token hints for missing closing braces: classes, enums, jsx, modules, types This commit adds token hints for missing close braces in - Class definitions - Enum definitions - JSX expressions - Module definitions (this includes augmentations and namespaces) - Type member lists (this includes interfaces) The token hint refers to the opening brace for which the parser expected a corresponding closing brace. Note that this commit *does not* update all occurences of an expectation for a close brace to provide token hints. Constructs for which this token hint is not provided include: - Mapped types - Switch statements - Object binding patterns - JSX spread attributes (`
`) - JSDoc implements/augments tags (`/* @implements {SomeInterface} */`) Part of #35597. --- src/compiler/diagnosticMessages.json | 2 +- src/compiler/parser.ts | 54 ++++++++++--------- ...lassMemberWithMissingIdentifier.errors.txt | 1 + ...assMemberWithMissingIdentifier2.errors.txt | 1 + ...torWithIncompleteTypeAnnotation.errors.txt | 1 + ...perCallsInNonConstructorMembers.errors.txt | 1 + ...thDotFollowedByNamespaceKeyword.errors.txt | 3 +- .../reference/jsxAndTypeAssertion.errors.txt | 15 +++++- .../jsxInvalidEsprimaTestSuite.errors.txt | 1 + ...ingCloseBraceInClassDeclaration.errors.txt | 14 +++++ .../missingCloseBraceInClassDeclaration.js | 19 +++++++ ...issingCloseBraceInClassDeclaration.symbols | 17 ++++++ .../missingCloseBraceInClassDeclaration.types | 18 +++++++ .../missingCloseBraceInEnum.errors.txt | 13 +++++ .../reference/missingCloseBraceInEnum.js | 15 ++++++ .../reference/missingCloseBraceInEnum.symbols | 14 +++++ .../reference/missingCloseBraceInEnum.types | 14 +++++ ...seBraceInJsxAttributeExpression.errors.txt | 18 +++++++ ...ssingCloseBraceInJsxAttributeExpression.js | 7 +++ ...CloseBraceInJsxAttributeExpression.symbols | 5 ++ ...ngCloseBraceInJsxAttributeExpression.types | 13 +++++ ...issingCloseBraceInJsxExpression.errors.txt | 9 ++++ .../missingCloseBraceInJsxExpression.js | 6 +++ .../missingCloseBraceInJsxExpression.symbols | 4 ++ .../missingCloseBraceInJsxExpression.types | 8 +++ .../missingCloseBraceInModuleBlock.errors.txt | 11 ++++ .../missingCloseBraceInModuleBlock.js | 7 +++ .../missingCloseBraceInModuleBlock.symbols | 8 +++ .../missingCloseBraceInModuleBlock.types | 7 +++ ...ssingCloseBraceInTypeMemberList.errors.txt | 10 ++++ .../missingCloseBraceInTypeMemberList.js | 6 +++ .../missingCloseBraceInTypeMemberList.symbols | 7 +++ .../missingCloseBraceInTypeMemberList.types | 7 +++ .../reference/parser512084.errors.txt | 3 +- ...parserAccessibilityAfterStatic6.errors.txt | 3 +- .../parserComputedPropertyName33.errors.txt | 1 + ...parserErrorRecoveryIfStatement5.errors.txt | 3 +- ...rserErrorRecovery_ClassElement3.errors.txt | 4 +- ...rErrorRecovery_SwitchStatement2.errors.txt | 3 +- .../parserUnterminatedGeneric1.errors.txt | 3 +- .../parserUnterminatedGeneric2.errors.txt | 4 +- .../typeGuardFunctionErrors.errors.txt | 1 + .../missingCloseBraceInClassDeclaration.ts | 6 +++ .../cases/compiler/missingCloseBraceInEnum.ts | 5 ++ ...singCloseBraceInJsxAttributeExpression.tsx | 3 ++ .../missingCloseBraceInJsxExpression.tsx | 3 ++ .../missingCloseBraceInModuleBlock.ts | 3 ++ .../missingCloseBraceInTypeMemberList.ts | 2 + 48 files changed, 349 insertions(+), 34 deletions(-) create mode 100644 tests/baselines/reference/missingCloseBraceInClassDeclaration.errors.txt create mode 100644 tests/baselines/reference/missingCloseBraceInClassDeclaration.js create mode 100644 tests/baselines/reference/missingCloseBraceInClassDeclaration.symbols create mode 100644 tests/baselines/reference/missingCloseBraceInClassDeclaration.types create mode 100644 tests/baselines/reference/missingCloseBraceInEnum.errors.txt create mode 100644 tests/baselines/reference/missingCloseBraceInEnum.js create mode 100644 tests/baselines/reference/missingCloseBraceInEnum.symbols create mode 100644 tests/baselines/reference/missingCloseBraceInEnum.types create mode 100644 tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.errors.txt create mode 100644 tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.js create mode 100644 tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.symbols create mode 100644 tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.types create mode 100644 tests/baselines/reference/missingCloseBraceInJsxExpression.errors.txt create mode 100644 tests/baselines/reference/missingCloseBraceInJsxExpression.js create mode 100644 tests/baselines/reference/missingCloseBraceInJsxExpression.symbols create mode 100644 tests/baselines/reference/missingCloseBraceInJsxExpression.types create mode 100644 tests/baselines/reference/missingCloseBraceInModuleBlock.errors.txt create mode 100644 tests/baselines/reference/missingCloseBraceInModuleBlock.js create mode 100644 tests/baselines/reference/missingCloseBraceInModuleBlock.symbols create mode 100644 tests/baselines/reference/missingCloseBraceInModuleBlock.types create mode 100644 tests/baselines/reference/missingCloseBraceInTypeMemberList.errors.txt create mode 100644 tests/baselines/reference/missingCloseBraceInTypeMemberList.js create mode 100644 tests/baselines/reference/missingCloseBraceInTypeMemberList.symbols create mode 100644 tests/baselines/reference/missingCloseBraceInTypeMemberList.types create mode 100644 tests/cases/compiler/missingCloseBraceInClassDeclaration.ts create mode 100644 tests/cases/compiler/missingCloseBraceInEnum.ts create mode 100644 tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx create mode 100644 tests/cases/compiler/missingCloseBraceInJsxExpression.tsx create mode 100644 tests/cases/compiler/missingCloseBraceInModuleBlock.ts create mode 100644 tests/cases/compiler/missingCloseBraceInTypeMemberList.ts diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 2dfabe540adf7..54c05de2d45e8 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -15,7 +15,7 @@ "category": "Error", "code": 1006 }, - "The parser expected to find a '}' to match the '{' token here.": { + "The parser expected to find a '{0}' to match the '{1}' token here.": { "category": "Error", "code": 1007 }, diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index fdc1e8246ac0d..4845fb07481eb 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1308,6 +1308,23 @@ namespace ts { return false; } + function parseExpectedCloseToken(closeTokenKind: SyntaxKind, openTokenKind: SyntaxKind, openTokenPos: number, shouldAdvance = true): boolean { + if (!parseExpected(closeTokenKind, /*diagnosticMessage*/ undefined, shouldAdvance)) { + const lastError = lastOrUndefined(parseDiagnostics); + if (lastError && lastError.code === Diagnostics._0_expected.code) { + const openTokenStr = tokenToString(openTokenKind)!; + const closeTokenStr = tokenToString(closeTokenKind)!; + addRelatedInfo( + lastError, + createFileDiagnostic(sourceFile, openTokenPos, openTokenStr.length, + Diagnostics.The_parser_expected_to_find_a_0_to_match_the_1_token_here, closeTokenStr, openTokenStr) + ); + } + return false; + } + return true; + } + function parseExpectedJSDoc(kind: JSDocSyntaxKind) { if (token() === kind) { nextTokenJSDoc(); @@ -2988,9 +3005,10 @@ namespace ts { function parseObjectTypeMembers(): NodeArray { let members: NodeArray; + const openBracePosition = scanner.getTokenPos(); if (parseExpected(SyntaxKind.OpenBraceToken)) { members = parseList(ParsingContext.TypeMembers, parseTypeMember); - parseExpected(SyntaxKind.CloseBraceToken); + parseExpectedCloseToken(SyntaxKind.CloseBraceToken, SyntaxKind.OpenBraceToken, openBracePosition); } else { members = createMissingList(); @@ -4654,6 +4672,7 @@ namespace ts { function parseJsxExpression(inExpressionContext: boolean): JsxExpression | undefined { const node = createNode(SyntaxKind.JsxExpression); + const openBracePosition = scanner.getTokenPos(); if (!parseExpected(SyntaxKind.OpenBraceToken)) { return undefined; } @@ -4666,10 +4685,10 @@ namespace ts { node.expression = parseExpression(); } if (inExpressionContext) { - parseExpected(SyntaxKind.CloseBraceToken); + parseExpectedCloseToken(SyntaxKind.CloseBraceToken, SyntaxKind.OpenBraceToken, openBracePosition); } else { - if (parseExpected(SyntaxKind.CloseBraceToken, /*message*/ undefined, /*shouldAdvance*/ false)) { + if (parseExpectedCloseToken(SyntaxKind.CloseBraceToken, SyntaxKind.OpenBraceToken, openBracePosition, /*shouldAdvance*/ false)) { scanJsxText(); } } @@ -5143,15 +5162,7 @@ namespace ts { } node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralElement, /*considerSemicolonAsDelimiter*/ true); - if (!parseExpected(SyntaxKind.CloseBraceToken)) { - const lastError = lastOrUndefined(parseDiagnostics); - if (lastError && lastError.code === Diagnostics._0_expected.code) { - addRelatedInfo( - lastError, - createFileDiagnostic(sourceFile, openBracePosition, 1, Diagnostics.The_parser_expected_to_find_a_to_match_the_token_here) - ); - } - } + parseExpectedCloseToken(SyntaxKind.CloseBraceToken, SyntaxKind.OpenBraceToken, openBracePosition); return finishNode(node); } @@ -5239,15 +5250,7 @@ namespace ts { } node.statements = parseList(ParsingContext.BlockStatements, parseStatement); - if (!parseExpected(SyntaxKind.CloseBraceToken)) { - const lastError = lastOrUndefined(parseDiagnostics); - if (lastError && lastError.code === Diagnostics._0_expected.code) { - addRelatedInfo( - lastError, - createFileDiagnostic(sourceFile, openBracePosition, 1, Diagnostics.The_parser_expected_to_find_a_to_match_the_token_here) - ); - } - } + parseExpectedCloseToken(SyntaxKind.CloseBraceToken, SyntaxKind.OpenBraceToken, openBracePosition); } else { node.statements = createMissingList(); @@ -6287,11 +6290,12 @@ namespace ts { node.typeParameters = parseTypeParameters(); node.heritageClauses = parseHeritageClauses(); + const openBracePosition = scanner.getTokenPos(); if (parseExpected(SyntaxKind.OpenBraceToken)) { // ClassTail[Yield,Await] : (Modified) See 14.5 // ClassHeritage[?Yield,?Await]opt { ClassBody[?Yield,?Await]opt } node.members = parseClassMembers(); - parseExpected(SyntaxKind.CloseBraceToken); + parseExpectedCloseToken(SyntaxKind.CloseBraceToken, SyntaxKind.OpenBraceToken, openBracePosition); } else { node.members = createMissingList(); @@ -6392,9 +6396,10 @@ namespace ts { node.kind = SyntaxKind.EnumDeclaration; parseExpected(SyntaxKind.EnumKeyword); node.name = parseIdentifier(); + const openBracePosition = scanner.getTokenPos(); if (parseExpected(SyntaxKind.OpenBraceToken)) { node.members = doOutsideOfYieldAndAwaitContext(() => parseDelimitedList(ParsingContext.EnumMembers, parseEnumMember)); - parseExpected(SyntaxKind.CloseBraceToken); + parseExpectedCloseToken(SyntaxKind.CloseBraceToken, SyntaxKind.OpenBraceToken, openBracePosition); } else { node.members = createMissingList(); @@ -6404,9 +6409,10 @@ namespace ts { function parseModuleBlock(): ModuleBlock { const node = createNode(SyntaxKind.ModuleBlock); + const openBracePosition = scanner.getTokenPos(); if (parseExpected(SyntaxKind.OpenBraceToken)) { node.statements = parseList(ParsingContext.BlockStatements, parseStatement); - parseExpected(SyntaxKind.CloseBraceToken); + parseExpectedCloseToken(SyntaxKind.CloseBraceToken, SyntaxKind.OpenBraceToken, openBracePosition); } else { node.statements = createMissingList(); diff --git a/tests/baselines/reference/classMemberWithMissingIdentifier.errors.txt b/tests/baselines/reference/classMemberWithMissingIdentifier.errors.txt index 2cd21b0e4f060..c67bb5734db5c 100644 --- a/tests/baselines/reference/classMemberWithMissingIdentifier.errors.txt +++ b/tests/baselines/reference/classMemberWithMissingIdentifier.errors.txt @@ -10,6 +10,7 @@ tests/cases/compiler/classMemberWithMissingIdentifier.ts(3,1): error TS1128: Dec !!! error TS1146: Declaration expected. ~ !!! error TS1005: ';' expected. +!!! related TS1007 tests/cases/compiler/classMemberWithMissingIdentifier.ts:1:9: The parser expected to find a '}' to match the '{' token here. } ~ !!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/classMemberWithMissingIdentifier2.errors.txt b/tests/baselines/reference/classMemberWithMissingIdentifier2.errors.txt index be7522233f0b0..b3f7d728350f8 100644 --- a/tests/baselines/reference/classMemberWithMissingIdentifier2.errors.txt +++ b/tests/baselines/reference/classMemberWithMissingIdentifier2.errors.txt @@ -14,6 +14,7 @@ tests/cases/compiler/classMemberWithMissingIdentifier2.ts(3,1): error TS1128: De !!! error TS1146: Declaration expected. ~ !!! error TS1005: ';' expected. +!!! related TS1007 tests/cases/compiler/classMemberWithMissingIdentifier2.ts:1:9: The parser expected to find a '}' to match the '{' token here. ~ !!! error TS1005: ',' expected. ~~~~~~ diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index 07a11fafd3328..b45f733e07412 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -142,6 +142,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS if (retValue != 0) { ~~ !!! error TS1005: ',' expected. +!!! related TS1007 tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts:15:26: The parser expected to find a '}' to match the '{' token here. ~ !!! error TS1005: ';' expected. diff --git a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt index fbf03bd2f231a..bc20d9bd9c71b 100644 --- a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt +++ b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt @@ -50,6 +50,7 @@ tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassS !!! error TS2304: Cannot find name 'super'. ~ !!! error TS1005: ';' expected. +!!! related TS1007 tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts:7:28: The parser expected to find a '}' to match the '{' token here. ~ !!! error TS1109: Expression expected. b() { diff --git a/tests/baselines/reference/errorRecoveryWithDotFollowedByNamespaceKeyword.errors.txt b/tests/baselines/reference/errorRecoveryWithDotFollowedByNamespaceKeyword.errors.txt index 3a7c89e2f4157..b54f29f7c6f80 100644 --- a/tests/baselines/reference/errorRecoveryWithDotFollowedByNamespaceKeyword.errors.txt +++ b/tests/baselines/reference/errorRecoveryWithDotFollowedByNamespaceKeyword.errors.txt @@ -17,4 +17,5 @@ tests/cases/compiler/errorRecoveryWithDotFollowedByNamespaceKeyword.ts(9,2): err !!! error TS1005: '}' expected. !!! related TS1007 tests/cases/compiler/errorRecoveryWithDotFollowedByNamespaceKeyword.ts:3:19: The parser expected to find a '}' to match the '{' token here. -!!! related TS1007 tests/cases/compiler/errorRecoveryWithDotFollowedByNamespaceKeyword.ts:2:20: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file +!!! related TS1007 tests/cases/compiler/errorRecoveryWithDotFollowedByNamespaceKeyword.ts:2:20: The parser expected to find a '}' to match the '{' token here. +!!! related TS1007 tests/cases/compiler/errorRecoveryWithDotFollowedByNamespaceKeyword.ts:1:13: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/jsxAndTypeAssertion.errors.txt b/tests/baselines/reference/jsxAndTypeAssertion.errors.txt index c62cbf4be0598..dc4463fa675f9 100644 --- a/tests/baselines/reference/jsxAndTypeAssertion.errors.txt +++ b/tests/baselines/reference/jsxAndTypeAssertion.errors.txt @@ -21,9 +21,11 @@ tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(18,69): error TS1381: Unexpe tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(18,76): error TS1381: Unexpected token. Did you mean `{'}'}` or `}`? tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(21,1): error TS1005: ':' expected. tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(21,1): error TS1005: '{}}>hello; ~ @@ -58,6 +62,7 @@ tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(21,1): error TS1005: ''}` or `>`? ~ !!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx:12:15: The parser expected to find a '}' to match the '{' token here. x = {}}>hello{{}}; ~~~ @@ -70,6 +75,7 @@ tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(21,1): error TS1005: 'x, x = ; @@ -89,5 +95,12 @@ tests/cases/conformance/jsx/jsxAndTypeAssertion.tsx(21,1): error TS1005: '{"str";}; ~ !!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/conformance/jsx/20.tsx:1:4: The parser expected to find a '}' to match the '{' token here. ~ !!! error TS1381: Unexpected token. Did you mean `{'}'}` or `}`? ==== tests/cases/conformance/jsx/21.tsx (1 errors) ==== diff --git a/tests/baselines/reference/missingCloseBraceInClassDeclaration.errors.txt b/tests/baselines/reference/missingCloseBraceInClassDeclaration.errors.txt new file mode 100644 index 0000000000000..2b834378e9659 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInClassDeclaration.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/missingCloseBraceInClassDeclaration.ts(7,1): error TS1005: '}' expected. + + +==== tests/cases/compiler/missingCloseBraceInClassDeclaration.ts (1 errors) ==== + class TestCls { + prop = 0; + method() { + return this.prop; + } + + + +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/compiler/missingCloseBraceInClassDeclaration.ts:1:15: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/missingCloseBraceInClassDeclaration.js b/tests/baselines/reference/missingCloseBraceInClassDeclaration.js new file mode 100644 index 0000000000000..36f46cac05b11 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInClassDeclaration.js @@ -0,0 +1,19 @@ +//// [missingCloseBraceInClassDeclaration.ts] +class TestCls { + prop = 0; + method() { + return this.prop; + } + + + +//// [missingCloseBraceInClassDeclaration.js] +var TestCls = /** @class */ (function () { + function TestCls() { + this.prop = 0; + } + TestCls.prototype.method = function () { + return this.prop; + }; + return TestCls; +}()); diff --git a/tests/baselines/reference/missingCloseBraceInClassDeclaration.symbols b/tests/baselines/reference/missingCloseBraceInClassDeclaration.symbols new file mode 100644 index 0000000000000..7e2c580e83c43 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInClassDeclaration.symbols @@ -0,0 +1,17 @@ +=== tests/cases/compiler/missingCloseBraceInClassDeclaration.ts === +class TestCls { +>TestCls : Symbol(TestCls, Decl(missingCloseBraceInClassDeclaration.ts, 0, 0)) + + prop = 0; +>prop : Symbol(TestCls.prop, Decl(missingCloseBraceInClassDeclaration.ts, 0, 15)) + + method() { +>method : Symbol(TestCls.method, Decl(missingCloseBraceInClassDeclaration.ts, 1, 11)) + + return this.prop; +>this.prop : Symbol(TestCls.prop, Decl(missingCloseBraceInClassDeclaration.ts, 0, 15)) +>this : Symbol(TestCls, Decl(missingCloseBraceInClassDeclaration.ts, 0, 0)) +>prop : Symbol(TestCls.prop, Decl(missingCloseBraceInClassDeclaration.ts, 0, 15)) + } + + diff --git a/tests/baselines/reference/missingCloseBraceInClassDeclaration.types b/tests/baselines/reference/missingCloseBraceInClassDeclaration.types new file mode 100644 index 0000000000000..ce6ffc09dbaa2 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInClassDeclaration.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/missingCloseBraceInClassDeclaration.ts === +class TestCls { +>TestCls : TestCls + + prop = 0; +>prop : number +>0 : 0 + + method() { +>method : () => number + + return this.prop; +>this.prop : number +>this : this +>prop : number + } + + diff --git a/tests/baselines/reference/missingCloseBraceInEnum.errors.txt b/tests/baselines/reference/missingCloseBraceInEnum.errors.txt new file mode 100644 index 0000000000000..31725e724c92a --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInEnum.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/missingCloseBraceInEnum.ts(6,1): error TS1005: '}' expected. + + +==== tests/cases/compiler/missingCloseBraceInEnum.ts (1 errors) ==== + enum Colors { + Red, + Green, + Blue, + + + +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/compiler/missingCloseBraceInEnum.ts:1:13: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/missingCloseBraceInEnum.js b/tests/baselines/reference/missingCloseBraceInEnum.js new file mode 100644 index 0000000000000..e34903e33bf61 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInEnum.js @@ -0,0 +1,15 @@ +//// [missingCloseBraceInEnum.ts] +enum Colors { + Red, + Green, + Blue, + + + +//// [missingCloseBraceInEnum.js] +var Colors; +(function (Colors) { + Colors[Colors["Red"] = 0] = "Red"; + Colors[Colors["Green"] = 1] = "Green"; + Colors[Colors["Blue"] = 2] = "Blue"; +})(Colors || (Colors = {})); diff --git a/tests/baselines/reference/missingCloseBraceInEnum.symbols b/tests/baselines/reference/missingCloseBraceInEnum.symbols new file mode 100644 index 0000000000000..12359a8313468 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInEnum.symbols @@ -0,0 +1,14 @@ +=== tests/cases/compiler/missingCloseBraceInEnum.ts === +enum Colors { +>Colors : Symbol(Colors, Decl(missingCloseBraceInEnum.ts, 0, 0)) + + Red, +>Red : Symbol(Colors.Red, Decl(missingCloseBraceInEnum.ts, 0, 13)) + + Green, +>Green : Symbol(Colors.Green, Decl(missingCloseBraceInEnum.ts, 1, 6)) + + Blue, +>Blue : Symbol(Colors.Blue, Decl(missingCloseBraceInEnum.ts, 2, 8)) + + diff --git a/tests/baselines/reference/missingCloseBraceInEnum.types b/tests/baselines/reference/missingCloseBraceInEnum.types new file mode 100644 index 0000000000000..cea16b6e81efd --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInEnum.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/missingCloseBraceInEnum.ts === +enum Colors { +>Colors : Colors + + Red, +>Red : Colors.Red + + Green, +>Green : Colors.Green + + Blue, +>Blue : Colors.Blue + + diff --git a/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.errors.txt b/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.errors.txt new file mode 100644 index 0000000000000..8db4416dd3c91 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.errors.txt @@ -0,0 +1,18 @@ +tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx(1,23): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. +tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx(1,30): error TS1109: Expression expected. +tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx(1,31): error TS1109: Expression expected. +tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx(2,1): error TS1005: '}' expected. + + +==== tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx (4 errors) ==== + let el = + ~~~~~ +!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. + ~ +!!! error TS1109: Expression expected. + +!!! error TS1109: Expression expected. + + +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx:1:22: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.js b/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.js new file mode 100644 index 0000000000000..53d6b2e6a6714 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.js @@ -0,0 +1,7 @@ +//// [missingCloseBraceInJsxAttributeExpression.tsx] +let el = + + +//// [missingCloseBraceInJsxAttributeExpression.jsx] +var el = +}/>; diff --git a/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.symbols b/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.symbols new file mode 100644 index 0000000000000..e09d8e532a40e --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.symbols @@ -0,0 +1,5 @@ +=== tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx === +let el = +>el : Symbol(el, Decl(missingCloseBraceInJsxAttributeExpression.tsx, 0, 3)) +>prop : Symbol(prop, Decl(missingCloseBraceInJsxAttributeExpression.tsx, 0, 15)) + diff --git a/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.types b/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.types new file mode 100644 index 0000000000000..aafa001d887dd --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInJsxAttributeExpression.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx === +let el = +>el : any +> : any +>input : any +>prop : boolean +>'abc' /> : boolean +>'abc' / : number +>'abc' : "abc" +> : any + +> : any + diff --git a/tests/baselines/reference/missingCloseBraceInJsxExpression.errors.txt b/tests/baselines/reference/missingCloseBraceInJsxExpression.errors.txt new file mode 100644 index 0000000000000..c72b1ef423f18 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInJsxExpression.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/missingCloseBraceInJsxExpression.tsx(1,23): error TS1005: '}' expected. + + +==== tests/cases/compiler/missingCloseBraceInJsxExpression.tsx (1 errors) ==== + let el =
{'hello'
+ ~~ +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/compiler/missingCloseBraceInJsxExpression.tsx:1:15: The parser expected to find a '}' to match the '{' token here. + \ No newline at end of file diff --git a/tests/baselines/reference/missingCloseBraceInJsxExpression.js b/tests/baselines/reference/missingCloseBraceInJsxExpression.js new file mode 100644 index 0000000000000..8e2b59cea7419 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInJsxExpression.js @@ -0,0 +1,6 @@ +//// [missingCloseBraceInJsxExpression.tsx] +let el =
{'hello'
+ + +//// [missingCloseBraceInJsxExpression.jsx] +var el =
{'hello'}
; diff --git a/tests/baselines/reference/missingCloseBraceInJsxExpression.symbols b/tests/baselines/reference/missingCloseBraceInJsxExpression.symbols new file mode 100644 index 0000000000000..3b79ed9b1e7bc --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInJsxExpression.symbols @@ -0,0 +1,4 @@ +=== tests/cases/compiler/missingCloseBraceInJsxExpression.tsx === +let el =
{'hello'
+>el : Symbol(el, Decl(missingCloseBraceInJsxExpression.tsx, 0, 3)) + diff --git a/tests/baselines/reference/missingCloseBraceInJsxExpression.types b/tests/baselines/reference/missingCloseBraceInJsxExpression.types new file mode 100644 index 0000000000000..b7c3322362ce9 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInJsxExpression.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/missingCloseBraceInJsxExpression.tsx === +let el =
{'hello'
+>el : any +>
{'hello'
: any +>div : any +>'hello' : "hello" +>div : any + diff --git a/tests/baselines/reference/missingCloseBraceInModuleBlock.errors.txt b/tests/baselines/reference/missingCloseBraceInModuleBlock.errors.txt new file mode 100644 index 0000000000000..fe0ef6a2d76ba --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInModuleBlock.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/missingCloseBraceInModuleBlock.ts(4,1): error TS1005: '}' expected. + + +==== tests/cases/compiler/missingCloseBraceInModuleBlock.ts (1 errors) ==== + module "dummy" { + interface Dummy {} + + + +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/compiler/missingCloseBraceInModuleBlock.ts:1:16: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/missingCloseBraceInModuleBlock.js b/tests/baselines/reference/missingCloseBraceInModuleBlock.js new file mode 100644 index 0000000000000..a8352a29e7c54 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInModuleBlock.js @@ -0,0 +1,7 @@ +//// [missingCloseBraceInModuleBlock.ts] +module "dummy" { + interface Dummy {} + + + +//// [missingCloseBraceInModuleBlock.js] diff --git a/tests/baselines/reference/missingCloseBraceInModuleBlock.symbols b/tests/baselines/reference/missingCloseBraceInModuleBlock.symbols new file mode 100644 index 0000000000000..5b984df4b0c98 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInModuleBlock.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/missingCloseBraceInModuleBlock.ts === +module "dummy" { +>"dummy" : Symbol("dummy", Decl(missingCloseBraceInModuleBlock.ts, 0, 0)) + + interface Dummy {} +>Dummy : Symbol(Dummy, Decl(missingCloseBraceInModuleBlock.ts, 0, 16)) + + diff --git a/tests/baselines/reference/missingCloseBraceInModuleBlock.types b/tests/baselines/reference/missingCloseBraceInModuleBlock.types new file mode 100644 index 0000000000000..a97166b16c20f --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInModuleBlock.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/missingCloseBraceInModuleBlock.ts === +module "dummy" { +>"dummy" : typeof import("dummy") + + interface Dummy {} + + diff --git a/tests/baselines/reference/missingCloseBraceInTypeMemberList.errors.txt b/tests/baselines/reference/missingCloseBraceInTypeMemberList.errors.txt new file mode 100644 index 0000000000000..78145b7e59305 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInTypeMemberList.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/missingCloseBraceInTypeMemberList.ts(3,1): error TS1005: '}' expected. + + +==== tests/cases/compiler/missingCloseBraceInTypeMemberList.ts (1 errors) ==== + type ITest = { + num: number; + + +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/compiler/missingCloseBraceInTypeMemberList.ts:1:14: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/missingCloseBraceInTypeMemberList.js b/tests/baselines/reference/missingCloseBraceInTypeMemberList.js new file mode 100644 index 0000000000000..e45fd3b785b99 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInTypeMemberList.js @@ -0,0 +1,6 @@ +//// [missingCloseBraceInTypeMemberList.ts] +type ITest = { + num: number; + + +//// [missingCloseBraceInTypeMemberList.js] diff --git a/tests/baselines/reference/missingCloseBraceInTypeMemberList.symbols b/tests/baselines/reference/missingCloseBraceInTypeMemberList.symbols new file mode 100644 index 0000000000000..fb61024af7913 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInTypeMemberList.symbols @@ -0,0 +1,7 @@ +=== tests/cases/compiler/missingCloseBraceInTypeMemberList.ts === +type ITest = { +>ITest : Symbol(ITest, Decl(missingCloseBraceInTypeMemberList.ts, 0, 0)) + + num: number; +>num : Symbol(num, Decl(missingCloseBraceInTypeMemberList.ts, 0, 14)) + diff --git a/tests/baselines/reference/missingCloseBraceInTypeMemberList.types b/tests/baselines/reference/missingCloseBraceInTypeMemberList.types new file mode 100644 index 0000000000000..e0a75bb9cd020 --- /dev/null +++ b/tests/baselines/reference/missingCloseBraceInTypeMemberList.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/missingCloseBraceInTypeMemberList.ts === +type ITest = { +>ITest : ITest + + num: number; +>num : number + diff --git a/tests/baselines/reference/parser512084.errors.txt b/tests/baselines/reference/parser512084.errors.txt index 49630328605e9..b03d5364807fe 100644 --- a/tests/baselines/reference/parser512084.errors.txt +++ b/tests/baselines/reference/parser512084.errors.txt @@ -5,4 +5,5 @@ tests/cases/conformance/parser/ecmascript5/RegressionTests/parser512084.ts(2,1): class foo { -!!! error TS1005: '}' expected. \ No newline at end of file +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/RegressionTests/parser512084.ts:1:11: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/parserAccessibilityAfterStatic6.errors.txt b/tests/baselines/reference/parserAccessibilityAfterStatic6.errors.txt index 4a537b7be5aee..2b1baeffeb81a 100644 --- a/tests/baselines/reference/parserAccessibilityAfterStatic6.errors.txt +++ b/tests/baselines/reference/parserAccessibilityAfterStatic6.errors.txt @@ -6,4 +6,5 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStati { static public -!!! error TS1005: '}' expected. \ No newline at end of file +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/AccessibilityAfterStatic/parserAccessibilityAfterStatic6.ts:2:1: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/parserComputedPropertyName33.errors.txt b/tests/baselines/reference/parserComputedPropertyName33.errors.txt index 5ce420ceb60a6..bfdcde44977be 100644 --- a/tests/baselines/reference/parserComputedPropertyName33.errors.txt +++ b/tests/baselines/reference/parserComputedPropertyName33.errors.txt @@ -15,6 +15,7 @@ tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedP !!! error TS2304: Cannot find name 'e2'. ~ !!! error TS1005: ';' expected. +!!! related TS1007 tests/cases/conformance/parser/ecmascript6/ComputedPropertyNames/parserComputedPropertyName33.ts:1:9: The parser expected to find a '}' to match the '{' token here. } ~ !!! error TS1128: Declaration or statement expected. \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecoveryIfStatement5.errors.txt b/tests/baselines/reference/parserErrorRecoveryIfStatement5.errors.txt index 9034972dde112..ca96fcb40e2bb 100644 --- a/tests/baselines/reference/parserErrorRecoveryIfStatement5.errors.txt +++ b/tests/baselines/reference/parserErrorRecoveryIfStatement5.errors.txt @@ -27,4 +27,5 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/IfStatements/parserErro } } -!!! error TS1005: '}' expected. \ No newline at end of file +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/IfStatements/parserErrorRecoveryIfStatement5.ts:1:11: The parser expected to find a '}' to match the '{' token here. \ 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..aa89fb1e22afb 100644 --- a/tests/baselines/reference/parserErrorRecovery_ClassElement3.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ClassElement3.errors.txt @@ -19,4 +19,6 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ClassElements/parserErr !!! error TS1127: Invalid character. -!!! error TS1005: '}' expected. \ No newline at end of file +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ClassElements/parserErrorRecovery_ClassElement3.ts:6:11: The parser expected to find a '}' to match the '{' token here. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ClassElements/parserErrorRecovery_ClassElement3.ts:1:10: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_SwitchStatement2.errors.txt b/tests/baselines/reference/parserErrorRecovery_SwitchStatement2.errors.txt index 2fca88d8bebb0..3231498e0d23a 100644 --- a/tests/baselines/reference/parserErrorRecovery_SwitchStatement2.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_SwitchStatement2.errors.txt @@ -16,4 +16,5 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/SwitchStatements/parser } !!! error TS1005: '}' expected. -!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/SwitchStatements/parserErrorRecovery_SwitchStatement2.ts:2:17: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/SwitchStatements/parserErrorRecovery_SwitchStatement2.ts:2:17: The parser expected to find a '}' to match the '{' token here. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/SwitchStatements/parserErrorRecovery_SwitchStatement2.ts:1:9: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/parserUnterminatedGeneric1.errors.txt b/tests/baselines/reference/parserUnterminatedGeneric1.errors.txt index 53a98b2d7f9e1..e47363b541cbd 100644 --- a/tests/baselines/reference/parserUnterminatedGeneric1.errors.txt +++ b/tests/baselines/reference/parserUnterminatedGeneric1.errors.txt @@ -11,4 +11,5 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGener ~~~~~~~~ !!! error TS2304: Cannot find name 'IPromise'. -!!! error TS1005: '>' expected. \ No newline at end of file +!!! error TS1005: '>' expected. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric1.ts:1:22: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt b/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt index e38a548f34c97..bdd035c3ee7fb 100644 --- a/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt +++ b/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt @@ -53,4 +53,6 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGener ~~~~~~~~ !!! error TS2304: Cannot find name 'IPromise'. -!!! error TS1005: '>' expected. \ No newline at end of file +!!! error TS1005: '>' expected. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts:7:25: The parser expected to find a '}' to match the '{' token here. +!!! related TS1007 tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts:1:19: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/typeGuardFunctionErrors.errors.txt b/tests/baselines/reference/typeGuardFunctionErrors.errors.txt index 2f3e7eb1862ed..4bb088b671640 100644 --- a/tests/baselines/reference/typeGuardFunctionErrors.errors.txt +++ b/tests/baselines/reference/typeGuardFunctionErrors.errors.txt @@ -285,6 +285,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(166,54 !!! error TS2304: Cannot find name 'p1'. ~~ !!! error TS1005: ';' expected. +!!! related TS1007 tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts:118:14: The parser expected to find a '}' to match the '{' token here. ~ !!! error TS1005: ';' expected. } diff --git a/tests/cases/compiler/missingCloseBraceInClassDeclaration.ts b/tests/cases/compiler/missingCloseBraceInClassDeclaration.ts new file mode 100644 index 0000000000000..d22c0e7cce3e4 --- /dev/null +++ b/tests/cases/compiler/missingCloseBraceInClassDeclaration.ts @@ -0,0 +1,6 @@ +class TestCls { + prop = 0; + method() { + return this.prop; + } + diff --git a/tests/cases/compiler/missingCloseBraceInEnum.ts b/tests/cases/compiler/missingCloseBraceInEnum.ts new file mode 100644 index 0000000000000..983fe800614c3 --- /dev/null +++ b/tests/cases/compiler/missingCloseBraceInEnum.ts @@ -0,0 +1,5 @@ +enum Colors { + Red, + Green, + Blue, + diff --git a/tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx b/tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx new file mode 100644 index 0000000000000..7d28abb851254 --- /dev/null +++ b/tests/cases/compiler/missingCloseBraceInJsxAttributeExpression.tsx @@ -0,0 +1,3 @@ +// @jsx: preserve + +let el = diff --git a/tests/cases/compiler/missingCloseBraceInJsxExpression.tsx b/tests/cases/compiler/missingCloseBraceInJsxExpression.tsx new file mode 100644 index 0000000000000..dbf0ae2a0b709 --- /dev/null +++ b/tests/cases/compiler/missingCloseBraceInJsxExpression.tsx @@ -0,0 +1,3 @@ +// @jsx: preserve + +let el =
{'hello'
diff --git a/tests/cases/compiler/missingCloseBraceInModuleBlock.ts b/tests/cases/compiler/missingCloseBraceInModuleBlock.ts new file mode 100644 index 0000000000000..27b07a198d51d --- /dev/null +++ b/tests/cases/compiler/missingCloseBraceInModuleBlock.ts @@ -0,0 +1,3 @@ +module "dummy" { + interface Dummy {} + diff --git a/tests/cases/compiler/missingCloseBraceInTypeMemberList.ts b/tests/cases/compiler/missingCloseBraceInTypeMemberList.ts new file mode 100644 index 0000000000000..9e31fc160ccd2 --- /dev/null +++ b/tests/cases/compiler/missingCloseBraceInTypeMemberList.ts @@ -0,0 +1,2 @@ +type ITest = { + num: number;