Skip to content

Commit

Permalink
rename colliding let bindings with for loop init (#8937)
Browse files Browse the repository at this point in the history
* rename colliding let bindings with for loop init

* added complex test case to check if loop init collisions were handled correctly

* updated test files
  • Loading branch information
byronluk authored and nicolo-ribaudo committed Oct 31, 2018
1 parent c82750a commit 0d9e77f
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 2 deletions.
15 changes: 13 additions & 2 deletions packages/babel-plugin-transform-block-scoping/src/index.js
Expand Up @@ -460,7 +460,9 @@ class BlockScoping {

remap() {
const letRefs = this.letReferences;
const outsideLetRefs = this.outsideLetReferences;
const scope = this.scope;
const blockPathScope = this.blockPath.scope;

// alright, so since we aren't wrapping this block in a closure
// we have to check if any of our let variables collide with
Expand All @@ -481,11 +483,20 @@ class BlockScoping {
scope.rename(ref.name);
}

if (this.blockPath.scope.hasOwnBinding(key)) {
this.blockPath.scope.rename(ref.name);
if (blockPathScope.hasOwnBinding(key)) {
blockPathScope.rename(ref.name);
}
}
}

for (const key in outsideLetRefs) {
const ref = letRefs[key];
// check for collisions with a for loop's init variable and the enclosing scope's bindings
// https://github.com/babel/babel/issues/8498
if (isInLoop(this.blockPath) && blockPathScope.hasOwnBinding(key)) {
blockPathScope.rename(ref.name);
}
}
}

wrapClosure() {
Expand Down
@@ -0,0 +1,7 @@
for (let a, { b } = {};;) {
let a, { b } = {};

{
let a, { b } = {};
}
}
@@ -0,0 +1,3 @@
{
"plugins": ["transform-destructuring", "transform-block-scoping"]
}
@@ -0,0 +1,11 @@
for (var a, _ref = {}, b = _ref.b;;) {
var _a = void 0,
_ref2 = {},
_b = _ref2.b;

{
var _a2 = void 0,
_ref3 = {},
_b2 = _ref3.b;
}
}
@@ -0,0 +1,8 @@
for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);

{
let i = "hello";
}
}
@@ -0,0 +1,7 @@
for (var i = 0; i < 3; i++) {
var _i = 'abc';
console.log(_i);
{
var _i2 = "hello";
}
}

0 comments on commit 0d9e77f

Please sign in to comment.