diff --git a/src/services/refactors/helpers.ts b/src/services/refactors/helpers.ts index 9779b8559f8..8fc99f2794e 100644 --- a/src/services/refactors/helpers.ts +++ b/src/services/refactors/helpers.ts @@ -75,18 +75,18 @@ export function addTargetFileImports( * but sometimes it fails because of unresolved imports from files, or when a source file is not available for the target file (in this case when creating a new file). * So in that case, fall back to copying the import verbatim. */ - importsToCopy.forEach(([isValidTypeOnlyUseSite, declaration], symbol) => { - const targetSymbol = skipAlias(symbol, checker); - if (checker.isUnknownSymbol(targetSymbol)) { - 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); - } - else { - importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration); - } + importsToCopy.forEach(([isValidTypeOnlyUseSite, declaration], symbol) => { + const targetSymbol = skipAlias(symbol, checker); + if (checker.isUnknownSymbol(targetSymbol)) { + importAdder.addVerbatimImport(Debug.checkDefined(declaration ?? findAncestor(symbol.declarations?.[0], isAnyImportOrRequireStatement))); + } + else if (targetSymbol.parent === undefined && (targetSymbol.flags & SymbolFlags.Module)) { + Debug.assert(declaration !== undefined, "expected module symbol to have a declaration"); + importAdder.addImportForModuleSymbol(symbol, isValidTypeOnlyUseSite, declaration); + } + else { + importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration); + } }); addImportsForMovedSymbols(targetFileImportsFromOldFile, oldFile.fileName, importAdder, program); diff --git a/tests/cases/fourslash/moveToNewFileReactComponent.ts b/tests/cases/fourslash/moveToNewFileReactComponent.ts index c3193b77722..d57027447d2 100644 --- a/tests/cases/fourslash/moveToNewFileReactComponent.ts +++ b/tests/cases/fourslash/moveToNewFileReactComponent.ts @@ -4,31 +4,36 @@ // @Filename: /Component.tsx ////import React from 'react'; +////import { useState } from 'react'; //// ////export const ComponentA = () => { -//// return
Component A
; +//// const [count, setCount] = useState(0); +//// return
setCount(count + 1)}>Component A: {count}
; ////}; //// ////[|export const ComponentB = () => { -//// return
Component B
; +//// const [text, setText] = useState('Hello'); +//// return
setText(e.target.value)} />{text}
; ////};|] verify.moveToNewFile({ newFileContents: { "/Component.tsx": `import React from 'react'; +import { useState } from 'react'; export const ComponentA = () => { - return
Component A
; -}; -`, + const [count, setCount] = useState(0); + return
setCount(count + 1)}>Component A: {count}
; +};`, "/ComponentB.tsx": `import React from 'react'; +import { useState } from 'react'; export const ComponentB = () => { - return
Component B
; -}; -`, + const [text, setText] = useState('Hello'); + return
setText(e.target.value)} />{text}
; +};`, }, }); \ No newline at end of file