From 1f95f2eae232b0b321f124618c9995b5b7f287e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Thu, 15 Aug 2019 17:10:07 -0400 Subject: [PATCH] fix: should not remove let binding even it is wrapped in closure Fixes #10339 --- .../src/index.js | 4 +--- .../test/fixtures/general/issue-10339/input.js | 4 ++++ .../fixtures/general/issue-10339/options.json | 3 +++ .../test/fixtures/general/issue-10339/output.js | 16 ++++++++++++++++ 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/input.js create mode 100644 packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/options.json create mode 100644 packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js diff --git a/packages/babel-plugin-transform-block-scoping/src/index.js b/packages/babel-plugin-transform-block-scoping/src/index.js index 50c254c848a8..35b8c3704556 100644 --- a/packages/babel-plugin-transform-block-scoping/src/index.js +++ b/packages/babel-plugin-transform-block-scoping/src/index.js @@ -453,9 +453,7 @@ class BlockScoping { if (binding.kind === "let" || binding.kind === "const") { binding.kind = "var"; - if (wrappedInClosure) { - scope.removeBinding(ref.name); - } else { + if (!wrappedInClosure) { scope.moveBindingTo(ref.name, parentScope); } } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/input.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/input.js new file mode 100644 index 000000000000..39b916698335 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/input.js @@ -0,0 +1,4 @@ +for (const {foo, ...bar} of {}) { + () => foo; + bar; +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/options.json b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/options.json new file mode 100644 index 000000000000..d829970edd1b --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-block-scoping", ["proposal-object-rest-spread", { "loose": true }]] +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js new file mode 100644 index 000000000000..397561aef9f6 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js @@ -0,0 +1,16 @@ +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + +var _loop = function (foo, bar) { + () => foo; + + bar; +}; + +for (var _ref of {}) { + var { + foo + } = _ref, + bar = _objectWithoutPropertiesLoose(_ref, ["foo"]); + + _loop(foo, bar); +}