diff --git a/src/services/refactors/moveToNewFile.ts b/src/services/refactors/moveToNewFile.ts index 91ebfc05075..5af9412241f 100644 --- a/src/services/refactors/moveToNewFile.ts +++ b/src/services/refactors/moveToNewFile.ts @@ -472,7 +472,7 @@ namespace ts.refactor { if (isInImport(decl)) { oldImportsNeededByNewFile.add(symbol); } - else if (isTopLevelDeclaration(decl) && !movedSymbols.has(symbol)) { + else if (isTopLevelDeclaration(decl) && sourceFileOfTopLevelDeclaration(decl) === oldFile && !movedSymbols.has(symbol)) { newFileImportsFromOldFile.add(symbol); } } @@ -614,7 +614,11 @@ namespace ts.refactor { interface TopLevelVariableDeclaration extends VariableDeclaration { parent: VariableDeclarationList & { parent: VariableStatement; }; } type TopLevelDeclaration = NonVariableTopLevelDeclaration | TopLevelVariableDeclaration; function isTopLevelDeclaration(node: Node): node is TopLevelDeclaration { - return isNonVariableTopLevelDeclaration(node) || isVariableDeclaration(node) && isSourceFile(node.parent.parent.parent); + return isNonVariableTopLevelDeclaration(node) && isSourceFile(node.parent) || isVariableDeclaration(node) && isSourceFile(node.parent.parent.parent); + } + + function sourceFileOfTopLevelDeclaration(node: TopLevelDeclaration): Node { + return isVariableDeclaration(node) ? node.parent.parent.parent : node.parent; } function isTopLevelDeclarationStatement(node: Node): node is TopLevelDeclarationStatement { diff --git a/tests/cases/fourslash/moveToNewFile.ts b/tests/cases/fourslash/moveToNewFile.ts index 8caa8538a13..9175e37889d 100644 --- a/tests/cases/fourslash/moveToNewFile.ts +++ b/tests/cases/fourslash/moveToNewFile.ts @@ -4,7 +4,7 @@ ////import './foo'; ////import { a, b, alreadyUnused } from './other'; ////const p = 0; -////[|const y = p + b;|] +////[|const y: Date = p + b;|] ////a; y; verify.moveToNewFile({ @@ -20,7 +20,7 @@ a; y;`, "/y.ts": `import { b } from './other'; import { p } from './a'; -export const y = p + b;`, +export const y: Date = p + b;`, }, preferences: {