@@ -2274,7 +2274,7 @@ namespace ts {
2274
2274
isStartOfType ( /*inStartOfParameter*/ true ) ;
2275
2275
}
2276
2276
2277
- function parseParameter ( requireEqualsToken ?: boolean ) : ParameterDeclaration {
2277
+ function parseParameter ( ) : ParameterDeclaration {
2278
2278
const node = < ParameterDeclaration > createNodeWithJSDoc ( SyntaxKind . Parameter ) ;
2279
2279
if ( token ( ) === SyntaxKind . ThisKeyword ) {
2280
2280
node . name = createIdentifier ( /*isIdentifier*/ true ) ;
@@ -2303,15 +2303,11 @@ namespace ts {
2303
2303
2304
2304
node . questionToken = parseOptionalToken ( SyntaxKind . QuestionToken ) ;
2305
2305
node . type = parseParameterType ( ) ;
2306
- node . initializer = parseInitializer ( /*inParameter*/ true , requireEqualsToken ) ;
2306
+ node . initializer = parseInitializer ( ) ;
2307
2307
2308
2308
return finishNode ( node ) ;
2309
2309
}
2310
2310
2311
- function parseParameterWithEqualsToken ( ) : ParameterDeclaration {
2312
- return parseParameter ( /*requireEqualsToken*/ true ) ;
2313
- }
2314
-
2315
2311
function fillSignature (
2316
2312
returnToken : SyntaxKind . ColonToken | SyntaxKind . EqualsGreaterThanToken ,
2317
2313
flags : SignatureFlags ,
@@ -2364,10 +2360,7 @@ namespace ts {
2364
2360
setYieldContext ( ! ! ( flags & SignatureFlags . Yield ) ) ;
2365
2361
setAwaitContext ( ! ! ( flags & SignatureFlags . Await ) ) ;
2366
2362
2367
- const result = parseDelimitedList ( ParsingContext . Parameters ,
2368
- flags & SignatureFlags . JSDoc ? parseJSDocParameter :
2369
- flags & SignatureFlags . RequireCompleteParameterList ? parseParameterWithEqualsToken :
2370
- parseParameter ) ;
2363
+ const result = parseDelimitedList ( ParsingContext . Parameters , flags & SignatureFlags . JSDoc ? parseJSDocParameter : parseParameter ) ;
2371
2364
2372
2365
setYieldContext ( savedYieldContext ) ;
2373
2366
setAwaitContext ( savedAwaitContext ) ;
@@ -2491,7 +2484,7 @@ namespace ts {
2491
2484
// Although type literal properties cannot not have initializers, we attempt
2492
2485
// to parse an initializer so we can report in the checker that an interface
2493
2486
// property or type literal property cannot have an initializer.
2494
- ( < PropertySignature > node ) . initializer = parseNonParameterInitializer ( ) ;
2487
+ ( < PropertySignature > node ) . initializer = parseInitializer ( ) ;
2495
2488
}
2496
2489
}
2497
2490
parseTypeMemberSemicolon ( ) ;
@@ -3030,34 +3023,8 @@ namespace ts {
3030
3023
return expr ;
3031
3024
}
3032
3025
3033
- function parseInitializer ( inParameter : boolean , requireEqualsToken ?: boolean ) : Expression {
3034
- if ( token ( ) !== SyntaxKind . EqualsToken ) {
3035
- // It's not uncommon during typing for the user to miss writing the '=' token. Check if
3036
- // there is no newline after the last token and if we're on an expression. If so, parse
3037
- // this as an equals-value clause with a missing equals.
3038
- // NOTE: There are two places where we allow equals-value clauses. The first is in a
3039
- // variable declarator. The second is with a parameter. For variable declarators
3040
- // it's more likely that a { would be a allowed (as an object literal). While this
3041
- // is also allowed for parameters, the risk is that we consume the { as an object
3042
- // literal when it really will be for the block following the parameter.
3043
- if ( scanner . hasPrecedingLineBreak ( ) || ( inParameter && token ( ) === SyntaxKind . OpenBraceToken ) || ! isStartOfExpression ( ) ) {
3044
- // preceding line break, open brace in a parameter (likely a function body) or current token is not an expression -
3045
- // do not try to parse initializer
3046
- return undefined ;
3047
- }
3048
- if ( inParameter && requireEqualsToken ) {
3049
- // = is required when speculatively parsing arrow function parameters,
3050
- // so return a fake initializer as a signal that the equals token was missing
3051
- const result = createMissingNode ( SyntaxKind . Identifier , /*reportAtCurrentPosition*/ true , Diagnostics . _0_expected , "=" ) as Identifier ;
3052
- result . escapedText = "= not found" as __String ;
3053
- return result ;
3054
- }
3055
- }
3056
-
3057
- // Initializer[In, Yield] :
3058
- // = AssignmentExpression[?In, ?Yield]
3059
- parseExpected ( SyntaxKind . EqualsToken ) ;
3060
- return parseAssignmentExpressionOrHigher ( ) ;
3026
+ function parseInitializer ( ) : Expression | undefined {
3027
+ return parseOptional ( SyntaxKind . EqualsToken ) ? parseAssignmentExpressionOrHigher ( ) : undefined ;
3061
3028
}
3062
3029
3063
3030
function parseAssignmentExpressionOrHigher ( ) : Expression {
@@ -5227,7 +5194,7 @@ namespace ts {
5227
5194
const node = < BindingElement > createNode ( SyntaxKind . BindingElement ) ;
5228
5195
node . dotDotDotToken = parseOptionalToken ( SyntaxKind . DotDotDotToken ) ;
5229
5196
node . name = parseIdentifierOrPattern ( ) ;
5230
- node . initializer = parseInitializer ( /*inParameter*/ false ) ;
5197
+ node . initializer = parseInitializer ( ) ;
5231
5198
return finishNode ( node ) ;
5232
5199
}
5233
5200
@@ -5244,7 +5211,7 @@ namespace ts {
5244
5211
node . propertyName = propertyName ;
5245
5212
node . name = parseIdentifierOrPattern ( ) ;
5246
5213
}
5247
- node . initializer = parseInitializer ( /*inParameter*/ false ) ;
5214
+ node . initializer = parseInitializer ( ) ;
5248
5215
return finishNode ( node ) ;
5249
5216
}
5250
5217
@@ -5283,7 +5250,7 @@ namespace ts {
5283
5250
node . name = parseIdentifierOrPattern ( ) ;
5284
5251
node . type = parseTypeAnnotation ( ) ;
5285
5252
if ( ! isInOrOfKeyword ( token ( ) ) ) {
5286
- node . initializer = parseNonParameterInitializer ( ) ;
5253
+ node . initializer = parseInitializer ( ) ;
5287
5254
}
5288
5255
return finishNode ( node ) ;
5289
5256
}
@@ -5385,8 +5352,8 @@ namespace ts {
5385
5352
//
5386
5353
// The checker may still error in the static case to explicitly disallow the yield expression.
5387
5354
node . initializer = hasModifier ( node , ModifierFlags . Static )
5388
- ? allowInAnd ( parseNonParameterInitializer )
5389
- : doOutsideOfContext ( NodeFlags . YieldContext | NodeFlags . DisallowInContext , parseNonParameterInitializer ) ;
5355
+ ? allowInAnd ( parseInitializer )
5356
+ : doOutsideOfContext ( NodeFlags . YieldContext | NodeFlags . DisallowInContext , parseInitializer ) ;
5390
5357
5391
5358
parseSemicolon ( ) ;
5392
5359
return finishNode ( node ) ;
@@ -5404,10 +5371,6 @@ namespace ts {
5404
5371
return parsePropertyDeclaration ( < PropertyDeclaration > node ) ;
5405
5372
}
5406
5373
5407
- function parseNonParameterInitializer ( ) {
5408
- return parseInitializer ( /*inParameter*/ false ) ;
5409
- }
5410
-
5411
5374
function parseAccessorDeclaration ( node : AccessorDeclaration , kind : AccessorDeclaration [ "kind" ] ) : AccessorDeclaration {
5412
5375
node . kind = kind ;
5413
5376
node . name = parsePropertyName ( ) ;
@@ -5722,7 +5685,7 @@ namespace ts {
5722
5685
function parseEnumMember ( ) : EnumMember {
5723
5686
const node = < EnumMember > createNodeWithJSDoc ( SyntaxKind . EnumMember ) ;
5724
5687
node . name = parsePropertyName ( ) ;
5725
- node . initializer = allowInAnd ( parseNonParameterInitializer ) ;
5688
+ node . initializer = allowInAnd ( parseInitializer ) ;
5726
5689
return finishNode ( node ) ;
5727
5690
}
5728
5691
0 commit comments