From 9eb6d7bf40396b22fcddbb14ff2626e323701531 Mon Sep 17 00:00:00 2001 From: Chiawen Chen Date: Fri, 21 Feb 2020 12:18:22 +0800 Subject: [PATCH] [fix] `no-duplicates`: fix fixer on cases with default import --- src/rules/no-duplicates.js | 9 +++++++-- tests/src/rules/no-duplicates.js | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/rules/no-duplicates.js b/src/rules/no-duplicates.js index 69e5a23a02..ce586cd674 100644 --- a/src/rules/no-duplicates.js +++ b/src/rules/no-duplicates.js @@ -136,8 +136,13 @@ function getFix(first, rest, sourceCode) { fixes.push(fixer.insertTextBefore(closeBrace, specifiersText)) } } else if (!shouldAddDefault && openBrace == null && shouldAddSpecifiers) { - // `import './foo'` → `import {...} from './foo'` - fixes.push(fixer.insertTextAfter(firstToken, ` {${specifiersText}} from`)) + if (first.specifiers.length === 0) { + // `import './foo'` → `import {...} from './foo'` + fixes.push(fixer.insertTextAfter(firstToken, ` {${specifiersText}} from`)) + } else { + // `import def from './foo'` → `import def, {...} from './foo'` + fixes.push(fixer.insertTextAfter(first.specifiers[0], `, {${specifiersText}}`)) + } } else if (!shouldAddDefault && openBrace != null && closeBrace != null) { // `import {...} './foo'` → `import {..., ...} from './foo'` fixes.push(fixer.insertTextBefore(closeBrace, specifiersText)) diff --git a/tests/src/rules/no-duplicates.js b/tests/src/rules/no-duplicates.js index 468c7ab982..917d0e400e 100644 --- a/tests/src/rules/no-duplicates.js +++ b/tests/src/rules/no-duplicates.js @@ -168,6 +168,12 @@ ruleTester.run('no-duplicates', rule, { errors: ['\'./foo\' imported multiple times.', '\'./foo\' imported multiple times.'], }), + test({ + code: "import def from './foo'; import {x} from './foo'", + output: "import def, {x} from './foo'; ", + errors: ['\'./foo\' imported multiple times.', '\'./foo\' imported multiple times.'], + }), + test({ code: "import {x} from './foo'; import def from './foo'", output: "import def, {x} from './foo'; ",