Skip to content

Commit 28cc938

Browse files
authored
(signature help) type parameter lists are never variadic (#12112)
1 parent 9a9f45f commit 28cc938

File tree

4 files changed

+22
-2
lines changed

4 files changed

+22
-2
lines changed

src/harness/fourslash.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1026,7 +1026,7 @@ namespace FourSlash {
10261026
ts.displayPartsToString(help.suffixDisplayParts), expected);
10271027
}
10281028

1029-
public verifyCurrentParameterIsletiable(isVariable: boolean) {
1029+
public verifyCurrentParameterIsVariable(isVariable: boolean) {
10301030
const signature = this.getActiveSignatureHelpItem();
10311031
assert.isOk(signature);
10321032
assert.equal(isVariable, signature.isVariadic);
@@ -1053,6 +1053,10 @@ namespace FourSlash {
10531053
assert.equal(this.getActiveSignatureHelpItem().parameters.length, expectedCount);
10541054
}
10551055

1056+
public verifyCurrentSignatureHelpIsVariadic(expected: boolean) {
1057+
assert.equal(this.getActiveSignatureHelpItem().isVariadic, expected);
1058+
}
1059+
10561060
public verifyCurrentSignatureHelpDocComment(docComment: string) {
10571061
const actualDocComment = this.getActiveSignatureHelpItem().documentation;
10581062
assert.equal(ts.displayPartsToString(actualDocComment), docComment, this.assertionMessageAtLastKnownMarker("current signature help doc comment"));
@@ -3231,6 +3235,10 @@ namespace FourSlashInterface {
32313235
this.state.verifySignatureHelpCount(expected);
32323236
}
32333237

3238+
public signatureHelpCurrentArgumentListIsVariadic(expected: boolean) {
3239+
this.state.verifyCurrentSignatureHelpIsVariadic(expected);
3240+
}
3241+
32343242
public signatureHelpArgumentCountIs(expected: number) {
32353243
this.state.verifySignatureHelpArgumentCount(expected);
32363244
}

src/services/signatureHelp.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,9 @@ namespace ts.SignatureHelp {
557557
addRange(prefixDisplayParts, callTargetDisplayParts);
558558
}
559559

560+
let isVariadic: boolean;
560561
if (isTypeParameterList) {
562+
isVariadic = false; // type parameter lists are not variadic
561563
prefixDisplayParts.push(punctuationPart(SyntaxKind.LessThanToken));
562564
const typeParameters = candidateSignature.typeParameters;
563565
signatureHelpParameters = typeParameters && typeParameters.length > 0 ? map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray;
@@ -567,6 +569,7 @@ namespace ts.SignatureHelp {
567569
addRange(suffixDisplayParts, parameterParts);
568570
}
569571
else {
572+
isVariadic = candidateSignature.hasRestParameter;
570573
const typeParameterParts = mapToDisplayParts(writer =>
571574
typeChecker.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(candidateSignature.typeParameters, writer, invocation));
572575
addRange(prefixDisplayParts, typeParameterParts);
@@ -582,7 +585,7 @@ namespace ts.SignatureHelp {
582585
addRange(suffixDisplayParts, returnTypeParts);
583586

584587
return {
585-
isVariadic: candidateSignature.hasRestParameter,
588+
isVariadic,
586589
prefixDisplayParts,
587590
suffixDisplayParts,
588591
separatorDisplayParts: [punctuationPart(SyntaxKind.CommaToken), spacePart()],

tests/cases/fourslash/fourslash.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ declare namespace FourSlashInterface {
194194
currentSignatureHelpDocCommentIs(docComment: string): void;
195195
signatureHelpCountIs(expected: number): void;
196196
signatureHelpArgumentCountIs(expected: number): void;
197+
signatureHelpCurrentArgumentListIsVariadic(expected: boolean);
197198
currentSignatureParameterCountIs(expected: number): void;
198199
currentSignatureTypeParameterCountIs(expected: number): void;
199200
currentSignatureHelpIs(expected: string): void;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
//// declare function f(a: any, ...b: any[]): any;
4+
//// f</*1*/>(1, 2);
5+
6+
goTo.marker("1");
7+
verify.signatureHelpArgumentCountIs(0);
8+
verify.signatureHelpCurrentArgumentListIsVariadic(false);

0 commit comments

Comments
 (0)