diff --git a/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-declaration/actual.js b/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-declaration/actual.js new file mode 100644 index 0000000000..3820c79860 --- /dev/null +++ b/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-declaration/actual.js @@ -0,0 +1,3 @@ +function B() { + const B = 1; +} diff --git a/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-declaration/expected.js b/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-declaration/expected.js new file mode 100644 index 0000000000..cda38be6e6 --- /dev/null +++ b/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-declaration/expected.js @@ -0,0 +1,3 @@ +function B() { + var B = 1; +} diff --git a/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-expression/actual.js b/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-expression/actual.js new file mode 100644 index 0000000000..584ee53cce --- /dev/null +++ b/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-expression/actual.js @@ -0,0 +1,3 @@ +(function B() { + const B = 1; +}); diff --git a/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-expression/expected.js b/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-expression/expected.js new file mode 100644 index 0000000000..36d2997a5f --- /dev/null +++ b/packages/babel-plugin-check-es2015-constants/test/fixtures/general/shadowing-function-expression/expected.js @@ -0,0 +1,3 @@ +(function B() { + var B = 1; +}); diff --git a/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/issue-4946/actual.js b/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/issue-4946/actual.js new file mode 100644 index 0000000000..b2f5b4fc4e --- /dev/null +++ b/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/issue-4946/actual.js @@ -0,0 +1,3 @@ +(function foo() { + let foo = true; +}); diff --git a/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/issue-4946/expected.js b/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/issue-4946/expected.js new file mode 100644 index 0000000000..2ad4b5a08d --- /dev/null +++ b/packages/babel-plugin-transform-es2015-block-scoping/test/fixtures/general/issue-4946/expected.js @@ -0,0 +1,3 @@ +(function foo() { + var foo = true; +}); diff --git a/packages/babel-traverse/src/scope/index.js b/packages/babel-traverse/src/scope/index.js index b2cdc4238e..8e5950bf28 100644 --- a/packages/babel-traverse/src/scope/index.js +++ b/packages/babel-traverse/src/scope/index.js @@ -346,6 +346,10 @@ export default class Scope { // ignore parameters if (kind === "param") return; + // Ignore existing binding if it's the name of the current function or + // class expression + if (local.kind === "local") return; + // ignore hoisted functions if there's also a local let if (kind === "hoisted" && local.kind === "let") return; @@ -519,6 +523,7 @@ export default class Scope { for (const name in ids) { for (const id of (ids[name]: Array)) { let local = this.getOwnBinding(name); + if (local) { // same identifier so continue safely as we're likely trying to register it // multiple times diff --git a/packages/babel-traverse/test/fixtures/regression/constant-shadows-function-name/actual.js b/packages/babel-traverse/test/fixtures/regression/constant-shadows-function-name/actual.js new file mode 100644 index 0000000000..f56e906e25 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/regression/constant-shadows-function-name/actual.js @@ -0,0 +1,8 @@ +let obj = { + foo: function foo() { + let foo = true; + console.log('foo ran'); + } +}; + +obj.foo(); diff --git a/packages/babel-traverse/test/fixtures/regression/constant-shadows-function-name/expected.js b/packages/babel-traverse/test/fixtures/regression/constant-shadows-function-name/expected.js new file mode 100644 index 0000000000..1a47048c09 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/regression/constant-shadows-function-name/expected.js @@ -0,0 +1,7 @@ +let obj = { + foo: function foo() { + let foo = true; + console.log('foo ran'); + } +}; +obj.foo();