Skip to content

Commit 08f467b

Browse files
committed
Clean up destructuring
1 parent d5b9263 commit 08f467b

File tree

10 files changed

+1071
-1030
lines changed

10 files changed

+1071
-1030
lines changed

src/compiler/binder.ts

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,7 +1280,7 @@ namespace ts {
12801280
function bindInitializedVariableFlow(node: VariableDeclaration | ArrayBindingElement) {
12811281
const name = !isOmittedExpression(node) ? node.name : undefined;
12821282
if (isBindingPattern(name)) {
1283-
for (const child of name.elements) {
1283+
for (const child of <ArrayBindingElement[]>name.elements) {
12841284
bindInitializedVariableFlow(child);
12851285
}
12861286
}
@@ -2629,7 +2629,7 @@ namespace ts {
26292629
}
26302630

26312631
// parameters with object rest destructuring are ES Next syntax
2632-
if (subtreeFlags & (TransformFlags.ContainsRest | TransformFlags.ContainsObjectRest)) {
2632+
if (subtreeFlags & TransformFlags.ContainsObjectRest) {
26332633
transformFlags |= TransformFlags.AssertESNext;
26342634
}
26352635

@@ -2867,7 +2867,7 @@ namespace ts {
28672867
}
28682868

28692869
// function declarations with object rest destructuring are ES Next syntax
2870-
if (subtreeFlags & (TransformFlags.ContainsRest | TransformFlags.ContainsObjectRest)) {
2870+
if (subtreeFlags & TransformFlags.ContainsObjectRest) {
28712871
transformFlags |= TransformFlags.AssertESNext;
28722872
}
28732873

@@ -2909,7 +2909,7 @@ namespace ts {
29092909
}
29102910

29112911
// function expressions with object rest destructuring are ES Next syntax
2912-
if (subtreeFlags & (TransformFlags.ContainsRest | TransformFlags.ContainsObjectRest)) {
2912+
if (subtreeFlags & TransformFlags.ContainsObjectRest) {
29132913
transformFlags |= TransformFlags.AssertESNext;
29142914
}
29152915

@@ -2952,7 +2952,7 @@ namespace ts {
29522952
}
29532953

29542954
// arrow functions with object rest destructuring are ES Next syntax
2955-
if (subtreeFlags & (TransformFlags.ContainsRest | TransformFlags.ContainsObjectRest)) {
2955+
if (subtreeFlags & TransformFlags.ContainsObjectRest) {
29562956
transformFlags |= TransformFlags.AssertESNext;
29572957
}
29582958

@@ -2982,16 +2982,11 @@ namespace ts {
29822982

29832983
function computeVariableDeclaration(node: VariableDeclaration, subtreeFlags: TransformFlags) {
29842984
let transformFlags = subtreeFlags;
2985-
const nameKind = node.name.kind;
2985+
transformFlags |= TransformFlags.AssertES2015 | TransformFlags.ContainsBindingPattern;
29862986

2987-
// A VariableDeclaration with an object binding pattern is ES2015 syntax
2988-
// and possibly ESNext syntax if it contains an object binding pattern
2989-
if (nameKind === SyntaxKind.ObjectBindingPattern) {
2990-
transformFlags |= TransformFlags.AssertESNext | TransformFlags.AssertES2015 | TransformFlags.ContainsBindingPattern;
2991-
}
2992-
// A VariableDeclaration with an object binding pattern is ES2015 syntax.
2993-
else if (nameKind === SyntaxKind.ArrayBindingPattern) {
2994-
transformFlags |= TransformFlags.AssertES2015 | TransformFlags.ContainsBindingPattern;
2987+
// A VariableDeclaration containing ObjectRest is ESNext syntax
2988+
if (subtreeFlags & TransformFlags.ContainsObjectRest) {
2989+
transformFlags |= TransformFlags.AssertESNext;
29952990
}
29962991

29972992
// Type annotations are TypeScript syntax.
@@ -3213,13 +3208,6 @@ namespace ts {
32133208
transformFlags |= TransformFlags.AssertESNext | TransformFlags.ContainsSpread | TransformFlags.ContainsObjectSpread;
32143209
break;
32153210

3216-
case SyntaxKind.BindingElement:
3217-
transformFlags |= TransformFlags.AssertES2015;
3218-
if ((<BindingElement>node).dotDotDotToken) {
3219-
transformFlags |= TransformFlags.ContainsRest;
3220-
}
3221-
break;
3222-
32233211
case SyntaxKind.SuperKeyword:
32243212
// This node is ES6 syntax.
32253213
transformFlags |= TransformFlags.AssertES2015;
@@ -3232,7 +3220,7 @@ namespace ts {
32323220

32333221
case SyntaxKind.ObjectBindingPattern:
32343222
transformFlags |= TransformFlags.AssertES2015 | TransformFlags.ContainsBindingPattern;
3235-
if (subtreeFlags & TransformFlags.ContainsSpread) {
3223+
if (subtreeFlags & TransformFlags.ContainsRest) {
32363224
transformFlags |= TransformFlags.AssertESNext | TransformFlags.ContainsObjectRest;
32373225
}
32383226
excludeFlags = TransformFlags.BindingPatternExcludes;
@@ -3243,6 +3231,13 @@ namespace ts {
32433231
excludeFlags = TransformFlags.BindingPatternExcludes;
32443232
break;
32453233

3234+
case SyntaxKind.BindingElement:
3235+
transformFlags |= TransformFlags.AssertES2015;
3236+
if ((<BindingElement>node).dotDotDotToken) {
3237+
transformFlags |= TransformFlags.ContainsRest;
3238+
}
3239+
break;
3240+
32463241
case SyntaxKind.Decorator:
32473242
// This node is TypeScript syntax, and marks its container as also being TypeScript syntax.
32483243
transformFlags |= TransformFlags.AssertTypeScript | TransformFlags.ContainsDecorators;

0 commit comments

Comments
 (0)