Skip to content

Commit a0db197

Browse files
committed
Rename Spread[Element]Expression
1. SpreadElementExpression (existing, for arrays) -> SpreadExpression 2. SpreadElement (new for object literals) -> SpreadElementExpression
1 parent 63f8c99 commit a0db197

File tree

14 files changed

+96
-97
lines changed

14 files changed

+96
-97
lines changed

src/compiler/binder.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,8 +1063,8 @@ namespace ts {
10631063
}
10641064
else if (node.kind === SyntaxKind.ArrayLiteralExpression) {
10651065
for (const e of (<ArrayLiteralExpression>node).elements) {
1066-
if (e.kind === SyntaxKind.SpreadElementExpression) {
1067-
bindAssignmentTargetFlow((<SpreadElementExpression>e).expression);
1066+
if (e.kind === SyntaxKind.SpreadExpression) {
1067+
bindAssignmentTargetFlow((<SpreadExpression>e).expression);
10681068
}
10691069
else {
10701070
bindDestructuringTargetFlow(e);
@@ -1079,6 +1079,9 @@ namespace ts {
10791079
else if (p.kind === SyntaxKind.ShorthandPropertyAssignment) {
10801080
bindAssignmentTargetFlow((<ShorthandPropertyAssignment>p).name);
10811081
}
1082+
else if (p.kind === SyntaxKind.SpreadElementExpression) {
1083+
bindAssignmentTargetFlow((<SpreadElementExpression>p).expression);
1084+
}
10821085
}
10831086
}
10841087
}
@@ -1825,7 +1828,7 @@ namespace ts {
18251828
case SyntaxKind.EnumMember:
18261829
return bindPropertyOrMethodOrAccessor(<Declaration>node, SymbolFlags.EnumMember, SymbolFlags.EnumMemberExcludes);
18271830

1828-
case SyntaxKind.SpreadElement:
1831+
case SyntaxKind.SpreadElementExpression:
18291832
case SyntaxKind.JsxSpreadAttribute:
18301833
emitFlags |= NodeFlags.HasSpreadAttribute;
18311834
return;
@@ -2369,9 +2372,9 @@ namespace ts {
23692372
const expression = node.expression;
23702373
const expressionKind = expression.kind;
23712374

2372-
if (subtreeFlags & TransformFlags.ContainsSpreadElementExpression
2375+
if (subtreeFlags & TransformFlags.ContainsSpreadExpression
23732376
|| isSuperOrSuperProperty(expression, expressionKind)) {
2374-
// If the this node contains a SpreadElementExpression, or is a super call, then it is an ES6
2377+
// If the this node contains a SpreadExpression, or is a super call, then it is an ES6
23752378
// node.
23762379
transformFlags |= TransformFlags.AssertES6;
23772380
}
@@ -2957,10 +2960,10 @@ namespace ts {
29572960
}
29582961
break;
29592962

2960-
case SyntaxKind.SpreadElement:
2963+
case SyntaxKind.SpreadExpression:
29612964
case SyntaxKind.SpreadElementExpression:
29622965
// This node is ES6 or ES future syntax, but is handled by a containing node.
2963-
transformFlags |= TransformFlags.ContainsSpreadElementExpression;
2966+
transformFlags |= TransformFlags.ContainsSpreadExpression;
29642967
break;
29652968

29662969
case SyntaxKind.SuperKeyword:
@@ -2998,7 +3001,7 @@ namespace ts {
29983001
transformFlags |= TransformFlags.ContainsLexicalThis;
29993002
}
30003003

3001-
if (subtreeFlags & TransformFlags.ContainsSpreadElementExpression) {
3004+
if (subtreeFlags & TransformFlags.ContainsSpreadExpression) {
30023005
// If an ObjectLiteralExpression contains a spread element, then it
30033006
// is an ES experimental node.
30043007
transformFlags |= TransformFlags.AssertExperimental;
@@ -3009,8 +3012,8 @@ namespace ts {
30093012
case SyntaxKind.ArrayLiteralExpression:
30103013
case SyntaxKind.NewExpression:
30113014
excludeFlags = TransformFlags.ArrayLiteralOrCallOrNewExcludes;
3012-
if (subtreeFlags & TransformFlags.ContainsSpreadElementExpression) {
3013-
// If the this node contains a SpreadElementExpression, then it is an ES6
3015+
if (subtreeFlags & TransformFlags.ContainsSpreadExpression) {
3016+
// If the this node contains a SpreadExpression, then it is an ES6
30143017
// node.
30153018
transformFlags |= TransformFlags.AssertES6;
30163019
}

src/compiler/checker.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8379,7 +8379,7 @@ namespace ts {
83798379
unknownType;
83808380
}
83818381

8382-
function getTypeOfDestructuredSpreadElement(type: Type) {
8382+
function getTypeOfDestructuredSpreadExpression(type: Type) {
83838383
return createArrayType(checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false) || unknownType);
83848384
}
83858385

@@ -8393,8 +8393,8 @@ namespace ts {
83938393
return getTypeOfDestructuredArrayElement(getAssignedType(node), indexOf(node.elements, element));
83948394
}
83958395

8396-
function getAssignedTypeOfSpreadElement(node: SpreadElementExpression): Type {
8397-
return getTypeOfDestructuredSpreadElement(getAssignedType(<ArrayLiteralExpression>node.parent));
8396+
function getAssignedTypeOfSpreadExpression(node: SpreadExpression): Type {
8397+
return getTypeOfDestructuredSpreadExpression(getAssignedType(<ArrayLiteralExpression>node.parent));
83988398
}
83998399

84008400
function getAssignedTypeOfPropertyAssignment(node: PropertyAssignment | ShorthandPropertyAssignment): Type {
@@ -8418,8 +8418,8 @@ namespace ts {
84188418
return undefinedType;
84198419
case SyntaxKind.ArrayLiteralExpression:
84208420
return getAssignedTypeOfArrayLiteralElement(<ArrayLiteralExpression>parent, node);
8421-
case SyntaxKind.SpreadElementExpression:
8422-
return getAssignedTypeOfSpreadElement(<SpreadElementExpression>parent);
8421+
case SyntaxKind.SpreadExpression:
8422+
return getAssignedTypeOfSpreadExpression(<SpreadExpression>parent);
84238423
case SyntaxKind.PropertyAssignment:
84248424
return getAssignedTypeOfPropertyAssignment(<PropertyAssignment>parent);
84258425
case SyntaxKind.ShorthandPropertyAssignment:
@@ -8435,7 +8435,7 @@ namespace ts {
84358435
getTypeOfDestructuredProperty(parentType, node.propertyName || <Identifier>node.name) :
84368436
!node.dotDotDotToken ?
84378437
getTypeOfDestructuredArrayElement(parentType, indexOf(pattern.elements, node)) :
8438-
getTypeOfDestructuredSpreadElement(parentType);
8438+
getTypeOfDestructuredSpreadExpression(parentType);
84398439
return getTypeWithDefault(type, node.initializer);
84408440
}
84418441

@@ -10221,7 +10221,7 @@ namespace ts {
1022110221
return mapper && mapper.context;
1022210222
}
1022310223

10224-
function checkSpreadElementExpression(node: SpreadElementExpression, contextualMapper?: TypeMapper): Type {
10224+
function checkSpreadExpression(node: SpreadExpression, contextualMapper?: TypeMapper): Type {
1022510225
// It is usually not safe to call checkExpressionCached if we can be contextually typing.
1022610226
// You can tell that we are contextually typing because of the contextualMapper parameter.
1022710227
// While it is true that a spread element can have a contextual type, it does not do anything
@@ -10243,7 +10243,7 @@ namespace ts {
1024310243
const elementTypes: Type[] = [];
1024410244
const inDestructuringPattern = isAssignmentTarget(node);
1024510245
for (const e of elements) {
10246-
if (inDestructuringPattern && e.kind === SyntaxKind.SpreadElementExpression) {
10246+
if (inDestructuringPattern && e.kind === SyntaxKind.SpreadExpression) {
1024710247
// Given the following situation:
1024810248
// var c: {};
1024910249
// [...c] = ["", 0];
@@ -10256,7 +10256,7 @@ namespace ts {
1025610256
// get the contextual element type from it. So we do something similar to
1025710257
// getContextualTypeForElementExpression, which will crucially not error
1025810258
// if there is no index type / iterated type.
10259-
const restArrayType = checkExpression((<SpreadElementExpression>e).expression, contextualMapper);
10259+
const restArrayType = checkExpression((<SpreadExpression>e).expression, contextualMapper);
1026010260
const restElementType = getIndexTypeOfType(restArrayType, IndexKind.Number) ||
1026110261
(languageVersion >= ScriptTarget.ES6 ? getElementTypeOfIterable(restArrayType, /*errorNode*/ undefined) : undefined);
1026210262
if (restElementType) {
@@ -10267,7 +10267,7 @@ namespace ts {
1026710267
const type = checkExpressionForMutableLocation(e, contextualMapper);
1026810268
elementTypes.push(type);
1026910269
}
10270-
hasSpreadElement = hasSpreadElement || e.kind === SyntaxKind.SpreadElementExpression;
10270+
hasSpreadElement = hasSpreadElement || e.kind === SyntaxKind.SpreadExpression;
1027110271
}
1027210272
if (!hasSpreadElement) {
1027310273
// If array literal is actually a destructuring pattern, mark it as an implied type. We do this such
@@ -10456,7 +10456,7 @@ namespace ts {
1045610456
prop.target = member;
1045710457
member = prop;
1045810458
}
10459-
else if (memberDecl.kind === SyntaxKind.SpreadElement) {
10459+
else if (memberDecl.kind === SyntaxKind.SpreadElementExpression) {
1046010460
if (propertiesArray.length > 0) {
1046110461
const t = createObjectLiteralType(node, hasComputedStringProperty, hasComputedNumberProperty, propertiesArray, propertiesTable, typeFlags, patternWithComputedProperties, inDestructuringPattern) as SpreadElementType;
1046210462
t.isDeclaredProperty = true;
@@ -10466,7 +10466,7 @@ namespace ts {
1046610466
hasComputedStringProperty = false;
1046710467
hasComputedNumberProperty = false;
1046810468
}
10469-
spreads.push(checkExpression((memberDecl as SpreadElement).target) as SpreadElementType);
10469+
spreads.push(checkExpression((memberDecl as SpreadElementExpression).expression) as SpreadElementType);
1047010470
continue;
1047110471
}
1047210472
else {
@@ -11503,7 +11503,7 @@ namespace ts {
1150311503
function getSpreadArgumentIndex(args: Expression[]): number {
1150411504
for (let i = 0; i < args.length; i++) {
1150511505
const arg = args[i];
11506-
if (arg && arg.kind === SyntaxKind.SpreadElementExpression) {
11506+
if (arg && arg.kind === SyntaxKind.SpreadExpression) {
1150711507
return i;
1150811508
}
1150911509
}
@@ -13474,7 +13474,7 @@ namespace ts {
1347413474
const elements = node.elements;
1347513475
const element = elements[elementIndex];
1347613476
if (element.kind !== SyntaxKind.OmittedExpression) {
13477-
if (element.kind !== SyntaxKind.SpreadElementExpression) {
13477+
if (element.kind !== SyntaxKind.SpreadExpression) {
1347813478
const propName = "" + elementIndex;
1347913479
const type = isTypeAny(sourceType)
1348013480
? sourceType
@@ -13501,7 +13501,7 @@ namespace ts {
1350113501
error(element, Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern);
1350213502
}
1350313503
else {
13504-
const restExpression = (<SpreadElementExpression>element).expression;
13504+
const restExpression = (<SpreadExpression>element).expression;
1350513505
if (restExpression.kind === SyntaxKind.BinaryExpression && (<BinaryExpression>restExpression).operatorToken.kind === SyntaxKind.EqualsToken) {
1350613506
error((<BinaryExpression>restExpression).operatorToken, Diagnostics.A_rest_element_cannot_have_an_initializer);
1350713507
}
@@ -14137,8 +14137,8 @@ namespace ts {
1413714137
return checkBinaryExpression(<BinaryExpression>node, contextualMapper);
1413814138
case SyntaxKind.ConditionalExpression:
1413914139
return checkConditionalExpression(<ConditionalExpression>node, contextualMapper);
14140-
case SyntaxKind.SpreadElementExpression:
14141-
return checkSpreadElementExpression(<SpreadElementExpression>node, contextualMapper);
14140+
case SyntaxKind.SpreadExpression:
14141+
return checkSpreadExpression(<SpreadExpression>node, contextualMapper);
1414214142
case SyntaxKind.OmittedExpression:
1414314143
return undefinedWideningType;
1414414144
case SyntaxKind.YieldExpression:
@@ -20048,8 +20048,8 @@ namespace ts {
2004820048
const GetOrSetAccessor = GetAccessor | SetAccessor;
2004920049

2005020050
for (const prop of node.properties) {
20051-
if (prop.kind === SyntaxKind.SpreadElement) {
20052-
const target = (prop as SpreadElement).target;
20051+
if (prop.kind === SyntaxKind.SpreadElementExpression) {
20052+
const target = (prop as SpreadElementExpression).expression;
2005320053
switch (target.kind) {
2005420054
case SyntaxKind.Identifier:
2005520055
case SyntaxKind.PropertyAccessExpression:

src/compiler/emitter.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -824,8 +824,8 @@ const _super = (function (geti, seti) {
824824
return emitTemplateExpression(<TemplateExpression>node);
825825
case SyntaxKind.YieldExpression:
826826
return emitYieldExpression(<YieldExpression>node);
827-
case SyntaxKind.SpreadElementExpression:
828-
return emitSpreadElementExpression(<SpreadElementExpression>node);
827+
case SyntaxKind.SpreadExpression:
828+
return emitSpreadExpression(<SpreadExpression>node);
829829
case SyntaxKind.ClassExpression:
830830
return emitClassExpression(<ClassExpression>node);
831831
case SyntaxKind.OmittedExpression:
@@ -1365,7 +1365,7 @@ const _super = (function (geti, seti) {
13651365
emitExpressionWithPrefix(" ", node.expression);
13661366
}
13671367

1368-
function emitSpreadElementExpression(node: SpreadElementExpression) {
1368+
function emitSpreadExpression(node: SpreadExpression) {
13691369
write("...");
13701370
emitExpression(node.expression);
13711371
}

src/compiler/factory.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -704,12 +704,12 @@ namespace ts {
704704
}
705705

706706
export function createSpread(expression: Expression, location?: TextRange) {
707-
const node = <SpreadElementExpression>createNode(SyntaxKind.SpreadElementExpression, location);
707+
const node = <SpreadExpression>createNode(SyntaxKind.SpreadExpression, location);
708708
node.expression = parenthesizeExpressionForList(expression);
709709
return node;
710710
}
711711

712-
export function updateSpread(node: SpreadElementExpression, expression: Expression) {
712+
export function updateSpread(node: SpreadExpression, expression: Expression) {
713713
if (node.expression !== expression) {
714714
return updateNode(createSpread(expression, node), node);
715715
}
@@ -2745,4 +2745,4 @@ namespace ts {
27452745
function tryGetModuleNameFromDeclaration(declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration, host: EmitHost, resolver: EmitResolver, compilerOptions: CompilerOptions) {
27462746
return tryGetModuleNameFromFile(resolver.getExternalModuleFileFromDeclaration(declaration), host, compilerOptions);
27472747
}
2748-
}
2748+
}

src/compiler/parser.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,8 @@ namespace ts {
7474
visitNode(cbNode, (<ShorthandPropertyAssignment>node).questionToken) ||
7575
visitNode(cbNode, (<ShorthandPropertyAssignment>node).equalsToken) ||
7676
visitNode(cbNode, (<ShorthandPropertyAssignment>node).objectAssignmentInitializer);
77-
case SyntaxKind.SpreadElement:
78-
return visitNode(cbNode, (<SpreadElement>node).dotDotDotToken) ||
79-
visitNode(cbNode, (<SpreadElement>node).target);
77+
case SyntaxKind.SpreadElementExpression:
78+
return visitNode(cbNode, (<SpreadElementExpression>node).expression);
8079
case SyntaxKind.SpreadTypeElement:
8180
return visitNode(cbNode, (node as SpreadTypeElement).type);
8281
case SyntaxKind.Parameter:
@@ -198,8 +197,8 @@ namespace ts {
198197
visitNode(cbNode, (<ConditionalExpression>node).whenTrue) ||
199198
visitNode(cbNode, (<ConditionalExpression>node).colonToken) ||
200199
visitNode(cbNode, (<ConditionalExpression>node).whenFalse);
201-
case SyntaxKind.SpreadElementExpression:
202-
return visitNode(cbNode, (<SpreadElementExpression>node).expression);
200+
case SyntaxKind.SpreadExpression:
201+
return visitNode(cbNode, (<SpreadExpression>node).expression);
203202
case SyntaxKind.Block:
204203
case SyntaxKind.ModuleBlock:
205204
return visitNodes(cbNodes, (<Block>node).statements);
@@ -4102,15 +4101,15 @@ namespace ts {
41024101
return finishNode(node);
41034102
}
41044103

4105-
function parseSpreadElement(): Expression {
4106-
const node = <SpreadElementExpression>createNode(SyntaxKind.SpreadElementExpression);
4104+
function parseSpreadExpression(): Expression {
4105+
const node = <SpreadExpression>createNode(SyntaxKind.SpreadExpression);
41074106
parseExpected(SyntaxKind.DotDotDotToken);
41084107
node.expression = parseAssignmentExpressionOrHigher();
41094108
return finishNode(node);
41104109
}
41114110

41124111
function parseArgumentOrArrayLiteralElement(): Expression {
4113-
return token() === SyntaxKind.DotDotDotToken ? parseSpreadElement() :
4112+
return token() === SyntaxKind.DotDotDotToken ? parseSpreadExpression() :
41144113
token() === SyntaxKind.CommaToken ? <Expression>createNode(SyntaxKind.OmittedExpression) :
41154114
parseAssignmentExpressionOrHigher();
41164115
}
@@ -4145,9 +4144,8 @@ namespace ts {
41454144
const fullStart = scanner.getStartPos();
41464145
const dotDotDotToken = parseOptionalToken(SyntaxKind.DotDotDotToken);
41474146
if (dotDotDotToken) {
4148-
const spreadElement = <SpreadElement>createNode(SyntaxKind.SpreadElement, fullStart);
4149-
spreadElement.dotDotDotToken = dotDotDotToken;
4150-
spreadElement.target = parseAssignmentExpressionOrHigher();
4147+
const spreadElement = <SpreadElementExpression>createNode(SyntaxKind.SpreadElementExpression, fullStart);
4148+
spreadElement.expression = parseAssignmentExpressionOrHigher();
41514149
return addJSDocComment(finishNode(spreadElement));
41524150
}
41534151
const decorators = parseDecorators();

src/compiler/transformers/destructuring.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,11 +310,11 @@ namespace ts {
310310
const e = elements[i];
311311
if (e.kind !== SyntaxKind.OmittedExpression) {
312312
// Assignment for target = value.propName should highligh whole property, hence use e as source map node
313-
if (e.kind !== SyntaxKind.SpreadElementExpression) {
313+
if (e.kind !== SyntaxKind.SpreadExpression) {
314314
emitDestructuringAssignment(e, createElementAccess(value, createLiteral(i)), e);
315315
}
316316
else if (i === numElements - 1) {
317-
emitDestructuringAssignment((<SpreadElementExpression>e).expression, createArraySlice(value, i), e);
317+
emitDestructuringAssignment((<SpreadExpression>e).expression, createArraySlice(value, i), e);
318318
}
319319
}
320320
}

0 commit comments

Comments
 (0)