diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d9c2d01b..495bc3035 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel - [`no-unused-modules`]: Revert "[flow] `no-unused-modules`: add flow type support" ([#1770], thanks [@Hypnosphi]) - TypeScript: Add nested namespace handling ([#1763], thanks [@julien1619]) - [`namespace`]/`ExportMap`: Fix interface declarations for TypeScript ([#1764], thanks [@julien1619]) +- [`no-unused-modules`]: avoid order-dependence ([#1744], thanks [@darkartur]) ### Changed - TypeScript config: Disable [`named`][] ([#1726], thanks [@astorije]) @@ -688,6 +689,7 @@ for info on changes for earlier releases. [#1770]: https://github.com/benmosher/eslint-plugin-import/pull/1770 [#1764]: https://github.com/benmosher/eslint-plugin-import/pull/1764 [#1763]: https://github.com/benmosher/eslint-plugin-import/pull/1763 +[#1744]: https://github.com/benmosher/eslint-plugin-import/pull/1744 [#1736]: https://github.com/benmosher/eslint-plugin-import/pull/1736 [#1726]: https://github.com/benmosher/eslint-plugin-import/pull/1726 [#1724]: https://github.com/benmosher/eslint-plugin-import/pull/1724 @@ -1174,3 +1176,4 @@ for info on changes for earlier releases. [@nickofthyme]: https://github.com/nickofthyme [@manuth]: https://github.com/manuth [@julien1619]: https://github.com/julien1619 +[@darkartur]: https://github.com/darkartur diff --git a/src/rules/no-unused-modules.js b/src/rules/no-unused-modules.js index 9d2d91a1b..25139b681 100644 --- a/src/rules/no-unused-modules.js +++ b/src/rules/no-unused-modules.js @@ -654,13 +654,12 @@ module.exports = { if (astNode.source) { resolvedPath = resolve(astNode.source.raw.replace(/('|")/g, ''), context) astNode.specifiers.forEach(specifier => { - let name - if (specifier.exported.name === DEFAULT) { - name = IMPORT_DEFAULT_SPECIFIER + const name = specifier.local.name + if (specifier.local.name === DEFAULT) { + newDefaultImports.add(resolvedPath) } else { - name = specifier.local.name + newImports.set(name, resolvedPath) } - newImports.set(name, resolvedPath) }) } } diff --git a/tests/files/no-unused-modules/renameDefault-2/ComponentA.js b/tests/files/no-unused-modules/renameDefault-2/ComponentA.js new file mode 100644 index 000000000..b4517920f --- /dev/null +++ b/tests/files/no-unused-modules/renameDefault-2/ComponentA.js @@ -0,0 +1 @@ +export default function ComponentA() {} diff --git a/tests/files/no-unused-modules/renameDefault-2/ComponentB.js b/tests/files/no-unused-modules/renameDefault-2/ComponentB.js new file mode 100644 index 000000000..72e0f2ee7 --- /dev/null +++ b/tests/files/no-unused-modules/renameDefault-2/ComponentB.js @@ -0,0 +1 @@ +export default function ComponentB() {} diff --git a/tests/files/no-unused-modules/renameDefault-2/components.js b/tests/files/no-unused-modules/renameDefault-2/components.js new file mode 100644 index 000000000..5a72952a3 --- /dev/null +++ b/tests/files/no-unused-modules/renameDefault-2/components.js @@ -0,0 +1,2 @@ +export { default as ComponentA } from "./ComponentA"; +export { default as ComponentB } from "./ComponentB"; diff --git a/tests/files/no-unused-modules/renameDefault-2/usage.js b/tests/files/no-unused-modules/renameDefault-2/usage.js new file mode 100644 index 000000000..7298baa55 --- /dev/null +++ b/tests/files/no-unused-modules/renameDefault-2/usage.js @@ -0,0 +1 @@ +import { ComponentA, ComponentB } from './components' diff --git a/tests/files/no-unused-modules/renameDefault/Component.js b/tests/files/no-unused-modules/renameDefault/Component.js new file mode 100644 index 000000000..c6be8faf0 --- /dev/null +++ b/tests/files/no-unused-modules/renameDefault/Component.js @@ -0,0 +1 @@ +export default function Component() {} diff --git a/tests/files/no-unused-modules/renameDefault/components.js b/tests/files/no-unused-modules/renameDefault/components.js new file mode 100644 index 000000000..4a877cb1f --- /dev/null +++ b/tests/files/no-unused-modules/renameDefault/components.js @@ -0,0 +1 @@ +export { default as Component } from './Component' diff --git a/tests/files/no-unused-modules/renameDefault/usage.js b/tests/files/no-unused-modules/renameDefault/usage.js new file mode 100644 index 000000000..6ee988988 --- /dev/null +++ b/tests/files/no-unused-modules/renameDefault/usage.js @@ -0,0 +1 @@ +import { Component } from './components' diff --git a/tests/src/rules/no-unused-modules.js b/tests/src/rules/no-unused-modules.js index a066dd33f..ef2d3e66c 100644 --- a/tests/src/rules/no-unused-modules.js +++ b/tests/src/rules/no-unused-modules.js @@ -442,6 +442,31 @@ ruleTester.run('no-unused-modules', rule, { invalid: [], }) +describe('renameDefault', () => { + ruleTester.run('no-unused-modules', rule, { + valid: [ + test({ options: unusedExportsOptions, + code: 'export { default as Component } from "./Component"', + filename: testFilePath('./no-unused-modules/renameDefault/components.js')}), + test({ options: unusedExportsOptions, + code: 'export default function Component() {}', + filename: testFilePath('./no-unused-modules/renameDefault/Component.js')}), + ], + invalid: [], + }) + ruleTester.run('no-unused-modules', rule, { + valid: [ + test({ options: unusedExportsOptions, + code: 'export { default as ComponentA } from "./ComponentA";export { default as ComponentB } from "./ComponentB";', + filename: testFilePath('./no-unused-modules/renameDefault-2/components.js')}), + test({ options: unusedExportsOptions, + code: 'export default function ComponentA() {};', + filename: testFilePath('./no-unused-modules/renameDefault-2/ComponentA.js')}), + ], + invalid: [], + }) +}) + describe('test behaviour for new file', () => { before(() => { fs.writeFileSync(testFilePath('./no-unused-modules/file-added-0.js'), '', {encoding: 'utf8'})