diff --git a/src/services/refactors/moveToNewFile.ts b/src/services/refactors/moveToNewFile.ts index 287178169e6c1..172944aa4bda1 100644 --- a/src/services/refactors/moveToNewFile.ts +++ b/src/services/refactors/moveToNewFile.ts @@ -402,7 +402,13 @@ namespace ts.refactor { switch (name.kind) { case SyntaxKind.Identifier: if (isUnused(name)) { - changes.delete(sourceFile, name); + if (varDecl.initializer && isRequireCall(varDecl.initializer, /*requireStringLiteralLikeArgument*/ true)) { + changes.delete(sourceFile, + isVariableDeclarationList(varDecl.parent) && length(varDecl.parent.declarations) === 1 ? varDecl.parent.parent : varDecl); + } + else { + changes.delete(sourceFile, name); + } } break; case SyntaxKind.ArrayBindingPattern: diff --git a/tests/cases/fourslash/moveToNewFile_requireImport1.ts b/tests/cases/fourslash/moveToNewFile_requireImport1.ts new file mode 100644 index 0000000000000..37fb2b7e1a44a --- /dev/null +++ b/tests/cases/fourslash/moveToNewFile_requireImport1.ts @@ -0,0 +1,28 @@ +/// + +// @allowJs: true + +// @filename: /a.js +////module.exports = 1; + +// @filename: /b.js +////var a = require("./a"); +////[|function f() { +//// a; +////}|] + +verify.noErrors(); + +verify.moveToNewFile({ + newFileContents: { + "/b.js": "", + + "/f.js": +`var a = require("./a"); + +function f() { + a; +} +`, + }, +}); diff --git a/tests/cases/fourslash/moveToNewFile_requireImport2.ts b/tests/cases/fourslash/moveToNewFile_requireImport2.ts new file mode 100644 index 0000000000000..ebd39990ffab9 --- /dev/null +++ b/tests/cases/fourslash/moveToNewFile_requireImport2.ts @@ -0,0 +1,33 @@ +/// + +// @allowJs: true + +// @filename: /a.js +////module.exports = 1; + +// @filename: /b.js +////var a = require("./a"), +//// b = require("./a"), +//// c = require("./a"); +////[|function f() { +//// b; +////}|] + +verify.noErrors(); + +verify.moveToNewFile({ + newFileContents: { + "/b.js": +`var a = require("./a"), + c = require("./a"); +`, + + "/f.js": +`var b = require("./a"); + +function f() { + b; +} +`, + }, +});