@@ -1336,27 +1336,24 @@ namespace ts {
1336
1336
return inContext ( NodeFlags . AwaitContext ) ;
1337
1337
}
1338
1338
1339
- function parseErrorAtCurrentToken ( message : DiagnosticMessage , arg0 ?: any ) : DiagnosticWithDetachedLocation | undefined {
1340
- return parseErrorAt ( scanner . getTokenPos ( ) , scanner . getTextPos ( ) , message , arg0 ) ;
1339
+ function parseErrorAtCurrentToken ( message : DiagnosticMessage , arg0 ?: any ) : void {
1340
+ parseErrorAt ( scanner . getTokenPos ( ) , scanner . getTextPos ( ) , message , arg0 ) ;
1341
1341
}
1342
1342
1343
- function parseErrorAtPosition ( start : number , length : number , message : DiagnosticMessage , arg0 ?: any ) : DiagnosticWithDetachedLocation | undefined {
1343
+ function parseErrorAtPosition ( start : number , length : number , message : DiagnosticMessage , arg0 ?: any ) : void {
1344
1344
// Don't report another error if it would just be at the same position as the last error.
1345
1345
const lastError = lastOrUndefined ( parseDiagnostics ) ;
1346
- let result : DiagnosticWithDetachedLocation | undefined ;
1347
1346
if ( ! lastError || start !== lastError . start ) {
1348
- result = createDetachedDiagnostic ( fileName , start , length , message , arg0 ) ;
1349
- parseDiagnostics . push ( result ) ;
1347
+ parseDiagnostics . push ( createDetachedDiagnostic ( fileName , start , length , message , arg0 ) ) ;
1350
1348
}
1351
1349
1352
1350
// Mark that we've encountered an error. We'll set an appropriate bit on the next
1353
1351
// node we finish so that it can't be reused incrementally.
1354
1352
parseErrorBeforeNextFinishedNode = true ;
1355
- return result ;
1356
1353
}
1357
1354
1358
- function parseErrorAt ( start : number , end : number , message : DiagnosticMessage , arg0 ?: any ) : DiagnosticWithDetachedLocation | undefined {
1359
- return parseErrorAtPosition ( start , end - start , message , arg0 ) ;
1355
+ function parseErrorAt ( start : number , end : number , message : DiagnosticMessage , arg0 ?: any ) : void {
1356
+ parseErrorAtPosition ( start , end - start , message , arg0 ) ;
1360
1357
}
1361
1358
1362
1359
function parseErrorAtRange ( range : TextRange , message : DiagnosticMessage , arg0 ?: any ) : void {
@@ -1546,20 +1543,6 @@ namespace ts {
1546
1543
return false ;
1547
1544
}
1548
1545
1549
- function parseExpectedMatchingBrackets ( openKind : SyntaxKind , closeKind : SyntaxKind , openPosition : number ) {
1550
- if ( token ( ) === closeKind ) {
1551
- nextToken ( ) ;
1552
- return ;
1553
- }
1554
- const lastError = parseErrorAtCurrentToken ( Diagnostics . _0_expected , tokenToString ( closeKind ) ) ;
1555
- if ( lastError ) {
1556
- addRelatedInfo (
1557
- lastError ,
1558
- createDetachedDiagnostic ( fileName , openPosition , 1 , Diagnostics . The_parser_expected_to_find_a_1_to_match_the_0_token_here , tokenToString ( openKind ) , tokenToString ( closeKind ) )
1559
- ) ;
1560
- }
1561
- }
1562
-
1563
1546
function parseOptional ( t : SyntaxKind ) : boolean {
1564
1547
if ( token ( ) === t ) {
1565
1548
nextToken ( ) ;
@@ -5450,11 +5433,10 @@ namespace ts {
5450
5433
5451
5434
function parseArrayLiteralExpression ( ) : ArrayLiteralExpression {
5452
5435
const pos = getNodePos ( ) ;
5453
- const openBracketPosition = scanner . getTokenPos ( ) ;
5454
5436
parseExpected ( SyntaxKind . OpenBracketToken ) ;
5455
5437
const multiLine = scanner . hasPrecedingLineBreak ( ) ;
5456
5438
const elements = parseDelimitedList ( ParsingContext . ArrayLiteralMembers , parseArgumentOrArrayLiteralElement ) ;
5457
- parseExpectedMatchingBrackets ( SyntaxKind . OpenBracketToken , SyntaxKind . CloseBracketToken , openBracketPosition ) ;
5439
+ parseExpected ( SyntaxKind . CloseBracketToken ) ;
5458
5440
return finishNode ( factory . createArrayLiteralExpression ( elements , multiLine ) , pos ) ;
5459
5441
}
5460
5442
@@ -5523,7 +5505,15 @@ namespace ts {
5523
5505
parseExpected ( SyntaxKind . OpenBraceToken ) ;
5524
5506
const multiLine = scanner . hasPrecedingLineBreak ( ) ;
5525
5507
const properties = parseDelimitedList ( ParsingContext . ObjectLiteralMembers , parseObjectLiteralElement , /*considerSemicolonAsDelimiter*/ true ) ;
5526
- parseExpectedMatchingBrackets ( SyntaxKind . OpenBraceToken , SyntaxKind . CloseBraceToken , openBracePosition ) ;
5508
+ if ( ! parseExpected ( SyntaxKind . CloseBraceToken ) ) {
5509
+ const lastError = lastOrUndefined ( parseDiagnostics ) ;
5510
+ if ( lastError && lastError . code === Diagnostics . _0_expected . code ) {
5511
+ addRelatedInfo (
5512
+ lastError ,
5513
+ createDetachedDiagnostic ( fileName , openBracePosition , 1 , Diagnostics . The_parser_expected_to_find_a_to_match_the_token_here )
5514
+ ) ;
5515
+ }
5516
+ }
5527
5517
return finishNode ( factory . createObjectLiteralExpression ( properties , multiLine ) , pos ) ;
5528
5518
}
5529
5519
@@ -5609,7 +5599,15 @@ namespace ts {
5609
5599
if ( parseExpected ( SyntaxKind . OpenBraceToken , diagnosticMessage ) || ignoreMissingOpenBrace ) {
5610
5600
const multiLine = scanner . hasPrecedingLineBreak ( ) ;
5611
5601
const statements = parseList ( ParsingContext . BlockStatements , parseStatement ) ;
5612
- parseExpectedMatchingBrackets ( SyntaxKind . OpenBraceToken , SyntaxKind . CloseBraceToken , openBracePosition ) ;
5602
+ if ( ! parseExpected ( SyntaxKind . CloseBraceToken ) ) {
5603
+ const lastError = lastOrUndefined ( parseDiagnostics ) ;
5604
+ if ( lastError && lastError . code === Diagnostics . _0_expected . code ) {
5605
+ addRelatedInfo (
5606
+ lastError ,
5607
+ createDetachedDiagnostic ( fileName , openBracePosition , 1 , Diagnostics . The_parser_expected_to_find_a_to_match_the_token_here )
5608
+ ) ;
5609
+ }
5610
+ }
5613
5611
const result = withJSDoc ( finishNode ( factory . createBlock ( statements , multiLine ) , pos ) , hasJSDoc ) ;
5614
5612
if ( token ( ) === SyntaxKind . EqualsToken ) {
5615
5613
parseErrorAtCurrentToken ( Diagnostics . Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses ) ;
@@ -5665,10 +5663,9 @@ namespace ts {
5665
5663
const pos = getNodePos ( ) ;
5666
5664
const hasJSDoc = hasPrecedingJSDocComment ( ) ;
5667
5665
parseExpected ( SyntaxKind . IfKeyword ) ;
5668
- const openParenPosition = scanner . getTokenPos ( ) ;
5669
5666
parseExpected ( SyntaxKind . OpenParenToken ) ;
5670
5667
const expression = allowInAnd ( parseExpression ) ;
5671
- parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenPosition ) ;
5668
+ parseExpected ( SyntaxKind . CloseParenToken ) ;
5672
5669
const thenStatement = parseStatement ( ) ;
5673
5670
const elseStatement = parseOptional ( SyntaxKind . ElseKeyword ) ? parseStatement ( ) : undefined ;
5674
5671
return withJSDoc ( finishNode ( factory . createIfStatement ( expression , thenStatement , elseStatement ) , pos ) , hasJSDoc ) ;
@@ -5680,10 +5677,9 @@ namespace ts {
5680
5677
parseExpected ( SyntaxKind . DoKeyword ) ;
5681
5678
const statement = parseStatement ( ) ;
5682
5679
parseExpected ( SyntaxKind . WhileKeyword ) ;
5683
- const openParenPosition = scanner . getTokenPos ( ) ;
5684
5680
parseExpected ( SyntaxKind . OpenParenToken ) ;
5685
5681
const expression = allowInAnd ( parseExpression ) ;
5686
- parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenPosition ) ;
5682
+ parseExpected ( SyntaxKind . CloseParenToken ) ;
5687
5683
5688
5684
// From: https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html
5689
5685
// 157 min --- All allen at wirfs-brock.com CONF --- "do{;}while(false)false" prohibited in
@@ -5697,10 +5693,9 @@ namespace ts {
5697
5693
const pos = getNodePos ( ) ;
5698
5694
const hasJSDoc = hasPrecedingJSDocComment ( ) ;
5699
5695
parseExpected ( SyntaxKind . WhileKeyword ) ;
5700
- const openParenPosition = scanner . getTokenPos ( ) ;
5701
5696
parseExpected ( SyntaxKind . OpenParenToken ) ;
5702
5697
const expression = allowInAnd ( parseExpression ) ;
5703
- parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenPosition ) ;
5698
+ parseExpected ( SyntaxKind . CloseParenToken ) ;
5704
5699
const statement = parseStatement ( ) ;
5705
5700
return withJSDoc ( finishNode ( factory . createWhileStatement ( expression , statement ) , pos ) , hasJSDoc ) ;
5706
5701
}
@@ -5776,10 +5771,9 @@ namespace ts {
5776
5771
const pos = getNodePos ( ) ;
5777
5772
const hasJSDoc = hasPrecedingJSDocComment ( ) ;
5778
5773
parseExpected ( SyntaxKind . WithKeyword ) ;
5779
- const openParenPosition = scanner . getTokenPos ( ) ;
5780
5774
parseExpected ( SyntaxKind . OpenParenToken ) ;
5781
5775
const expression = allowInAnd ( parseExpression ) ;
5782
- parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenPosition ) ;
5776
+ parseExpected ( SyntaxKind . CloseParenToken ) ;
5783
5777
const statement = doInsideOfContext ( NodeFlags . InWithStatement , parseStatement ) ;
5784
5778
return withJSDoc ( finishNode ( factory . createWithStatement ( expression , statement ) , pos ) , hasJSDoc ) ;
5785
5779
}
@@ -8010,9 +8004,13 @@ namespace ts {
8010
8004
hasChildren = true ;
8011
8005
if ( child . kind === SyntaxKind . JSDocTypeTag ) {
8012
8006
if ( childTypeTag ) {
8013
- const lastError = parseErrorAtCurrentToken ( Diagnostics . A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags ) ;
8007
+ parseErrorAtCurrentToken ( Diagnostics . A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags ) ;
8008
+ const lastError = lastOrUndefined ( parseDiagnostics ) ;
8014
8009
if ( lastError ) {
8015
- addRelatedInfo ( lastError , createDetachedDiagnostic ( fileName , 0 , 0 , Diagnostics . The_tag_was_first_specified_here ) ) ;
8010
+ addRelatedInfo (
8011
+ lastError ,
8012
+ createDetachedDiagnostic ( fileName , 0 , 0 , Diagnostics . The_tag_was_first_specified_here )
8013
+ ) ;
8016
8014
}
8017
8015
break ;
8018
8016
}
0 commit comments