From 59c91f6ce970d2bb9f70f68e1b34bdfd9935d440 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Wed, 3 Aug 2022 23:56:42 +0300 Subject: [PATCH] fix(50077): skip convertOverloadListToSingleSignature refactoring if position is in function body (#50093) --- .../convertOverloadListToSingleSignature.ts | 4 ++++ .../refactorOverloadListToSingleSignature9.ts | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 tests/cases/fourslash/refactorOverloadListToSingleSignature9.ts diff --git a/src/services/refactors/convertOverloadListToSingleSignature.ts b/src/services/refactors/convertOverloadListToSingleSignature.ts index 064db9347ca..a4beb817904 100644 --- a/src/services/refactors/convertOverloadListToSingleSignature.ts +++ b/src/services/refactors/convertOverloadListToSingleSignature.ts @@ -185,6 +185,10 @@ ${newComment.split("\n").map(c => ` * ${c}`).join("\n")} if (!containingDecl) { return; } + if (isFunctionLikeDeclaration(containingDecl) && containingDecl.body && rangeContainsPosition(containingDecl.body, startPosition)) { + return; + } + const checker = program.getTypeChecker(); const signatureSymbol = containingDecl.symbol; if (!signatureSymbol) { diff --git a/tests/cases/fourslash/refactorOverloadListToSingleSignature9.ts b/tests/cases/fourslash/refactorOverloadListToSingleSignature9.ts new file mode 100644 index 00000000000..c07f2883434 --- /dev/null +++ b/tests/cases/fourslash/refactorOverloadListToSingleSignature9.ts @@ -0,0 +1,22 @@ +/// + +/////*a1*/function foo(a: string): void; +/////*a2*/function foo(a: number): void;/*b2*/ +/////*a3*/function foo(a: number | string): void/*b3*/ /*a4*/{ +//// /*a5*/console.log(1);/*b5*/ +////}/*b4*//*b1*/ + +goTo.select("a1", "b1"); +verify.refactorAvailable("Convert overload list to single signature", "Convert overload list to single signature", ts.Diagnostics.Convert_overload_list_to_single_signature.message); + +goTo.select("a2", "b2"); +verify.refactorAvailable("Convert overload list to single signature", "Convert overload list to single signature", ts.Diagnostics.Convert_overload_list_to_single_signature.message); + +goTo.select("a3", "b3"); +verify.refactorAvailable("Convert overload list to single signature", "Convert overload list to single signature", ts.Diagnostics.Convert_overload_list_to_single_signature.message); + +goTo.select("a4", "b4"); +verify.not.refactorAvailable("Convert overload list to single signature", "Convert overload list to single signature", ts.Diagnostics.Convert_overload_list_to_single_signature.message); + +goTo.select("a5", "b5"); +verify.not.refactorAvailable("Convert overload list to single signature", "Convert overload list to single signature", ts.Diagnostics.Convert_overload_list_to_single_signature.message);