From 739d729ecce60771c23723aad932ab35a34df82d Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 30 Jan 2025 13:49:26 -0800 Subject: [PATCH] [moveToFile] Fix symbols with empty `declarations` being treated as importable (#61084) --- src/services/refactors/moveToFile.ts | 2 +- tests/cases/fourslash/moveToFile_undefined.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/moveToFile_undefined.ts diff --git a/src/services/refactors/moveToFile.ts b/src/services/refactors/moveToFile.ts index 6245fe4903dcc..18fd421d6d0ee 100644 --- a/src/services/refactors/moveToFile.ts +++ b/src/services/refactors/moveToFile.ts @@ -886,7 +886,7 @@ export function getUsageInfo(oldFile: SourceFile, toMove: readonly Statement[], const unusedImportsFromOldFile = new Set(); for (const statement of toMove) { forEachReference(statement, checker, enclosingRange, (symbol, isValidTypeOnlyUseSite) => { - if (!symbol.declarations) { + if (!some(symbol.declarations)) { return; } if (existingTargetLocals.has(skipAlias(symbol, checker))) { diff --git a/tests/cases/fourslash/moveToFile_undefined.ts b/tests/cases/fourslash/moveToFile_undefined.ts new file mode 100644 index 0000000000000..42ce03ec5abfe --- /dev/null +++ b/tests/cases/fourslash/moveToFile_undefined.ts @@ -0,0 +1,15 @@ +/// + +// @module: esnext +// @moduleResolution: bundler + +// @Filename: /orig.ts +//// [|export const variable = undefined;|] + +verify.moveToFile({ + newFileContents: { + "/orig.ts": "", + "/new.ts": "export const variable = undefined;\n" + }, + interactiveRefactorArguments: { targetFile: "/new.ts" }, +});