@@ -2271,7 +2271,7 @@ namespace ts {
2271
2271
isStartOfType ( /*inStartOfParameter*/ true ) ;
2272
2272
}
2273
2273
2274
- function parseParameter ( requireEqualsToken ?: boolean ) : ParameterDeclaration {
2274
+ function parseParameter ( ) : ParameterDeclaration {
2275
2275
const node = < ParameterDeclaration > createNode ( SyntaxKind . Parameter ) ;
2276
2276
if ( token ( ) === SyntaxKind . ThisKeyword ) {
2277
2277
node . name = createIdentifier ( /*isIdentifier*/ true ) ;
@@ -2300,7 +2300,7 @@ namespace ts {
2300
2300
2301
2301
node . questionToken = parseOptionalToken ( SyntaxKind . QuestionToken ) ;
2302
2302
node . type = parseParameterType ( ) ;
2303
- node . initializer = parseInitializer ( /*inParameter*/ true , requireEqualsToken ) ;
2303
+ node . initializer = parseInitializer ( ) ;
2304
2304
2305
2305
return addJSDocComment ( finishNode ( node ) ) ;
2306
2306
}
@@ -2357,8 +2357,7 @@ namespace ts {
2357
2357
setYieldContext ( ! ! ( flags & SignatureFlags . Yield ) ) ;
2358
2358
setAwaitContext ( ! ! ( flags & SignatureFlags . Await ) ) ;
2359
2359
2360
- const result = parseDelimitedList ( ParsingContext . Parameters ,
2361
- flags & SignatureFlags . JSDoc ? parseJSDocParameter : ( ) => parseParameter ( ! ! ( flags & SignatureFlags . RequireCompleteParameterList ) ) ) ;
2360
+ const result = parseDelimitedList ( ParsingContext . Parameters , flags & SignatureFlags . JSDoc ? parseJSDocParameter : parseParameter ) ;
2362
2361
2363
2362
setYieldContext ( savedYieldContext ) ;
2364
2363
setAwaitContext ( savedAwaitContext ) ;
@@ -2499,7 +2498,7 @@ namespace ts {
2499
2498
// Although type literal properties cannot not have initializers, we attempt
2500
2499
// to parse an initializer so we can report in the checker that an interface
2501
2500
// property or type literal property cannot have an initializer.
2502
- property . initializer = parseNonParameterInitializer ( ) ;
2501
+ property . initializer = parseInitializer ( ) ;
2503
2502
}
2504
2503
2505
2504
parseTypeMemberSemicolon ( ) ;
@@ -3039,34 +3038,8 @@ namespace ts {
3039
3038
return expr ;
3040
3039
}
3041
3040
3042
- function parseInitializer ( inParameter : boolean , requireEqualsToken ?: boolean ) : Expression {
3043
- if ( token ( ) !== SyntaxKind . EqualsToken ) {
3044
- // It's not uncommon during typing for the user to miss writing the '=' token. Check if
3045
- // there is no newline after the last token and if we're on an expression. If so, parse
3046
- // this as an equals-value clause with a missing equals.
3047
- // NOTE: There are two places where we allow equals-value clauses. The first is in a
3048
- // variable declarator. The second is with a parameter. For variable declarators
3049
- // it's more likely that a { would be a allowed (as an object literal). While this
3050
- // is also allowed for parameters, the risk is that we consume the { as an object
3051
- // literal when it really will be for the block following the parameter.
3052
- if ( scanner . hasPrecedingLineBreak ( ) || ( inParameter && token ( ) === SyntaxKind . OpenBraceToken ) || ! isStartOfExpression ( ) ) {
3053
- // preceding line break, open brace in a parameter (likely a function body) or current token is not an expression -
3054
- // do not try to parse initializer
3055
- return undefined ;
3056
- }
3057
- if ( inParameter && requireEqualsToken ) {
3058
- // = is required when speculatively parsing arrow function parameters,
3059
- // so return a fake initializer as a signal that the equals token was missing
3060
- const result = createMissingNode ( SyntaxKind . Identifier , /*reportAtCurrentPosition*/ true , Diagnostics . _0_expected , "=" ) as Identifier ;
3061
- result . escapedText = "= not found" as __String ;
3062
- return result ;
3063
- }
3064
- }
3065
-
3066
- // Initializer[In, Yield] :
3067
- // = AssignmentExpression[?In, ?Yield]
3068
- parseExpected ( SyntaxKind . EqualsToken ) ;
3069
- return parseAssignmentExpressionOrHigher ( ) ;
3041
+ function parseInitializer ( ) : Expression | undefined {
3042
+ return parseOptional ( SyntaxKind . EqualsToken ) ? parseAssignmentExpressionOrHigher ( ) : undefined ;
3070
3043
}
3071
3044
3072
3045
function parseAssignmentExpressionOrHigher ( ) : Expression {
@@ -5234,7 +5207,7 @@ namespace ts {
5234
5207
const node = < BindingElement > createNode ( SyntaxKind . BindingElement ) ;
5235
5208
node . dotDotDotToken = parseOptionalToken ( SyntaxKind . DotDotDotToken ) ;
5236
5209
node . name = parseIdentifierOrPattern ( ) ;
5237
- node . initializer = parseInitializer ( /*inParameter*/ false ) ;
5210
+ node . initializer = parseInitializer ( ) ;
5238
5211
return finishNode ( node ) ;
5239
5212
}
5240
5213
@@ -5251,7 +5224,7 @@ namespace ts {
5251
5224
node . propertyName = propertyName ;
5252
5225
node . name = parseIdentifierOrPattern ( ) ;
5253
5226
}
5254
- node . initializer = parseInitializer ( /*inParameter*/ false ) ;
5227
+ node . initializer = parseInitializer ( ) ;
5255
5228
return finishNode ( node ) ;
5256
5229
}
5257
5230
@@ -5290,7 +5263,7 @@ namespace ts {
5290
5263
node . name = parseIdentifierOrPattern ( ) ;
5291
5264
node . type = parseTypeAnnotation ( ) ;
5292
5265
if ( ! isInOrOfKeyword ( token ( ) ) ) {
5293
- node . initializer = parseNonParameterInitializer ( ) ;
5266
+ node . initializer = parseInitializer ( ) ;
5294
5267
}
5295
5268
return finishNode ( node ) ;
5296
5269
}
@@ -5406,8 +5379,8 @@ namespace ts {
5406
5379
//
5407
5380
// The checker may still error in the static case to explicitly disallow the yield expression.
5408
5381
property . initializer = hasModifier ( property , ModifierFlags . Static )
5409
- ? allowInAnd ( parseNonParameterInitializer )
5410
- : doOutsideOfContext ( NodeFlags . YieldContext | NodeFlags . DisallowInContext , parseNonParameterInitializer ) ;
5382
+ ? allowInAnd ( parseInitializer )
5383
+ : doOutsideOfContext ( NodeFlags . YieldContext | NodeFlags . DisallowInContext , parseInitializer ) ;
5411
5384
5412
5385
parseSemicolon ( ) ;
5413
5386
return addJSDocComment ( finishNode ( property ) ) ;
@@ -5428,10 +5401,6 @@ namespace ts {
5428
5401
}
5429
5402
}
5430
5403
5431
- function parseNonParameterInitializer ( ) {
5432
- return parseInitializer ( /*inParameter*/ false ) ;
5433
- }
5434
-
5435
5404
function parseAccessorDeclaration ( kind : SyntaxKind , fullStart : number , decorators : NodeArray < Decorator > , modifiers : NodeArray < Modifier > ) : AccessorDeclaration {
5436
5405
const node = < AccessorDeclaration > createNode ( kind , fullStart ) ;
5437
5406
node . decorators = decorators ;
@@ -5755,7 +5724,7 @@ namespace ts {
5755
5724
function parseEnumMember ( ) : EnumMember {
5756
5725
const node = < EnumMember > createNode ( SyntaxKind . EnumMember , scanner . getStartPos ( ) ) ;
5757
5726
node . name = parsePropertyName ( ) ;
5758
- node . initializer = allowInAnd ( parseNonParameterInitializer ) ;
5727
+ node . initializer = allowInAnd ( parseInitializer ) ;
5759
5728
return addJSDocComment ( finishNode ( node ) ) ;
5760
5729
}
5761
5730
0 commit comments