diff --git a/src/services/refactors/helpers.ts b/src/services/refactors/helpers.ts index 9779b8559f89b..2f748dc69d202 100644 --- a/src/services/refactors/helpers.ts +++ b/src/services/refactors/helpers.ts @@ -81,8 +81,14 @@ export function addTargetFileImports( importAdder.addVerbatimImport(Debug.checkDefined(declaration ?? findAncestor(symbol.declarations?.[0], isAnyImportOrRequireStatement))); } else if (targetSymbol.parent === undefined) { - Debug.assert(declaration !== undefined, "expected module symbol to have a declaration"); - importAdder.addImportForModuleSymbol(symbol, isValidTypeOnlyUseSite, declaration); + if (targetSymbol.flags & SymbolFlags.Module) { + Debug.assert(declaration !== undefined, "expected module symbol to have a declaration"); + importAdder.addImportForModuleSymbol(symbol, isValidTypeOnlyUseSite, declaration); + } + else { + // If the target symbol has no parent but isn't a module, fall back to verbatim import + importAdder.addVerbatimImport(Debug.checkDefined(declaration ?? findAncestor(symbol.declarations?.[0], isAnyImportOrRequireStatement))); + } } else { importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration); diff --git a/tests/cases/fourslash/moveToNewFileSymbolWithoutParent.ts b/tests/cases/fourslash/moveToNewFileSymbolWithoutParent.ts new file mode 100644 index 0000000000000..ea38f3227bff3 --- /dev/null +++ b/tests/cases/fourslash/moveToNewFileSymbolWithoutParent.ts @@ -0,0 +1,27 @@ +/// + +// Test case to reproduce the debug assertion failure +// When moving symbols that don't have a parent but aren't modules +// This reproduces the scenario with symbols exported separately from declaration + +// @Filename: /lib.ts +////const Component = function() { return "component"; }; +////export { Component }; + +// @Filename: /main.ts +////import { Component } from "./lib"; +////[|function useComponent() { +//// return Component(); +////}|] + +verify.moveToNewFile({ + newFileContents: { + "/main.ts": ``, + "/useComponent.ts": `import { Component } from "./lib"; + +function useComponent() { + return Component(); +} +` + } +}); \ No newline at end of file