Skip to content

Commit

Permalink
fix: preserve shadowed for-loop declarators (#11242)
Browse files Browse the repository at this point in the history
* fix: do not remove for-loop declarators

* fix: do not remove uninitialized var declarators in for init
  • Loading branch information
JLHwung committed Mar 12, 2020
1 parent dadd22e commit 565ab9a
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 4 deletions.
16 changes: 12 additions & 4 deletions packages/babel-plugin-transform-parameters/src/params.js
Expand Up @@ -76,11 +76,19 @@ export default function convertFunctionParams(path, loose) {
switch (node.type) {
case "VariableDeclarator":
if (node.init === null) {
redeclarator.remove();
} else {
state.iife = true;
const declaration = redeclarator.parentPath;
// The following uninitialized var declarators should not be removed
// for (var x in {})
// for (var x;;)
if (
!declaration.parentPath.isFor() ||
declaration.parentPath.get("body") === declaration
) {
redeclarator.remove();
break;
}
}
break;
// fall through
case "FunctionDeclaration":
state.iife = true;
break;
Expand Down
@@ -0,0 +1,5 @@
function foo(a = 2) {
for (let a = 1; a > 0; a--);
expect(a).toBe(2);
}
foo();
@@ -0,0 +1,5 @@
function foo(a = 2) {
for (let a, i = 0; i < 1; i++) a = 1;
expect(a).toBe(2);
}
foo();
@@ -0,0 +1,5 @@
function foo(a = 2) {
for (var i of [0]) var a = 1;
expect(a).toBe(1);
}
foo();
@@ -0,0 +1,5 @@
function foo(a = 2) {
for (var [a] of [[1]]);
expect(a).toBe(1);
}
foo();
@@ -0,0 +1,5 @@
function foo(a = 2) {
for (var i of [0]) var a;
expect(a).toBe(2);
}
foo();
@@ -0,0 +1,5 @@
function foo(a = 2) {
for (var a, i = 0; i < 1; i++);
expect(a).toBe(undefined);
}
foo();
@@ -0,0 +1,3 @@
(i = "__proto__") => {
for (var i in {});
};
@@ -0,0 +1,5 @@
{
"plugins": [
"transform-parameters"
]
}
@@ -0,0 +1,6 @@
(function () {
let i = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "__proto__";
return function () {
for (var i in {});
}();
});

0 comments on commit 565ab9a

Please sign in to comment.