From a1c969fe4801dd9db50f00c0825c420947de0862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=83=D1=80=20=D0=A3=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Sat, 2 May 2020 21:14:07 +0300 Subject: [PATCH] [Fix] `no-unused-modules`: avoid order-dependence Fixes #1743 --- CHANGELOG.md | 3 +++ src/rules/no-unused-modules.js | 9 +++---- .../renameDefault-2/ComponentA.js | 1 + .../renameDefault-2/ComponentB.js | 1 + .../renameDefault-2/components.js | 2 ++ .../renameDefault-2/usage.js | 1 + .../renameDefault/Component.js | 1 + .../renameDefault/components.js | 1 + .../no-unused-modules/renameDefault/usage.js | 1 + tests/src/rules/no-unused-modules.js | 25 +++++++++++++++++++ 10 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 tests/files/no-unused-modules/renameDefault-2/ComponentA.js create mode 100644 tests/files/no-unused-modules/renameDefault-2/ComponentB.js create mode 100644 tests/files/no-unused-modules/renameDefault-2/components.js create mode 100644 tests/files/no-unused-modules/renameDefault-2/usage.js create mode 100644 tests/files/no-unused-modules/renameDefault/Component.js create mode 100644 tests/files/no-unused-modules/renameDefault/components.js create mode 100644 tests/files/no-unused-modules/renameDefault/usage.js 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'})