diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 59355e2bec8..d0b52184031 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -439,18 +439,19 @@ namespace ts.codefix { function getSingleQuoteStyleFromExistingImports() { const firstModuleSpecifier = forEach(sourceFile.statements, node => { - switch (node.kind) { - case SyntaxKind.ImportDeclaration: - return (node).moduleSpecifier; - case SyntaxKind.ImportEqualsDeclaration: - const moduleReference = (node).moduleReference; - return moduleReference.kind === SyntaxKind.ExternalModuleReference ? moduleReference.expression : undefined; - case SyntaxKind.ExportDeclaration: - return (node).moduleSpecifier; + if (isImportDeclaration(node) || isExportDeclaration(node)) { + if (node.moduleSpecifier && isStringLiteral(node.moduleSpecifier)) { + return node.moduleSpecifier; + } + } + else if (isImportEqualsDeclaration(node)) { + if (isExternalModuleReference(node.moduleReference) && isStringLiteral(node.moduleReference.expression)) { + return node.moduleReference.expression; + } } }); - if (firstModuleSpecifier && isStringLiteral(firstModuleSpecifier)) { - return sourceFile.text.charCodeAt(skipTrivia(sourceFile.text, firstModuleSpecifier.pos)) === CharacterCodes.singleQuote; + if (firstModuleSpecifier) { + return sourceFile.text.charCodeAt(firstModuleSpecifier.getStart()) === CharacterCodes.singleQuote; } } diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFile6.ts b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle0.ts similarity index 72% rename from tests/cases/fourslash/importNameCodeFixNewImportFile6.ts rename to tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle0.ts index 421161e6563..6b5ef958e05 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportFile6.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle0.ts @@ -4,16 +4,15 @@ //// //// f1/*0*/();|] -// @Filename: module.ts +// @Filename: module1.ts //// export function f1() {} -//// export var v1 = 5; // @Filename: module2.ts //// export var v2 = 6; verify.importFixAtPosition([ `import { v2 } from './module2'; -import { f1 } from './module'; +import { f1 } from './module1'; f1();` ]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle1.ts b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle1.ts new file mode 100644 index 00000000000..a9a12c41958 --- /dev/null +++ b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle1.ts @@ -0,0 +1,18 @@ +/// + +//// [|import { v2 } from "./module2"; +//// +//// f1/*0*/();|] + +// @Filename: module1.ts +//// export function f1() {} + +// @Filename: module2.ts +//// export var v2 = 6; + +verify.importFixAtPosition([ +`import { v2 } from "./module2"; +import { f1 } from "./module1"; + +f1();` +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle2.ts b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle2.ts new file mode 100644 index 00000000000..c356e239ee8 --- /dev/null +++ b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle2.ts @@ -0,0 +1,18 @@ +/// + +//// [|import m2 = require('./module2'); +//// +//// f1/*0*/();|] + +// @Filename: module1.ts +//// export function f1() {} + +// @Filename: module2.ts +//// export var v2 = 6; + +verify.importFixAtPosition([ +`import m2 = require('./module2'); +import { f1 } from './module1'; + +f1();` +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle3.ts b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle3.ts new file mode 100644 index 00000000000..5fa9f6e2c9a --- /dev/null +++ b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyle3.ts @@ -0,0 +1,19 @@ +/// + +//// [|export { v2 } from './module2'; +//// +//// f1/*0*/();|] + +// @Filename: module1.ts +//// export function f1() {} + +// @Filename: module2.ts +//// export var v2 = 6; + +verify.importFixAtPosition([ +`import { f1 } from './module1'; + +export { v2 } from './module2'; + +f1();` +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyleMixed0.ts b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyleMixed0.ts new file mode 100644 index 00000000000..2f17780df7f --- /dev/null +++ b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyleMixed0.ts @@ -0,0 +1,23 @@ +/// + +//// [|import { v2 } from "./module2"; +//// import { v3 } from './module3'; +//// +//// f1/*0*/();|] + +// @Filename: module1.ts +//// export function f1() {} + +// @Filename: module2.ts +//// export var v2 = 6; + +// @Filename: module3.ts +//// export var v3 = 6; + +verify.importFixAtPosition([ +`import { v2 } from "./module2"; +import { v3 } from './module3'; +import { f1 } from "./module1"; + +f1();` +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyleMixed1.ts b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyleMixed1.ts new file mode 100644 index 00000000000..ec68b3be0d8 --- /dev/null +++ b/tests/cases/fourslash/importNameCodeFixNewImportFileQuoteStyleMixed1.ts @@ -0,0 +1,23 @@ +/// + +//// [|import { v2 } from './module2'; +//// import { v3 } from "./module3"; +//// +//// f1/*0*/();|] + +// @Filename: module1.ts +//// export function f1() {} + +// @Filename: module2.ts +//// export var v2 = 6; + +// @Filename: module3.ts +//// export var v3 = 6; + +verify.importFixAtPosition([ +`import { v2 } from './module2'; +import { v3 } from "./module3"; +import { f1 } from './module1'; + +f1();` +]);