Skip to content

Commit d0646a6

Browse files
authored
Merge pull request #30084 from dragomirtitian/GH-26563
Improved argument description for parameters originating from tuples
2 parents 02963b4 + d433042 commit d0646a6

File tree

4 files changed

+59
-1
lines changed

4 files changed

+59
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ namespace ts {
232232
getResolvedSignatureForSignatureHelp: (node, candidatesOutArray, agumentCount) =>
233233
getResolvedSignatureWorker(node, candidatesOutArray, agumentCount, CheckMode.IsForSignatureHelp),
234234
getExpandedParameters,
235+
hasEffectiveRestParameter,
235236
getConstantValue: nodeIn => {
236237
const node = getParseTreeNode(nodeIn, canHaveConstantValue);
237238
return node ? getConstantValue(node) : undefined;

src/compiler/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3171,6 +3171,7 @@ namespace ts {
31713171
getResolvedSignature(node: CallLikeExpression, candidatesOutArray?: Signature[], argumentCount?: number): Signature | undefined;
31723172
/* @internal */ getResolvedSignatureForSignatureHelp(node: CallLikeExpression, candidatesOutArray?: Signature[], argumentCount?: number): Signature | undefined;
31733173
/* @internal */ getExpandedParameters(sig: Signature): ReadonlyArray<Symbol>;
3174+
/* @internal */ hasEffectiveRestParameter(sig: Signature): boolean;
31743175
getSignatureFromDeclaration(declaration: SignatureDeclaration): Signature | undefined;
31753176
isImplementationOfOverload(node: SignatureDeclaration): boolean | undefined;
31763177
isUndefinedSymbol(symbol: Symbol): boolean;

src/services/signatureHelp.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ namespace ts.SignatureHelp {
566566
}
567567

568568
function itemInfoForParameters(candidateSignature: Signature, checker: TypeChecker, enclosingDeclaration: Node, sourceFile: SourceFile): SignatureHelpItemInfo {
569-
const isVariadic = candidateSignature.hasRestParameter;
569+
const isVariadic = checker.hasEffectiveRestParameter(candidateSignature);
570570
const printer = createPrinter({ removeComments: true });
571571
const typeParameterParts = mapToDisplayParts(writer => {
572572
if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) {
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/// <reference path='fourslash.ts'/>
2+
3+
4+
//// function fnTest(str: string, num: number) { }
5+
//// declare function wrap<A extends any[], R>(fn: (...a: A) => R) : (...a: A) => R;
6+
//// var fnWrapped = wrap(fnTest);
7+
//// fnWrapped/*3*/(/*1*/'', /*2*/5);
8+
//// function fnTestVariadic (str: string, ...num: number[]) { }
9+
//// var fnVariadicWrapped = wrap(fnTestVariadic);
10+
//// fnVariadicWrapped/*4*/(/*5*/'', /*6*/5);
11+
//// function fnNoParams () { }
12+
//// var fnNoParamsWrapped = wrap(fnNoParams);
13+
//// fnNoParamsWrapped/*7*/(/*8*/);
14+
15+
verify.quickInfoAt("3", "var fnWrapped: (str: string, num: number) => void");
16+
verify.signatureHelp(
17+
{
18+
marker: "1",
19+
text: "fnWrapped(str: string, num: number): void",
20+
parameterCount: 2,
21+
parameterName: "str",
22+
parameterSpan: "str: string",
23+
},
24+
{
25+
marker: "2",
26+
parameterName: "num",
27+
parameterSpan: "num: number",
28+
},
29+
);
30+
31+
verify.quickInfoAt("4", "var fnVariadicWrapped: (str: string, ...num: number[]) => void");
32+
verify.signatureHelp(
33+
{
34+
marker: "5",
35+
text: "fnVariadicWrapped(str: string, ...num: number[]): void",
36+
parameterCount: 2,
37+
parameterName: "str",
38+
parameterSpan: "str: string",
39+
isVariadic: true,
40+
},
41+
{
42+
marker: "6",
43+
parameterName: "num",
44+
parameterSpan: "...num: number[]",
45+
isVariadic: true,
46+
},
47+
);
48+
49+
verify.quickInfoAt("7", "var fnNoParamsWrapped: () => void");
50+
verify.signatureHelp(
51+
{
52+
marker: "8",
53+
text: "fnNoParamsWrapped(): void",
54+
parameterCount: 0,
55+
}
56+
);

0 commit comments

Comments
 (0)