diff --git a/packages/metro-transform-plugins/src/__tests__/constant-folding-plugin-test.js b/packages/metro-transform-plugins/src/__tests__/constant-folding-plugin-test.js index b38e9785d0..26a235f9a8 100644 --- a/packages/metro-transform-plugins/src/__tests__/constant-folding-plugin-test.js +++ b/packages/metro-transform-plugins/src/__tests__/constant-folding-plugin-test.js @@ -346,4 +346,20 @@ describe('constant expressions', () => { compare([constantFoldingPlugin], nonChanged, nonChanged); }); + + it('does not confuse function identifiers with variables in inner scope', () => { + const code = ` + export function foo() { + let foo; + } + `; + + const expected = ` + export function foo() { + let foo; + } + `; + + compare([constantFoldingPlugin], code, expected); + }); }); diff --git a/packages/metro-transform-plugins/src/constant-folding-plugin.js b/packages/metro-transform-plugins/src/constant-folding-plugin.js index 404829ded0..510b1ba34d 100644 --- a/packages/metro-transform-plugins/src/constant-folding-plugin.js +++ b/packages/metro-transform-plugins/src/constant-folding-plugin.js @@ -54,7 +54,7 @@ function constantFoldingPlugin(context: {types: Types, ...}): Visitors { const FunctionDeclaration = { exit(path, state): void { const binding = - path.node.id != null && path.scope.getBinding(path.node.id.name); + path.node.id != null && path.scope.parent.getBinding(path.node.id.name); if (binding && !binding.referenced) { state.stripped = true;