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);