From 8e80f8bd72519a00ccc2c7ef364a1ed5b3063db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Fri, 25 Nov 2022 10:30:54 +0100 Subject: [PATCH] Fix block scoped vars shadowing globals --- .../src/index.ts | 1 + .../general/block-not-shadow-global/input.js | 15 ++++++++++ .../general/block-not-shadow-global/output.js | 28 +++++++++++++++++++ .../exec.js | 0 .../input.js | 0 .../output.js | 0 6 files changed, 44 insertions(+) create mode 100644 packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-global/input.js create mode 100644 packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-global/output.js rename packages/babel-plugin-transform-block-scoping/test/fixtures/general/{block-outer-variable => block-not-shadow-outer-variable}/exec.js (100%) rename packages/babel-plugin-transform-block-scoping/test/fixtures/general/{block-outer-variable => block-not-shadow-outer-variable}/input.js (100%) rename packages/babel-plugin-transform-block-scoping/test/fixtures/general/{block-outer-variable => block-not-shadow-outer-variable}/output.js (100%) diff --git a/packages/babel-plugin-transform-block-scoping/src/index.ts b/packages/babel-plugin-transform-block-scoping/src/index.ts index 0a2632bce2b8..9f664f3efc2f 100644 --- a/packages/babel-plugin-transform-block-scoping/src/index.ts +++ b/packages/babel-plugin-transform-block-scoping/src/index.ts @@ -202,6 +202,7 @@ function transformBlockScopedVariable( // a nested scope and thus we don't need to assume that it // may be declared (but not registered yet) in an upper one. blockScope.parent.hasBinding(name, { noUids: true }) || + blockScope.parent.hasGlobal(name) || (isProgramScope && varScope.hasGlobal(name)) ) { newName = blockScope.generateUid(name); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-global/input.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-global/input.js new file mode 100644 index 000000000000..d0d3db172019 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-global/input.js @@ -0,0 +1,15 @@ +{ a; } +{ let a; } + +(function () { + { b; } + { let b; } +})(); + +{ c = 0; } +{ let c; } + +(function () { + { d = 0; } + { let d; } +}) \ No newline at end of file diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-global/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-global/output.js new file mode 100644 index 000000000000..eb2ad37b81c8 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-global/output.js @@ -0,0 +1,28 @@ +{ + a; +} +{ + var _a; +} +(function () { + { + b; + } + { + var _b; + } +})(); +{ + c = 0; +} +{ + var _c; +} +(function () { + { + d = 0; + } + { + var _d; + } +}); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-outer-variable/exec.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-outer-variable/exec.js similarity index 100% rename from packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-outer-variable/exec.js rename to packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-outer-variable/exec.js diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-outer-variable/input.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-outer-variable/input.js similarity index 100% rename from packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-outer-variable/input.js rename to packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-outer-variable/input.js diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-outer-variable/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-outer-variable/output.js similarity index 100% rename from packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-outer-variable/output.js rename to packages/babel-plugin-transform-block-scoping/test/fixtures/general/block-not-shadow-outer-variable/output.js