Skip to content

Commit 70e8a60

Browse files
committed
don't try to add related diagnostic for closing bracket when parser can't find opening bracket
1 parent 3f9e724 commit 70e8a60

6 files changed

+40
-10
lines changed

src/compiler/parser.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5666,9 +5666,10 @@ namespace ts {
56665666
const hasJSDoc = hasPrecedingJSDocComment();
56675667
parseExpected(SyntaxKind.IfKeyword);
56685668
const openParenPosition = scanner.getTokenPos();
5669-
parseExpected(SyntaxKind.OpenParenToken);
5669+
const openParenExists = parseExpected(SyntaxKind.OpenParenToken);
56705670
const expression = allowInAnd(parseExpression);
5671-
parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition);
5671+
openParenExists ? parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition)
5672+
: parseExpected(SyntaxKind.CloseBraceToken);
56725673
const thenStatement = parseStatement();
56735674
const elseStatement = parseOptional(SyntaxKind.ElseKeyword) ? parseStatement() : undefined;
56745675
return withJSDoc(finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc);
@@ -5681,9 +5682,10 @@ namespace ts {
56815682
const statement = parseStatement();
56825683
parseExpected(SyntaxKind.WhileKeyword);
56835684
const openParenPosition = scanner.getTokenPos();
5684-
parseExpected(SyntaxKind.OpenParenToken);
5685+
const openParenExists = parseExpected(SyntaxKind.OpenParenToken);
56855686
const expression = allowInAnd(parseExpression);
5686-
parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition);
5687+
openParenExists ? parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition)
5688+
: parseExpected(SyntaxKind.CloseParenToken);
56875689

56885690
// From: https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html
56895691
// 157 min --- All allen at wirfs-brock.com CONF --- "do{;}while(false)false" prohibited in
@@ -5698,9 +5700,10 @@ namespace ts {
56985700
const hasJSDoc = hasPrecedingJSDocComment();
56995701
parseExpected(SyntaxKind.WhileKeyword);
57005702
const openParenPosition = scanner.getTokenPos();
5701-
parseExpected(SyntaxKind.OpenParenToken);
5703+
const openParenExists = parseExpected(SyntaxKind.OpenParenToken);
57025704
const expression = allowInAnd(parseExpression);
5703-
parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition);
5705+
openParenExists ? parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition)
5706+
: parseExpected(SyntaxKind.CloseParenToken);
57045707
const statement = parseStatement();
57055708
return withJSDoc(finishNode(factory.createWhileStatement(expression, statement), pos), hasJSDoc);
57065709
}
@@ -5777,9 +5780,10 @@ namespace ts {
57775780
const hasJSDoc = hasPrecedingJSDocComment();
57785781
parseExpected(SyntaxKind.WithKeyword);
57795782
const openParenPosition = scanner.getTokenPos();
5780-
parseExpected(SyntaxKind.OpenParenToken);
5783+
const openParenExists = parseExpected(SyntaxKind.OpenParenToken);
57815784
const expression = allowInAnd(parseExpression);
5782-
parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition);
5785+
openParenExists ? parseExpectedMatchingBrackets(SyntaxKind.OpenParenToken, SyntaxKind.CloseParenToken, openParenPosition)
5786+
: parseExpected(SyntaxKind.CloseParenToken);
57835787
const statement = doInsideOfContext(NodeFlags.InWithStatement, parseStatement);
57845788
return withJSDoc(finishNode(factory.createWithStatement(expression, statement), pos), hasJSDoc);
57855789
}

tests/baselines/reference/reservedWords2.errors.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ tests/cases/compiler/reservedWords2.ts(12,17): error TS1138: Parameter declarati
4545
!!! error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.
4646
~
4747
!!! error TS1005: ')' expected.
48-
!!! related TS1007 tests/cases/compiler/reservedWords2.ts:1:14: The parser expected to find a ')' to match the '(' token here.
4948
import * as while from "foo"
5049

5150
!!! error TS2300: Duplicate identifier '(Missing)'.
@@ -59,7 +58,6 @@ tests/cases/compiler/reservedWords2.ts(12,17): error TS1138: Parameter declarati
5958
!!! error TS2304: Cannot find name 'from'.
6059
~~~~~
6160
!!! error TS1005: ')' expected.
62-
!!! related TS1007 tests/cases/compiler/reservedWords2.ts:2:20: The parser expected to find a ')' to match the '(' token here.
6361

6462
var typeof = 10;
6563
~~~~~~
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
////do {/*1*/
4+
5+
goTo.marker("1");
6+
edit.insert("\n");
7+
verify.indentationIs(4);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
////if /*1*/
4+
5+
goTo.marker("1");
6+
edit.insert("\n");
7+
verify.indentationIs(4);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
////while /*1*/
4+
5+
goTo.marker("1");
6+
edit.insert("\n");
7+
verify.indentationIs(4);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
////with /*1*/
4+
5+
goTo.marker("1");
6+
edit.insert("\n");
7+
verify.indentationIs(0);

0 commit comments

Comments
 (0)