From d378dd4bab38bb3fb23dbc6deb1d53ccfbcf0365 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Mon, 10 Jul 2023 15:31:19 -0700 Subject: [PATCH 1/2] fix for quotes --- src/services/codefixes/importFixes.ts | 13 ++++++++++--- src/services/refactors/moveToFile.ts | 2 +- .../cases/fourslash/moveToFile_blankExistingFile.ts | 2 +- .../fourslash/moveToFile_differentDirectories2.ts | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 6e7f9916748b7..aa6006118c9a6 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 b595f6cdfa3d1..f8ec031971e36 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -238,7 +238,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 7cccbec7c47bc..370fa30b7edab 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_differentDirectories2.ts b/tests/cases/fourslash/moveToFile_differentDirectories2.ts index 5c03c2bb6cfe2..43aea215d6117 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; From a1feb336648a2a22f0e98950836efed8265d981e Mon Sep 17 00:00:00 2001 From: navya9singh Date: Tue, 11 Jul 2023 15:37:08 -0700 Subject: [PATCH 2/2] Merge main --- src/services/codefixes/importFixes.ts | 2 +- .../moveToFile_consistentQuoteStyle.ts | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/moveToFile_consistentQuoteStyle.ts diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 713d92d0419f0..61062173d3c6f 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,oldFileQuotePreference?: QuotePreference) => void; + writeFixes: (changeTracker: textChanges.ChangeTracker, oldFileQuotePreference?: QuotePreference) => void; } /** @internal */ diff --git a/tests/cases/fourslash/moveToFile_consistentQuoteStyle.ts b/tests/cases/fourslash/moveToFile_consistentQuoteStyle.ts new file mode 100644 index 0000000000000..969060b24f2c4 --- /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", + } +});