@@ -1407,7 +1407,7 @@ func (p *Parser) parseVariableStatement(pos int, hasJSDoc bool, modifiers *ast.M
1407
1407
p .parseSemicolon ()
1408
1408
result := p .finishNode (p .factory .NewVariableStatement (modifiers , declarationList ), pos )
1409
1409
p .withJSDoc (result , hasJSDoc )
1410
- p .checkNoJSExtraModifiers (result )
1410
+ p .checkJSSyntax (result )
1411
1411
return result
1412
1412
}
1413
1413
@@ -1478,13 +1478,14 @@ func (p *Parser) parseVariableDeclarationWorker(allowExclamation bool) *ast.Node
1478
1478
if allowExclamation && name .Kind == ast .KindIdentifier && p .token == ast .KindExclamationToken && ! p .hasPrecedingLineBreak () {
1479
1479
exclamationToken = p .parseTokenNode ()
1480
1480
}
1481
- typeNode := p .checkNoJSTypeAnnotation ( p . parseTypeAnnotation () )
1481
+ typeNode := p .parseTypeAnnotation ()
1482
1482
var initializer * ast.Expression
1483
1483
if p .token != ast .KindInKeyword && p .token != ast .KindOfKeyword {
1484
1484
initializer = p .parseInitializer ()
1485
1485
}
1486
1486
result := p .finishNode (p .factory .NewVariableDeclaration (name , exclamationToken , typeNode , initializer ), pos )
1487
1487
p .withJSDoc (result , hasJSDoc )
1488
+ p .checkJSSyntax (result )
1488
1489
return result
1489
1490
}
1490
1491
@@ -1584,14 +1585,12 @@ func (p *Parser) parseFunctionDeclaration(pos int, hasJSDoc bool, modifiers *ast
1584
1585
p .setContextFlags (ast .NodeFlagsAwaitContext , true )
1585
1586
}
1586
1587
parameters := p .parseParameters (signatureFlags )
1587
- returnType := p .checkNoJSTypeAnnotation ( p . parseReturnType (ast .KindColonToken , false /*isType*/ ) )
1588
+ returnType := p .parseReturnType (ast .KindColonToken , false /*isType*/ )
1588
1589
body := p .parseFunctionBlockOrSemicolon (signatureFlags , diagnostics .X_or_expected )
1589
1590
p .contextFlags = saveContextFlags
1590
1591
result := p .finishNode (p .factory .NewFunctionDeclaration (modifiers , asteriskToken , name , typeParameters , parameters , returnType , nil /*fullSignature*/ , body ), pos )
1591
1592
p .withJSDoc (result , hasJSDoc )
1592
- p .checkNoJSExtraModifiers (result )
1593
- p .checkNoJSTypeParameters (result )
1594
- p .checkNoJSSignature (result )
1593
+ p .checkJSSyntax (result )
1595
1594
return result
1596
1595
}
1597
1596
@@ -1636,13 +1635,12 @@ func (p *Parser) parseClassDeclarationOrExpression(pos int, hasJSDoc bool, modif
1636
1635
p .finishNode (result , pos )
1637
1636
p .withJSDoc (result , hasJSDoc )
1638
1637
if result .Flags & ast .NodeFlagsJavaScriptFile != 0 {
1639
- p .checkNoJSExtraModifiers (result )
1640
- p .checkNoJSTypeParameters (result )
1638
+ p .checkJSSyntax (result )
1641
1639
if heritageClauses != nil {
1642
1640
for _ , clause := range heritageClauses .Nodes {
1643
1641
if clause .AsHeritageClause ().Token == ast .KindExtendsKeyword {
1644
1642
for _ , expr := range clause .AsHeritageClause ().Types .Nodes {
1645
- p .checkNoJSTypeArguments (expr )
1643
+ p .checkJSSyntax (expr )
1646
1644
}
1647
1645
}
1648
1646
}
@@ -1735,7 +1733,7 @@ func (p *Parser) parseClassElement() *ast.Node {
1735
1733
}
1736
1734
}
1737
1735
if p .isIndexSignature () {
1738
- return p .checkNoJSSignature (p .parseIndexSignatureDeclaration (pos , hasJSDoc , modifiers ))
1736
+ return p .checkJSSyntax (p .parseIndexSignatureDeclaration (pos , hasJSDoc , modifiers ))
1739
1737
}
1740
1738
// It is very important that we check this *after* checking indexers because
1741
1739
// the [ token can start an index signature or a computed property name
@@ -1784,21 +1782,14 @@ func (p *Parser) parseClassStaticBlockBody() *ast.Node {
1784
1782
func (p * Parser ) tryParseConstructorDeclaration (pos int , hasJSDoc bool , modifiers * ast.ModifierList ) * ast.Node {
1785
1783
state := p .mark ()
1786
1784
if p .token == ast .KindConstructorKeyword || p .token == ast .KindStringLiteral && p .scanner .TokenValue () == "constructor" && p .lookAhead ((* Parser ).nextTokenIsOpenParen ) {
1787
- errorRange := core .NewTextRange (p .scanner .TokenStart (), p .scanner .TokenEnd ())
1788
1785
p .nextToken ()
1789
1786
typeParameters := p .parseTypeParameters ()
1790
1787
parameters := p .parseParameters (ParseFlagsNone )
1791
- returnType := p .checkNoJSTypeAnnotation ( p . parseReturnType (ast .KindColonToken , false /*isType*/ ) )
1788
+ returnType := p .parseReturnType (ast .KindColonToken , false /*isType*/ )
1792
1789
body := p .parseFunctionBlockOrSemicolon (ParseFlagsNone , diagnostics .X_or_expected )
1793
1790
result := p .finishNode (p .factory .NewConstructorDeclaration (modifiers , typeParameters , parameters , returnType , nil /*fullSignature*/ , body ), pos )
1794
1791
p .withJSDoc (result , hasJSDoc )
1795
- if result .Flags & ast .NodeFlagsJavaScriptFile != 0 {
1796
- p .checkNoJSExtraModifiers (result )
1797
- p .checkNoJSTypeParameters (result )
1798
- if result .Body () == nil {
1799
- p .jsErrorAtRange (errorRange , diagnostics .Signature_declarations_can_only_be_used_in_TypeScript_files )
1800
- }
1801
- }
1792
+ p .checkJSSyntax (result )
1802
1793
return result
1803
1794
}
1804
1795
p .rewind (state )
@@ -1814,7 +1805,7 @@ func (p *Parser) parsePropertyOrMethodDeclaration(pos int, hasJSDoc bool, modifi
1814
1805
name := p .parsePropertyName ()
1815
1806
// Note: this is not legal as per the grammar. But we allow it in the parser and
1816
1807
// report an error in the grammar checker.
1817
- questionToken := p .checkNoJSQuestionToken ( p . parseOptionalToken (ast .KindQuestionToken ) )
1808
+ questionToken := p .parseOptionalToken (ast .KindQuestionToken )
1818
1809
if asteriskToken != nil || p .token == ast .KindOpenParenToken || p .token == ast .KindLessThanToken {
1819
1810
return p .parseMethodDeclaration (pos , hasJSDoc , modifiers , asteriskToken , name , questionToken , diagnostics .X_or_expected )
1820
1811
}
@@ -1825,13 +1816,11 @@ func (p *Parser) parseMethodDeclaration(pos int, hasJSDoc bool, modifiers *ast.M
1825
1816
signatureFlags := core .IfElse (asteriskToken != nil , ParseFlagsYield , ParseFlagsNone ) | core .IfElse (modifierListHasAsync (modifiers ), ParseFlagsAwait , ParseFlagsNone )
1826
1817
typeParameters := p .parseTypeParameters ()
1827
1818
parameters := p .parseParameters (signatureFlags )
1828
- typeNode := p .checkNoJSTypeAnnotation ( p . parseReturnType (ast .KindColonToken , false /*isType*/ ) )
1819
+ typeNode := p .parseReturnType (ast .KindColonToken , false /*isType*/ )
1829
1820
body := p .parseFunctionBlockOrSemicolon (signatureFlags , diagnosticMessage )
1830
1821
result := p .finishNode (p .factory .NewMethodDeclaration (modifiers , asteriskToken , name , questionToken , typeParameters , parameters , typeNode , nil /*fullSignature*/ , body ), pos )
1831
1822
p .withJSDoc (result , hasJSDoc )
1832
- p .checkNoJSExtraModifiers (result )
1833
- p .checkNoJSTypeParameters (result )
1834
- p .checkNoJSSignature (result )
1823
+ p .checkJSSyntax (result )
1835
1824
return result
1836
1825
}
1837
1826
@@ -1844,12 +1833,12 @@ func (p *Parser) parsePropertyDeclaration(pos int, hasJSDoc bool, modifiers *ast
1844
1833
if postfixToken == nil && ! p .hasPrecedingLineBreak () {
1845
1834
postfixToken = p .parseOptionalToken (ast .KindExclamationToken )
1846
1835
}
1847
- typeNode := p .checkNoJSTypeAnnotation ( p . parseTypeAnnotation () )
1836
+ typeNode := p .parseTypeAnnotation ()
1848
1837
initializer := doInContext (p , ast .NodeFlagsYieldContext | ast .NodeFlagsAwaitContext | ast .NodeFlagsDisallowInContext , false , (* Parser ).parseInitializer )
1849
1838
p .parseSemicolonAfterPropertyName (name , typeNode , initializer )
1850
1839
result := p .finishNode (p .factory .NewPropertyDeclaration (modifiers , name , postfixToken , typeNode , initializer ), pos )
1851
1840
p .withJSDoc (result , hasJSDoc )
1852
- p .checkNoJSExtraModifiers (result )
1841
+ p .checkJSSyntax (result )
1853
1842
return result
1854
1843
}
1855
1844
@@ -3175,12 +3164,8 @@ func (p *Parser) parseParametersWorker(flags ParseFlags, allowAmbiguity bool) *a
3175
3164
p .setContextFlags (ast .NodeFlagsAwaitContext , flags & ParseFlagsAwait != 0 )
3176
3165
parameters := p .parseDelimitedList (PCParameters , func (p * Parser ) * ast.Node {
3177
3166
parameter := p .parseParameterEx (inAwaitContext , allowAmbiguity )
3178
- if parameter != nil && parameter .Flags & ast .NodeFlagsJavaScriptFile != 0 && parameter .Flags & ast .NodeFlagsJSDoc == 0 && flags & ParseFlagsType == 0 {
3179
- if core .Some (parameter .ModifierNodes (), ast .IsModifier ) {
3180
- p .jsErrorAtRange (parameter .Modifiers ().Loc , diagnostics .Parameter_modifiers_can_only_be_used_in_TypeScript_files )
3181
- }
3182
- p .checkNoJSQuestionToken (parameter .PostfixToken ())
3183
- p .checkNoJSTypeAnnotation (parameter .Type ())
3167
+ if parameter != nil && flags & ParseFlagsType == 0 {
3168
+ p .checkJSSyntax (parameter )
3184
3169
}
3185
3170
return parameter
3186
3171
})
@@ -3317,10 +3302,7 @@ func (p *Parser) parseAccessorDeclaration(pos int, hasJSDoc bool, modifiers *ast
3317
3302
}
3318
3303
p .withJSDoc (p .finishNode (result , pos ), hasJSDoc )
3319
3304
if flags & ParseFlagsType == 0 {
3320
- p .checkNoJSExtraModifiers (result )
3321
- p .checkNoJSTypeParameters (result )
3322
- p .checkNoJSTypeAnnotation (returnType )
3323
- p .checkNoJSSignature (result )
3305
+ p .checkJSSyntax (result )
3324
3306
}
3325
3307
return result
3326
3308
}
@@ -4313,9 +4295,7 @@ func (p *Parser) parseParenthesizedArrowFunctionExpression(allowAmbiguity bool,
4313
4295
}
4314
4296
result := p .finishNode (p .factory .NewArrowFunction (modifiers , typeParameters , parameters , returnType , nil /*fullSignature*/ , equalsGreaterThanToken , body ), pos )
4315
4297
p .withJSDoc (result , hasJSDoc )
4316
- p .checkNoJSExtraModifiers (result )
4317
- p .checkNoJSTypeParameters (result )
4318
- p .checkNoJSTypeAnnotation (returnType )
4298
+ p .checkJSSyntax (result )
4319
4299
return result
4320
4300
}
4321
4301
@@ -5344,7 +5324,7 @@ func (p *Parser) parseCallExpressionRest(pos int, expression *ast.Expression) *a
5344
5324
inner := expression
5345
5325
argumentList := p .parseArgumentList ()
5346
5326
isOptionalChain := questionDotToken != nil || p .tryReparseOptionalChain (expression )
5347
- expression = p .checkNoJSTypeArguments (p .finishNode (p .factory .NewCallExpression (expression , questionDotToken , typeArguments , argumentList , core .IfElse (isOptionalChain , ast .NodeFlagsOptionalChain , ast .NodeFlagsNone )), pos ))
5327
+ expression = p .checkJSSyntax (p .finishNode (p .factory .NewCallExpression (expression , questionDotToken , typeArguments , argumentList , core .IfElse (isOptionalChain , ast .NodeFlagsOptionalChain , ast .NodeFlagsNone )), pos ))
5348
5328
p .unparseExpressionWithTypeArguments (inner , typeArguments , expression )
5349
5329
continue
5350
5330
}
@@ -5396,7 +5376,7 @@ func (p *Parser) parseTaggedTemplateRest(pos int, tag *ast.Expression, questionD
5396
5376
template = p .parseTemplateExpression (true /*isTaggedTemplate*/ )
5397
5377
}
5398
5378
isOptionalChain := questionDotToken != nil || tag .Flags & ast .NodeFlagsOptionalChain != 0
5399
- return p .checkNoJSTypeArguments (p .finishNode (p .factory .NewTaggedTemplateExpression (tag , questionDotToken , typeArguments , template , core .IfElse (isOptionalChain , ast .NodeFlagsOptionalChain , ast .NodeFlagsNone )), pos ))
5379
+ return p .checkJSSyntax (p .finishNode (p .factory .NewTaggedTemplateExpression (tag , questionDotToken , typeArguments , template , core .IfElse (isOptionalChain , ast .NodeFlagsOptionalChain , ast .NodeFlagsNone )), pos ))
5400
5380
}
5401
5381
5402
5382
func (p * Parser ) parseTemplateExpression (isTaggedTemplate bool ) * ast.Expression {
@@ -5581,14 +5561,13 @@ func (p *Parser) parseFunctionExpression() *ast.Expression {
5581
5561
}
5582
5562
typeParameters := p .parseTypeParameters ()
5583
5563
parameters := p .parseParameters (signatureFlags )
5584
- returnType := p .checkNoJSTypeAnnotation ( p . parseReturnType (ast .KindColonToken , false /*isType*/ ) )
5564
+ returnType := p .parseReturnType (ast .KindColonToken , false /*isType*/ )
5585
5565
body := p .parseFunctionBlock (signatureFlags , nil /*diagnosticMessage*/ )
5586
5566
p .contextFlags = saveContexFlags
5587
5567
result := p .factory .NewFunctionExpression (modifiers , asteriskToken , name , typeParameters , parameters , returnType , nil /*fullSignature*/ , body )
5588
5568
p .finishNode (result , pos )
5589
5569
p .withJSDoc (result , hasJSDoc )
5590
- p .checkNoJSExtraModifiers (result )
5591
- p .checkNoJSTypeParameters (result )
5570
+ p .checkJSSyntax (result )
5592
5571
return result
5593
5572
}
5594
5573
@@ -5644,7 +5623,7 @@ func (p *Parser) parseNewExpressionOrNewDotTarget() *ast.Node {
5644
5623
if p .token == ast .KindOpenParenToken {
5645
5624
argumentList = p .parseArgumentList ()
5646
5625
}
5647
- result := p .checkNoJSTypeArguments (p .finishNode (p .factory .NewNewExpression (expression , typeArguments , argumentList ), pos ))
5626
+ result := p .checkJSSyntax (p .finishNode (p .factory .NewNewExpression (expression , typeArguments , argumentList ), pos ))
5648
5627
p .unparseExpressionWithTypeArguments (expression , typeArguments , result )
5649
5628
return result
5650
5629
}
@@ -6531,58 +6510,93 @@ func parseResolutionMode(mode string, pos int, end int /*reportDiagnostic: Pragm
6531
6510
// return undefined;
6532
6511
}
6533
6512
6534
- func (p * Parser ) checkNoJSExtraModifiers (node * ast.Node ) * ast.Node {
6535
- if node .Flags & ast .NodeFlagsJavaScriptFile != 0 && node .Flags & ast .NodeFlagsJSDoc == 0 {
6513
+ func (p * Parser ) jsErrorAtRange (loc core.TextRange , message * diagnostics.Message , args ... any ) {
6514
+ p .jsDiagnostics = append (p .jsDiagnostics , ast .NewDiagnostic (nil , core .NewTextRange (scanner .SkipTrivia (p .sourceText , loc .Pos ()), loc .End ()), message , args ... ))
6515
+ }
6516
+
6517
+ func (p * Parser ) checkJSSyntax (node * ast.Node ) * ast.Node {
6518
+ if node .Flags & ast .NodeFlagsJavaScriptFile == 0 || node .Flags & (ast .NodeFlagsJSDoc | ast .NodeFlagsReparsed ) != 0 {
6519
+ return node
6520
+ }
6521
+ switch node .Kind {
6522
+ case ast .KindParameter , ast .KindPropertyDeclaration , ast .KindMethodDeclaration :
6523
+ if token := node .PostfixToken (); token != nil && token .Flags & ast .NodeFlagsReparsed == 0 && ast .IsQuestionToken (token ) {
6524
+ p .jsErrorAtRange (token .Loc , diagnostics .The_0_modifier_can_only_be_used_in_TypeScript_files , "?" )
6525
+ }
6526
+ fallthrough
6527
+ case ast .KindMethodSignature , ast .KindConstructor , ast .KindGetAccessor , ast .KindSetAccessor , ast .KindFunctionExpression ,
6528
+ ast .KindFunctionDeclaration , ast .KindArrowFunction , ast .KindVariableDeclaration , ast .KindIndexSignature :
6529
+ if ast .IsFunctionLike (node ) && node .Body () == nil {
6530
+ p .jsErrorAtRange (node .Loc , diagnostics .Signature_declarations_can_only_be_used_in_TypeScript_files )
6531
+ } else if t := node .Type (); t != nil && t .Flags & ast .NodeFlagsReparsed == 0 {
6532
+ p .jsErrorAtRange (t .Loc , diagnostics .Type_annotations_can_only_be_used_in_TypeScript_files )
6533
+ }
6534
+ case ast .KindImportDeclaration :
6535
+ if clause := node .AsImportDeclaration ().ImportClause ; clause != nil && clause .IsTypeOnly () {
6536
+ p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "import type" )
6537
+ }
6538
+ case ast .KindExportDeclaration :
6539
+ if node .IsTypeOnly () {
6540
+ p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "export type" )
6541
+ }
6542
+ case ast .KindImportSpecifier :
6543
+ if node .IsTypeOnly () {
6544
+ p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "import...type" )
6545
+ }
6546
+ case ast .KindExportSpecifier :
6547
+ if node .IsTypeOnly () {
6548
+ p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "export...type" )
6549
+ }
6550
+ case ast .KindImportEqualsDeclaration :
6551
+ p .jsErrorAtRange (node .Loc , diagnostics .X_import_can_only_be_used_in_TypeScript_files )
6552
+ case ast .KindExportAssignment :
6553
+ if node .AsExportAssignment ().IsExportEquals {
6554
+ p .jsErrorAtRange (node .Loc , diagnostics .X_export_can_only_be_used_in_TypeScript_files )
6555
+ }
6556
+ case ast .KindHeritageClause :
6557
+ if node .AsHeritageClause ().Token == ast .KindImplementsKeyword {
6558
+ p .jsErrorAtRange (node .Loc , diagnostics .X_implements_clauses_can_only_be_used_in_TypeScript_files )
6559
+ }
6560
+ case ast .KindInterfaceDeclaration :
6561
+ p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "interface" )
6562
+ case ast .KindModuleDeclaration :
6563
+ p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , scanner .TokenToString (node .AsModuleDeclaration ().Keyword ))
6564
+ case ast .KindTypeAliasDeclaration :
6565
+ p .jsErrorAtRange (node .Loc , diagnostics .Type_aliases_can_only_be_used_in_TypeScript_files )
6566
+ case ast .KindEnumDeclaration :
6567
+ p .jsErrorAtRange (node .Loc , diagnostics .X_0_declarations_can_only_be_used_in_TypeScript_files , "enum" )
6568
+ case ast .KindNonNullExpression :
6569
+ p .jsErrorAtRange (node .Loc , diagnostics .Non_null_assertions_can_only_be_used_in_TypeScript_files )
6570
+ case ast .KindAsExpression :
6571
+ p .jsErrorAtRange (node .Type ().Loc , diagnostics .Type_assertion_expressions_can_only_be_used_in_TypeScript_files )
6572
+ case ast .KindSatisfiesExpression :
6573
+ p .jsErrorAtRange (node .Type ().Loc , diagnostics .Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files )
6574
+ }
6575
+ // Check absence of type parameters, type arguments and non-JavaScript modifiers
6576
+ switch node .Kind {
6577
+ case ast .KindClassDeclaration , ast .KindClassExpression , ast .KindMethodDeclaration , ast .KindConstructor , ast .KindGetAccessor ,
6578
+ ast .KindSetAccessor , ast .KindFunctionExpression , ast .KindFunctionDeclaration , ast .KindArrowFunction :
6579
+ if list := node .TypeParameterList (); list != nil && core .Some (list .Nodes , func (n * ast.Node ) bool { return n .Flags & ast .NodeFlagsReparsed == 0 }) {
6580
+ p .jsErrorAtRange (list .Loc , diagnostics .Type_parameter_declarations_can_only_be_used_in_TypeScript_files )
6581
+ }
6582
+ fallthrough
6583
+ case ast .KindVariableStatement , ast .KindPropertyDeclaration :
6536
6584
if modifiers := node .Modifiers (); modifiers != nil {
6537
6585
for _ , modifier := range modifiers .Nodes {
6538
6586
if modifier .Flags & ast .NodeFlagsReparsed == 0 && modifier .Kind != ast .KindDecorator && ast .ModifierToFlag (modifier .Kind )& ast .ModifierFlagsJavaScript == 0 {
6539
6587
p .jsErrorAtRange (modifier .Loc , diagnostics .The_0_modifier_can_only_be_used_in_TypeScript_files , scanner .TokenToString (modifier .Kind ))
6540
6588
}
6541
6589
}
6542
6590
}
6543
- }
6544
- return node
6545
- }
6546
-
6547
- func (p * Parser ) checkNoJSQuestionToken (node * ast.Node ) * ast.Node {
6548
- if node != nil && node .Flags & ast .NodeFlagsJavaScriptFile != 0 && node .Flags & ast .NodeFlagsJSDoc == 0 {
6549
- p .jsErrorAtRange (node .Loc , diagnostics .The_0_modifier_can_only_be_used_in_TypeScript_files , "?" )
6550
- }
6551
- return node
6552
- }
6553
-
6554
- func (p * Parser ) checkNoJSTypeParameters (node * ast.Node ) * ast.Node {
6555
- if node .Flags & ast .NodeFlagsJavaScriptFile != 0 && node .Flags & ast .NodeFlagsJSDoc == 0 && node .TypeParameterList () != nil {
6556
- if list := node .TypeParameterList (); list != nil && core .Some (list .Nodes , func (n * ast.Node ) bool { return n .Flags & ast .NodeFlagsReparsed == 0 }) {
6557
- p .jsErrorAtRange (list .Loc , diagnostics .Type_parameter_declarations_can_only_be_used_in_TypeScript_files )
6591
+ case ast .KindParameter :
6592
+ if core .Some (node .ModifierNodes (), ast .IsModifier ) {
6593
+ p .jsErrorAtRange (node .Modifiers ().Loc , diagnostics .Parameter_modifiers_can_only_be_used_in_TypeScript_files )
6558
6594
}
6559
- }
6560
- return node
6561
- }
6562
-
6563
- func (p * Parser ) checkNoJSTypeAnnotation (node * ast.Node ) * ast.Node {
6564
- if node != nil && node .Flags & ast .NodeFlagsJavaScriptFile != 0 && node .Flags & ast .NodeFlagsJSDoc == 0 {
6565
- p .jsErrorAtRange (node .Loc , diagnostics .Type_annotations_can_only_be_used_in_TypeScript_files )
6566
- }
6567
- return node
6568
- }
6569
-
6570
- func (p * Parser ) checkNoJSTypeArguments (node * ast.Node ) * ast.Node {
6571
- if node .Flags & ast .NodeFlagsJavaScriptFile != 0 && node .Flags & ast .NodeFlagsJSDoc == 0 && node .TypeArgumentList () != nil {
6595
+ case ast .KindCallExpression , ast .KindNewExpression , ast .KindExpressionWithTypeArguments , ast .KindJsxSelfClosingElement ,
6596
+ ast .KindJsxOpeningElement , ast .KindTaggedTemplateExpression :
6572
6597
if list := node .TypeArgumentList (); list != nil && core .Some (list .Nodes , func (n * ast.Node ) bool { return n .Flags & ast .NodeFlagsReparsed == 0 }) {
6573
6598
p .jsErrorAtRange (list .Loc , diagnostics .Type_arguments_can_only_be_used_in_TypeScript_files )
6574
6599
}
6575
6600
}
6576
6601
return node
6577
6602
}
6578
-
6579
- func (p * Parser ) checkNoJSSignature (node * ast.Node ) * ast.Node {
6580
- if node .Flags & ast .NodeFlagsJavaScriptFile != 0 && node .Flags & ast .NodeFlagsJSDoc == 0 && node .Body () == nil {
6581
- p .jsErrorAtRange (core .OrElse (node .Name (), node ).Loc , diagnostics .Signature_declarations_can_only_be_used_in_TypeScript_files )
6582
- }
6583
- return node
6584
- }
6585
-
6586
- func (p * Parser ) jsErrorAtRange (loc core.TextRange , message * diagnostics.Message , args ... any ) {
6587
- p .jsDiagnostics = append (p .jsDiagnostics , ast .NewDiagnostic (nil , core .NewTextRange (scanner .SkipTrivia (p .sourceText , loc .Pos ()), loc .End ()), message , args ... ))
6588
- }
0 commit comments