Skip to content

Commit d2c9d6c

Browse files
dragomirtitianweswigham
authored andcommitted
Improved parameter names for call signatures resulting from unions when only one parameter name is available. (#32056)
1 parent fbdbb14 commit d2c9d6c

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

src/compiler/checker.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7247,9 +7247,11 @@ namespace ts {
72477247
}
72487248

72497249
function combineUnionParameters(left: Signature, right: Signature) {
7250-
const longest = getParameterCount(left) >= getParameterCount(right) ? left : right;
7250+
const leftCount = getParameterCount(left);
7251+
const rightCount = getParameterCount(right);
7252+
const longest = leftCount >= rightCount ? left : right;
72517253
const shorter = longest === left ? right : left;
7252-
const longestCount = getParameterCount(longest);
7254+
const longestCount = longest === left ? leftCount : rightCount;
72537255
const eitherHasEffectiveRest = (hasEffectiveRestParameter(left) || hasEffectiveRestParameter(right));
72547256
const needsExtraRestElement = eitherHasEffectiveRest && !hasEffectiveRestParameter(longest);
72557257
const params = new Array<Symbol>(longestCount + (needsExtraRestElement ? 1 : 0));
@@ -7259,11 +7261,16 @@ namespace ts {
72597261
const unionParamType = getIntersectionType([longestParamType, shorterParamType]);
72607262
const isRestParam = eitherHasEffectiveRest && !needsExtraRestElement && i === (longestCount - 1);
72617263
const isOptional = i >= getMinArgumentCount(longest) && i >= getMinArgumentCount(shorter);
7262-
const leftName = getParameterNameAtPosition(left, i);
7263-
const rightName = getParameterNameAtPosition(right, i);
7264+
const leftName = i >= leftCount ? undefined : getParameterNameAtPosition(left, i);
7265+
const rightName = i >= rightCount ? undefined : getParameterNameAtPosition(right, i);
7266+
7267+
const paramName = leftName === rightName ? leftName :
7268+
!leftName ? rightName :
7269+
!rightName ? leftName :
7270+
undefined;
72647271
const paramSymbol = createSymbol(
72657272
SymbolFlags.FunctionScopedVariable | (isOptional && !isRestParam ? SymbolFlags.Optional : 0),
7266-
leftName === rightName ? leftName : `arg${i}` as __String
7273+
paramName || `arg${i}` as __String
72677274
);
72687275
paramSymbol.type = isRestParam ? createArrayType(unionParamType) : unionParamType;
72697276
params[i] = paramSymbol;

tests/cases/fourslash/calledUnionsOfDissimilarTyeshaveGoodDisplay.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@
3434
//// ;
3535
////
3636
////callableThing4(/*4*/);
37+
////
38+
////declare const callableThing5:
39+
//// | (<U>(a1: U) => void)
40+
//// | (() => void)
41+
//// ;
42+
////
43+
////callableThing5(/*5*/1)
44+
////
3745

3846
verify.signatureHelp({
3947
marker: "1",
@@ -50,4 +58,8 @@ verify.signatureHelp({
5058
{
5159
marker: "4",
5260
text: "callableThing4(arg0: { x: number; } & { y: number; } & { z: number; } & { u: number; } & { v: number; } & { w: number; }): void"
61+
},
62+
{
63+
marker: "5",
64+
text: "callableThing5(a1: number): void"
5365
});

0 commit comments

Comments
 (0)