diff --git a/src/ast/scopes/ModuleScope.js b/src/ast/scopes/ModuleScope.js index 1da09aae483..ec9b1c157b8 100644 --- a/src/ast/scopes/ModuleScope.js +++ b/src/ast/scopes/ModuleScope.js @@ -20,8 +20,18 @@ export default class ModuleScope extends Scope { forOwn( this.module.imports, specifier => { if ( specifier.module.isExternal ) return; + const addDeclaration = declaration => { + if ( declaration.isNamespace ) { + declaration.module.getExports().forEach( name => { + addDeclaration( declaration.module.traceExport(name) ); + }); + } + + names.add( declaration.name ); + }; + specifier.module.getExports().forEach( name => { - names.add( specifier.module.traceExport(name).name ); + addDeclaration( specifier.module.traceExport(name) ); }); if ( specifier.name !== '*' ) { diff --git a/test/function/samples/deshadowed-namespaced-import/_config.js b/test/function/samples/deshadowed-namespaced-import/_config.js new file mode 100644 index 00000000000..caf19b703cc --- /dev/null +++ b/test/function/samples/deshadowed-namespaced-import/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: '#1488' +}; \ No newline at end of file diff --git a/test/function/samples/deshadowed-namespaced-import/foo.js b/test/function/samples/deshadowed-namespaced-import/foo.js new file mode 100644 index 00000000000..ab9d11e7d27 --- /dev/null +++ b/test/function/samples/deshadowed-namespaced-import/foo.js @@ -0,0 +1,2 @@ +import * as ns from './ns.js'; +export { ns }; \ No newline at end of file diff --git a/test/function/samples/deshadowed-namespaced-import/main.js b/test/function/samples/deshadowed-namespaced-import/main.js new file mode 100644 index 00000000000..3178bf05289 --- /dev/null +++ b/test/function/samples/deshadowed-namespaced-import/main.js @@ -0,0 +1,10 @@ +import { ns } from './foo.js'; + +assert.equal((() => { + function foo() { + return ns.foo(); + } + + return foo(); +})(), 42); + diff --git a/test/function/samples/deshadowed-namespaced-import/ns.js b/test/function/samples/deshadowed-namespaced-import/ns.js new file mode 100644 index 00000000000..19ae356d4ec --- /dev/null +++ b/test/function/samples/deshadowed-namespaced-import/ns.js @@ -0,0 +1,3 @@ +export function foo() { + return 42; +} \ No newline at end of file