From ada1cc8781c9be53f8a723983f8241eef2795919 Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Wed, 10 Aug 2022 15:03:26 +0800 Subject: [PATCH 1/4] fix --- .../babel-plugin-transform-destructuring/src/util.ts | 11 +++++++---- .../destructuring/for-expressions-nest/input.js | 1 + .../destructuring/for-expressions-nest/output.js | 5 +++++ 3 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/input.js create mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/output.js diff --git a/packages/babel-plugin-transform-destructuring/src/util.ts b/packages/babel-plugin-transform-destructuring/src/util.ts index 65d277571142..e76db11fd920 100644 --- a/packages/babel-plugin-transform-destructuring/src/util.ts +++ b/packages/babel-plugin-transform-destructuring/src/util.ts @@ -327,7 +327,6 @@ export class DestructuringTransformer { } } } - // for (let i = 0; i < pattern.properties.length; i++) { const prop = pattern.properties[i]; @@ -484,8 +483,6 @@ export class DestructuringTransformer { } } - // - this.push(pattern, ref); return this.nodes; @@ -620,6 +617,8 @@ export function convertVariableDeclaration( } } + const mustVarOrExpr = t.isForStatement(path.parent) && path.key !== "body"; + let tail: t.VariableDeclaration | null = null; const nodesOut = []; for (const node of nodes) { @@ -640,7 +639,11 @@ export function convertVariableDeclaration( if (!node.loc) { node.loc = nodeLoc; } - nodesOut.push(node); + nodesOut.push( + node.type === "ExpressionStatement" && mustVarOrExpr + ? node.expression + : node, + ); } if (nodesOut.length === 1) { diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/input.js new file mode 100644 index 000000000000..1303efbb1b8e --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/input.js @@ -0,0 +1 @@ +for ( let x in a ) for ( var { } = x ; ; ) ; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/output.js new file mode 100644 index 000000000000..52e7189bd304 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/output.js @@ -0,0 +1,5 @@ +for (var x in a) { + for (babelHelpers.objectDestructuringEmpty(x);;) { + ; + } +} From 076da663c5e0eeb736f1ac0dc9aefd38393a29c7 Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Wed, 10 Aug 2022 21:34:28 +0800 Subject: [PATCH 2/4] Update packages/babel-plugin-transform-destructuring/src/util.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Huáng Jùnliàng --- packages/babel-plugin-transform-destructuring/src/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-plugin-transform-destructuring/src/util.ts b/packages/babel-plugin-transform-destructuring/src/util.ts index e76db11fd920..3ba60f1fb244 100644 --- a/packages/babel-plugin-transform-destructuring/src/util.ts +++ b/packages/babel-plugin-transform-destructuring/src/util.ts @@ -617,7 +617,7 @@ export function convertVariableDeclaration( } } - const mustVarOrExpr = t.isForStatement(path.parent) && path.key !== "body"; + const inForInit = t.isForStatement(path.parent, { init: node }); let tail: t.VariableDeclaration | null = null; const nodesOut = []; From 83e43312015780bcb02a1e26295002b93c742db9 Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Wed, 10 Aug 2022 21:45:32 +0800 Subject: [PATCH 3/4] review --- packages/babel-plugin-transform-destructuring/src/util.ts | 4 +--- .../destructuring/destructuring-empty-in-for-body/input.js | 1 + .../destructuring/destructuring-empty-in-for-body/output.js | 5 +++++ .../destructuring/destructuring-empty-in-for-init/input.js | 1 + .../output.js | 2 +- .../fixtures/destructuring/for-expressions-nest/input.js | 1 - 6 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/input.js create mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/output.js create mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/input.js rename packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/{for-expressions-nest => destructuring-empty-in-for-init}/output.js (77%) delete mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/input.js diff --git a/packages/babel-plugin-transform-destructuring/src/util.ts b/packages/babel-plugin-transform-destructuring/src/util.ts index 3ba60f1fb244..9fde09a6897d 100644 --- a/packages/babel-plugin-transform-destructuring/src/util.ts +++ b/packages/babel-plugin-transform-destructuring/src/util.ts @@ -640,9 +640,7 @@ export function convertVariableDeclaration( node.loc = nodeLoc; } nodesOut.push( - node.type === "ExpressionStatement" && mustVarOrExpr - ? node.expression - : node, + inForInit && node.type === "ExpressionStatement" ? node.expression : node, ); } diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/input.js new file mode 100644 index 000000000000..33431fdcd333 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/input.js @@ -0,0 +1 @@ +for ( let x in y ) for ( ; ; ) var { } = x ; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/output.js new file mode 100644 index 000000000000..a817e2310c2a --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/output.js @@ -0,0 +1,5 @@ +for (var x in y) { + for (;;) { + babelHelpers.objectDestructuringEmpty(x); + } +} diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/input.js new file mode 100644 index 000000000000..b154930022e0 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/input.js @@ -0,0 +1 @@ +for ( let x in y ) for ( var { } = x ; ; ) ; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/output.js similarity index 77% rename from packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/output.js rename to packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/output.js index 52e7189bd304..a7f1876643e6 100644 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/output.js +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/output.js @@ -1,4 +1,4 @@ -for (var x in a) { +for (var x in y) { for (babelHelpers.objectDestructuringEmpty(x);;) { ; } diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/input.js deleted file mode 100644 index 1303efbb1b8e..000000000000 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/for-expressions-nest/input.js +++ /dev/null @@ -1 +0,0 @@ -for ( let x in a ) for ( var { } = x ; ; ) ; From 29a1f3980046d25b2d19c51565ebe64e05706dfa Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Wed, 10 Aug 2022 21:55:52 +0800 Subject: [PATCH 4/4] review --- .../destructuring-empty-in-for-body/input.js | 1 - .../destructuring-empty-in-for-body/output.js | 5 ----- .../destructuring-empty-in-for-init/input.js | 1 - .../destructuring-empty-in-for-init/output.js | 5 ----- .../destructuring-empty-in-for/input.js | 5 +++++ .../destructuring-empty-in-for/output.js | 19 +++++++++++++++++++ 6 files changed, 24 insertions(+), 12 deletions(-) delete mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/input.js delete mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/output.js delete mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/input.js delete mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/output.js create mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for/input.js create mode 100644 packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for/output.js diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/input.js deleted file mode 100644 index 33431fdcd333..000000000000 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/input.js +++ /dev/null @@ -1 +0,0 @@ -for ( let x in y ) for ( ; ; ) var { } = x ; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/output.js deleted file mode 100644 index a817e2310c2a..000000000000 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-body/output.js +++ /dev/null @@ -1,5 +0,0 @@ -for (var x in y) { - for (;;) { - babelHelpers.objectDestructuringEmpty(x); - } -} diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/input.js deleted file mode 100644 index b154930022e0..000000000000 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/input.js +++ /dev/null @@ -1 +0,0 @@ -for ( let x in y ) for ( var { } = x ; ; ) ; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/output.js deleted file mode 100644 index a7f1876643e6..000000000000 --- a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for-init/output.js +++ /dev/null @@ -1,5 +0,0 @@ -for (var x in y) { - for (babelHelpers.objectDestructuringEmpty(x);;) { - ; - } -} diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for/input.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for/input.js new file mode 100644 index 000000000000..947529b3cc6f --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for/input.js @@ -0,0 +1,5 @@ +for ( let x in y ) for ( ; ; ) var { } = x ; + +for ( let x in y ) for ( var { } = x ; ; ) ; + +for ( let x in y ) for ( ; { } = x ; {} = x ) var { } = x ; diff --git a/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for/output.js b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for/output.js new file mode 100644 index 000000000000..d3697e08f257 --- /dev/null +++ b/packages/babel-plugin-transform-destructuring/test/fixtures/destructuring/destructuring-empty-in-for/output.js @@ -0,0 +1,19 @@ +for (var x in y) { + for (;;) { + babelHelpers.objectDestructuringEmpty(x); + } +} + +for (var _x in y) { + for (babelHelpers.objectDestructuringEmpty(_x);;) { + ; + } +} + +for (var _x2 in y) { + for (; _x3 = _x2, babelHelpers.objectDestructuringEmpty(_x3), _x3; _x4 = _x2, babelHelpers.objectDestructuringEmpty(_x4), _x4) { + var _x3, _x4; + + babelHelpers.objectDestructuringEmpty(_x2); + } +}