diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index fb6b5df8fcc..61062173d3c 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -194,7 +194,7 @@ export interface ImportAdder { hasFixes(): boolean; addImportFromDiagnostic: (diagnostic: DiagnosticWithLocation, context: CodeFixContextBase) => void; addImportFromExportedSymbol: (exportedSymbol: Symbol, isValidTypeOnlyUseSite?: boolean) => void; - writeFixes: (changeTracker: textChanges.ChangeTracker) => void; + writeFixes: (changeTracker: textChanges.ChangeTracker, oldFileQuotePreference?: QuotePreference) => void; } /** @internal */ @@ -345,8 +345,15 @@ function createImportAdderWorker(sourceFile: SourceFile, program: Program, useAu } } - function writeFixes(changeTracker: textChanges.ChangeTracker) { - const quotePreference = getQuotePreference(sourceFile, preferences); + function writeFixes(changeTracker: textChanges.ChangeTracker, oldFileQuotePreference?: QuotePreference) { + let quotePreference: QuotePreference; + if (sourceFile.imports.length === 0 && oldFileQuotePreference !== undefined) { + // If the target file has no imports, we must use the same quote preference as the file we are importing from. + quotePreference = oldFileQuotePreference; + } + else { + quotePreference = getQuotePreference(sourceFile, preferences); + } for (const fix of addToNamespace) { addNamespaceQualifier(changeTracker, sourceFile, fix); } diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 5c7abdd314e..6bc5670e2cf 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -254,7 +254,7 @@ function getNewStatementsAndRemoveFromOldFile( } } if (importAdder) { - importAdder.writeFixes(changes); + importAdder.writeFixes(changes, quotePreference); } if (imports.length && body.length) { return [ diff --git a/tests/cases/fourslash/moveToFile_blankExistingFile.ts b/tests/cases/fourslash/moveToFile_blankExistingFile.ts index 7cccbec7c47..370fa30b7ed 100644 --- a/tests/cases/fourslash/moveToFile_blankExistingFile.ts +++ b/tests/cases/fourslash/moveToFile_blankExistingFile.ts @@ -22,7 +22,7 @@ verify.moveToFile({ import { p } from './a'; -import { b } from "./other"; +import { b } from './other'; const y: Date = p + b; diff --git a/tests/cases/fourslash/moveToFile_consistentQuoteStyle.ts b/tests/cases/fourslash/moveToFile_consistentQuoteStyle.ts new file mode 100644 index 00000000000..969060b24f2 --- /dev/null +++ b/tests/cases/fourslash/moveToFile_consistentQuoteStyle.ts @@ -0,0 +1,36 @@ + +/// + +// @Filename: /bar.ts +////export const tt = 2; + +// @Filename: /a.ts +////import { b } from './other'; +////const a = 1; +////[|const c = a + b;|] + +// @Filename: /other.ts +////export const b = 2; + + +verify.moveToFile({ + newFileContents: { + "/a.ts": +`export const a = 1; +`, + + "/bar.ts": +`import { a } from './a'; + +import { b } from './other'; + +export const tt = 2; +const c = a + b; +`, + }, + interactiveRefactorArguments: { targetFile: "/bar.ts" }, + + preferences: { + quotePreference: "single", + } +}); diff --git a/tests/cases/fourslash/moveToFile_differentDirectories2.ts b/tests/cases/fourslash/moveToFile_differentDirectories2.ts index 5c03c2bb6cf..43aea215d61 100644 --- a/tests/cases/fourslash/moveToFile_differentDirectories2.ts +++ b/tests/cases/fourslash/moveToFile_differentDirectories2.ts @@ -25,7 +25,7 @@ y;`, "/src/dir2/bar.ts": `import { a } from '../dir1/a'; -import { b } from "../dir1/other"; +import { b } from '../dir1/other'; export const y = b + a;