@@ -494,9 +494,9 @@ namespace ts {
494
494
case SyntaxKind . JSDocSignature :
495
495
return visitNodes ( cbNode , cbNodes , node . decorators ) ||
496
496
visitNodes ( cbNode , cbNodes , node . modifiers ) ||
497
- visitNodes ( cbNode , cbNodes , ( < SignatureDeclaration > node ) . typeParameters ) ||
498
- visitNodes ( cbNode , cbNodes , ( < SignatureDeclaration > node ) . parameters ) ||
499
- visitNode ( cbNode , ( < SignatureDeclaration > node ) . type ) ;
497
+ forEach ( ( < JSDocSignature > node ) . typeParameters , cbNode ) ||
498
+ forEach ( ( < JSDocSignature > node ) . parameters , cbNode ) ||
499
+ visitNode ( cbNode , ( < JSDocSignature > node ) . type ) ;
500
500
case SyntaxKind . JSDocTypeLiteral :
501
501
if ( ( node as JSDocTypeLiteral ) . jsDocPropertyTags ) {
502
502
for ( const tag of ( node as JSDocTypeLiteral ) . jsDocPropertyTags ! ) {
@@ -1509,7 +1509,9 @@ namespace ts {
1509
1509
case ParsingContext . ArgumentExpressions :
1510
1510
return token ( ) === SyntaxKind . DotDotDotToken || isStartOfExpression ( ) ;
1511
1511
case ParsingContext . Parameters :
1512
- return isStartOfParameter ( ) ;
1512
+ return isStartOfParameter ( /*isJSDocParameter*/ false ) ;
1513
+ case ParsingContext . JSDocParameters :
1514
+ return isStartOfParameter ( /*isJSDocParameter*/ true ) ;
1513
1515
case ParsingContext . TypeArguments :
1514
1516
case ParsingContext . TupleElementTypes :
1515
1517
return token ( ) === SyntaxKind . CommaToken || isStartOfType ( ) ;
@@ -1612,6 +1614,7 @@ namespace ts {
1612
1614
case ParsingContext . TupleElementTypes :
1613
1615
case ParsingContext . ArrayBindingElements :
1614
1616
return token ( ) === SyntaxKind . CloseBracketToken ;
1617
+ case ParsingContext . JSDocParameters :
1615
1618
case ParsingContext . Parameters :
1616
1619
case ParsingContext . RestProperties :
1617
1620
// Tokens other than ')' and ']' (the latter for index signatures) are here for better error recovery
@@ -1795,6 +1798,7 @@ namespace ts {
1795
1798
case ParsingContext . VariableDeclarations :
1796
1799
return isReusableVariableDeclaration ( node ) ;
1797
1800
1801
+ case ParsingContext . JSDocParameters :
1798
1802
case ParsingContext . Parameters :
1799
1803
return isReusableParameter ( node ) ;
1800
1804
@@ -2009,6 +2013,7 @@ namespace ts {
2009
2013
case ParsingContext . ArgumentExpressions : return Diagnostics . Argument_expression_expected ;
2010
2014
case ParsingContext . ObjectLiteralMembers : return Diagnostics . Property_assignment_expected ;
2011
2015
case ParsingContext . ArrayLiteralMembers : return Diagnostics . Expression_or_comma_expected ;
2016
+ case ParsingContext . JSDocParameters : return Diagnostics . Parameter_declaration_expected ;
2012
2017
case ParsingContext . Parameters : return Diagnostics . Parameter_declaration_expected ;
2013
2018
case ParsingContext . TypeParameters : return Diagnostics . Type_parameter_declaration_expected ;
2014
2019
case ParsingContext . TypeArguments : return Diagnostics . Type_argument_expected ;
@@ -2430,12 +2435,12 @@ namespace ts {
2430
2435
return undefined ;
2431
2436
}
2432
2437
2433
- function isStartOfParameter ( ) : boolean {
2438
+ function isStartOfParameter ( isJSDocParameter : boolean ) : boolean {
2434
2439
return token ( ) === SyntaxKind . DotDotDotToken ||
2435
2440
isIdentifierOrPattern ( ) ||
2436
2441
isModifierKind ( token ( ) ) ||
2437
2442
token ( ) === SyntaxKind . AtToken ||
2438
- isStartOfType ( /*inStartOfParameter*/ true ) ;
2443
+ isStartOfType ( /*inStartOfParameter*/ ! isJSDocParameter ) ;
2439
2444
}
2440
2445
2441
2446
function parseParameter ( ) : ParameterDeclaration {
@@ -2534,7 +2539,9 @@ namespace ts {
2534
2539
setYieldContext ( ! ! ( flags & SignatureFlags . Yield ) ) ;
2535
2540
setAwaitContext ( ! ! ( flags & SignatureFlags . Await ) ) ;
2536
2541
2537
- signature . parameters = parseDelimitedList ( ParsingContext . Parameters , flags & SignatureFlags . JSDoc ? parseJSDocParameter : parseParameter ) ;
2542
+ signature . parameters = flags & SignatureFlags . JSDoc ?
2543
+ parseDelimitedList ( ParsingContext . JSDocParameters , parseJSDocParameter ) :
2544
+ parseDelimitedList ( ParsingContext . Parameters , parseParameter ) ;
2538
2545
2539
2546
setYieldContext ( savedYieldContext ) ;
2540
2547
setAwaitContext ( savedAwaitContext ) ;
@@ -2960,6 +2967,8 @@ namespace ts {
2960
2967
case SyntaxKind . InferKeyword :
2961
2968
case SyntaxKind . ImportKeyword :
2962
2969
return true ;
2970
+ case SyntaxKind . FunctionKeyword :
2971
+ return ! inStartOfParameter ;
2963
2972
case SyntaxKind . MinusToken :
2964
2973
return ! inStartOfParameter && lookAhead ( nextTokenIsNumericLiteral ) ;
2965
2974
case SyntaxKind . OpenParenToken :
@@ -2973,7 +2982,7 @@ namespace ts {
2973
2982
2974
2983
function isStartOfParenthesizedOrFunctionType ( ) {
2975
2984
nextToken ( ) ;
2976
- return token ( ) === SyntaxKind . CloseParenToken || isStartOfParameter ( ) || isStartOfType ( ) ;
2985
+ return token ( ) === SyntaxKind . CloseParenToken || isStartOfParameter ( /*isJSDocParameter*/ false ) || isStartOfType ( ) ;
2977
2986
}
2978
2987
2979
2988
function parsePostfixTypeOrHigher ( ) : TypeNode {
@@ -6255,6 +6264,7 @@ namespace ts {
6255
6264
JsxChildren , // Things between opening and closing JSX tags
6256
6265
ArrayLiteralMembers , // Members in array literal
6257
6266
Parameters , // Parameters in parameter list
6267
+ JSDocParameters , // JSDoc parameters in parameter list of JSDoc function type
6258
6268
RestProperties , // Property names in a rest type list
6259
6269
TypeParameters , // Type parameters in type parameter list
6260
6270
TypeArguments , // Type arguments in type argument list
0 commit comments