From 3bd3dee4138db8d6d980f5746ffc5c3c6448f98c Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Thu, 8 Sep 2022 10:37:38 +0300 Subject: [PATCH] fix(50654): remove the entire import require call instead of the name --- src/services/refactors/moveToNewFile.ts | 8 ++++- .../fourslash/moveToNewFile_requireImport1.ts | 28 ++++++++++++++++ .../fourslash/moveToNewFile_requireImport2.ts | 33 +++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/moveToNewFile_requireImport1.ts create mode 100644 tests/cases/fourslash/moveToNewFile_requireImport2.ts 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; +} +`, + }, +});