@@ -1690,11 +1690,7 @@ func (p *Parser) parseHeritageClause() *ast.Node {
1690
1690
kind := p .token
1691
1691
p .nextToken ()
1692
1692
types := p .parseDelimitedList (PCHeritageClauseElement , (* Parser ).parseExpressionWithTypeArguments )
1693
- result := p .finishNode (p .factory .NewHeritageClause (kind , types ), pos )
1694
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 && kind == ast .KindImplementsKeyword {
1695
- p .jsErrorAtRange (result .Loc , diagnostics .X_implements_clauses_can_only_be_used_in_TypeScript_files )
1696
- }
1697
- return result
1693
+ return p .checkJSSyntax (p .finishNode (p .factory .NewHeritageClause (kind , types ), pos ))
1698
1694
}
1699
1695
1700
1696
func (p * Parser ) parseExpressionWithTypeArguments () * ast.Node {
@@ -1951,9 +1947,7 @@ func (p *Parser) parseInterfaceDeclaration(pos int, hasJSDoc bool, modifiers *as
1951
1947
members := p .parseObjectTypeMembers ()
1952
1948
result := p .finishNode (p .factory .NewInterfaceDeclaration (modifiers , name , typeParameters , heritageClauses , members ), pos )
1953
1949
p .withJSDoc (result , hasJSDoc )
1954
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 {
1955
- p .jsErrorAtRange (name .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "interface" )
1956
- }
1950
+ p .checkJSSyntax (result )
1957
1951
return result
1958
1952
}
1959
1953
@@ -1974,9 +1968,7 @@ func (p *Parser) parseTypeAliasDeclaration(pos int, hasJSDoc bool, modifiers *as
1974
1968
p .parseSemicolon ()
1975
1969
result := p .finishNode (p .factory .NewTypeAliasDeclaration (modifiers , name , typeParameters , typeNode ), pos )
1976
1970
p .withJSDoc (result , hasJSDoc )
1977
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 {
1978
- p .jsErrorAtRange (name .Loc , diagnostics .Type_aliases_can_only_be_used_in_TypeScript_files )
1979
- }
1971
+ p .checkJSSyntax (result )
1980
1972
return result
1981
1973
}
1982
1974
@@ -2014,9 +2006,7 @@ func (p *Parser) parseEnumDeclaration(pos int, hasJSDoc bool, modifiers *ast.Mod
2014
2006
}
2015
2007
result := p .finishNode (p .factory .NewEnumDeclaration (modifiers , name , members ), pos )
2016
2008
p .withJSDoc (result , hasJSDoc )
2017
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 {
2018
- p .jsErrorAtRange (name .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "enum" )
2019
- }
2009
+ p .checkJSSyntax (result )
2020
2010
p .statementHasAwaitIdentifier = saveHasAwaitIdentifier
2021
2011
return result
2022
2012
}
@@ -2093,9 +2083,7 @@ func (p *Parser) parseModuleOrNamespaceDeclaration(pos int, hasJSDoc bool, modif
2093
2083
}
2094
2084
result := p .finishNode (p .factory .NewModuleDeclaration (modifiers , keyword , name , body ), pos )
2095
2085
p .withJSDoc (result , hasJSDoc )
2096
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 {
2097
- p .jsErrorAtRange (name .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , scanner .TokenToString (keyword ))
2098
- }
2086
+ p .checkJSSyntax (result )
2099
2087
p .statementHasAwaitIdentifier = saveHasAwaitIdentifier
2100
2088
return result
2101
2089
}
@@ -2120,11 +2108,8 @@ func (p *Parser) parseImportDeclarationOrImportEqualsDeclaration(pos int, hasJSD
2120
2108
}
2121
2109
}
2122
2110
if identifier != nil && ! p .tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration () {
2123
- importEquals := p .parseImportEqualsDeclaration (pos , hasJSDoc , modifiers , identifier , isTypeOnly )
2111
+ importEquals := p .checkJSSyntax ( p . parseImportEqualsDeclaration (pos , hasJSDoc , modifiers , identifier , isTypeOnly ) )
2124
2112
p .statementHasAwaitIdentifier = saveHasAwaitIdentifier // Import= declaration is always parsed in an Await context, no need to reparse
2125
- if importEquals .Flags & ast .NodeFlagsJavaScriptFile != 0 {
2126
- p .jsErrorAtRange (importEquals .Loc , diagnostics .X_import_can_only_be_used_in_TypeScript_files )
2127
- }
2128
2113
return importEquals
2129
2114
}
2130
2115
importClause := p .tryParseImportClause (identifier , afterImportPos , isTypeOnly , false /*skipJSDocLeadingAsterisks*/ )
@@ -2134,9 +2119,7 @@ func (p *Parser) parseImportDeclarationOrImportEqualsDeclaration(pos int, hasJSD
2134
2119
p .parseSemicolon ()
2135
2120
result := p .finishNode (p .factory .NewImportDeclaration (modifiers , importClause , moduleSpecifier , attributes ), pos )
2136
2121
p .withJSDoc (result , hasJSDoc )
2137
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 && isTypeOnly {
2138
- p .jsErrorAtRange (result .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "import type" )
2139
- }
2122
+ p .checkJSSyntax (result )
2140
2123
return result
2141
2124
}
2142
2125
@@ -2266,10 +2249,7 @@ func (p *Parser) parseImportSpecifier() *ast.Node {
2266
2249
identifierName = p .newIdentifier ("" )
2267
2250
p .finishNode (identifierName , name .Pos ())
2268
2251
}
2269
- result := p .finishNode (p .factory .NewImportSpecifier (isTypeOnly , propertyName , identifierName ), pos )
2270
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 && isTypeOnly {
2271
- p .jsErrorAtRange (result .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "import...type" )
2272
- }
2252
+ result := p .checkJSSyntax (p .finishNode (p .factory .NewImportSpecifier (isTypeOnly , propertyName , identifierName ), pos ))
2273
2253
return result
2274
2254
}
2275
2255
@@ -2384,9 +2364,7 @@ func (p *Parser) parseExportAssignment(pos int, hasJSDoc bool, modifiers *ast.Mo
2384
2364
p .statementHasAwaitIdentifier = saveHasAwaitIdentifier
2385
2365
result := p .finishNode (p .factory .NewExportAssignment (modifiers , isExportEquals , nil /*typeNode*/ , expression ), pos )
2386
2366
p .withJSDoc (result , hasJSDoc )
2387
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 && isExportEquals {
2388
- p .jsErrorAtRange (result .Loc , diagnostics .X_export_can_only_be_used_in_TypeScript_files )
2389
- }
2367
+ p .checkJSSyntax (result )
2390
2368
return result
2391
2369
}
2392
2370
@@ -2436,9 +2414,7 @@ func (p *Parser) parseExportDeclaration(pos int, hasJSDoc bool, modifiers *ast.M
2436
2414
p .statementHasAwaitIdentifier = saveHasAwaitIdentifier
2437
2415
result := p .finishNode (p .factory .NewExportDeclaration (modifiers , isTypeOnly , exportClause , moduleSpecifier , attributes ), pos )
2438
2416
p .withJSDoc (result , hasJSDoc )
2439
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 && isTypeOnly {
2440
- p .jsErrorAtRange (result .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "export type" )
2441
- }
2417
+ p .checkJSSyntax (result )
2442
2418
return result
2443
2419
}
2444
2420
@@ -2463,9 +2439,7 @@ func (p *Parser) parseExportSpecifier() *ast.Node {
2463
2439
isTypeOnly , propertyName , name := p .parseImportOrExportSpecifier (ast .KindExportSpecifier )
2464
2440
result := p .finishNode (p .factory .NewExportSpecifier (isTypeOnly , propertyName , name ), pos )
2465
2441
p .withJSDoc (result , hasJSDoc )
2466
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 && isTypeOnly {
2467
- p .jsErrorAtRange (result .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "export...type" )
2468
- }
2442
+ p .checkJSSyntax (result )
2469
2443
return result
2470
2444
}
2471
2445
@@ -4503,19 +4477,11 @@ func (p *Parser) parseBinaryExpressionRest(precedence ast.OperatorPrecedence, le
4503
4477
}
4504
4478
4505
4479
func (p * Parser ) makeSatisfiesExpression (expression * ast.Expression , typeNode * ast.TypeNode ) * ast.Node {
4506
- result := p .finishNode (p .factory .NewSatisfiesExpression (expression , typeNode ), expression .Pos ())
4507
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 {
4508
- p .jsErrorAtRange (typeNode .Loc , diagnostics .Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files )
4509
- }
4510
- return result
4480
+ return p .checkJSSyntax (p .finishNode (p .factory .NewSatisfiesExpression (expression , typeNode ), expression .Pos ()))
4511
4481
}
4512
4482
4513
4483
func (p * Parser ) makeAsExpression (left * ast.Expression , right * ast.TypeNode ) * ast.Node {
4514
- result := p .finishNode (p .factory .NewAsExpression (left , right ), left .Pos ())
4515
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 {
4516
- p .jsErrorAtRange (right .Loc , diagnostics .Type_assertion_expressions_can_only_be_used_in_TypeScript_files )
4517
- }
4518
- return result
4484
+ return p .checkJSSyntax (p .finishNode (p .factory .NewAsExpression (left , right ), left .Pos ()))
4519
4485
}
4520
4486
4521
4487
func (p * Parser ) makeBinaryExpression (left * ast.Expression , operatorToken * ast.Node , right * ast.Expression , pos int ) * ast.Node {
@@ -5217,10 +5183,7 @@ func (p *Parser) parseMemberExpressionRest(pos int, expression *ast.Expression,
5217
5183
if questionDotToken == nil {
5218
5184
if p .token == ast .KindExclamationToken && ! p .hasPrecedingLineBreak () {
5219
5185
p .nextToken ()
5220
- expression = p .finishNode (p .factory .NewNonNullExpression (expression , ast .NodeFlagsNone ), pos )
5221
- if expression .Flags & ast .NodeFlagsJavaScriptFile != 0 {
5222
- p .jsErrorAtRange (expression .Loc , diagnostics .Non_null_assertions_can_only_be_used_in_TypeScript_files )
5223
- }
5186
+ expression = p .checkJSSyntax (p .finishNode (p .factory .NewNonNullExpression (expression , ast .NodeFlagsNone ), pos ))
5224
5187
continue
5225
5188
}
5226
5189
typeArguments := p .tryParseTypeArgumentsInExpression ()
@@ -6558,13 +6521,13 @@ func (p *Parser) checkJSSyntax(node *ast.Node) *ast.Node {
6558
6521
p .jsErrorAtRange (node .Loc , diagnostics .X_implements_clauses_can_only_be_used_in_TypeScript_files )
6559
6522
}
6560
6523
case ast .KindInterfaceDeclaration :
6561
- p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "interface" )
6524
+ p .jsErrorAtRange (node .Name (). Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "interface" )
6562
6525
case ast .KindModuleDeclaration :
6563
- p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , scanner .TokenToString (node .AsModuleDeclaration ().Keyword ))
6526
+ p .jsErrorAtRange (node .Name (). Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , scanner .TokenToString (node .AsModuleDeclaration ().Keyword ))
6564
6527
case ast .KindTypeAliasDeclaration :
6565
- p .jsErrorAtRange (node .Loc , diagnostics .Type_aliases_can_only_be_used_in_TypeScript_files )
6528
+ p .jsErrorAtRange (node .Name (). Loc , diagnostics .Type_aliases_can_only_be_used_in_TypeScript_files )
6566
6529
case ast .KindEnumDeclaration :
6567
- p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "enum" )
6530
+ p .jsErrorAtRange (node .Name (). Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "enum" )
6568
6531
case ast .KindNonNullExpression :
6569
6532
p .jsErrorAtRange (node .Loc , diagnostics .Non_null_assertions_can_only_be_used_in_TypeScript_files )
6570
6533
case ast .KindAsExpression :
0 commit comments