Skip to content

Commit f0896f3

Browse files
committed
use single, original tuple instead
1 parent 692c590 commit f0896f3

File tree

3 files changed

+17
-29
lines changed

3 files changed

+17
-29
lines changed

src/services/signatureHelp.ts

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -540,15 +540,7 @@ namespace ts.SignatureHelp {
540540
}
541541

542542
Debug.assert(selectedItemIndex !== -1); // If candidates is non-empty it should always include bestSignature. We check for an empty candidates before calling this function.
543-
const help = { items: flatMapToMutable(items, identity), applicableSpan, selectedItemIndex, argumentIndex, argumentCount };
544-
const selected = help.items[selectedItemIndex];
545-
if (selected.isVariadic) {
546-
const firstRest = findIndex(selected.parameters, p => !!p.isRest);
547-
if (firstRest > -1 && help.argumentIndex > firstRest) {
548-
help.argumentIndex = firstRest;
549-
}
550-
}
551-
return help;
543+
return { items: flatMapToMutable(items, identity), applicableSpan, selectedItemIndex, argumentIndex, argumentCount };
552544
}
553545

554546
function createTypeHelpItems(
@@ -628,10 +620,12 @@ namespace ts.SignatureHelp {
628620
printer.writeList(ListFormat.TypeParameters, args, sourceFile, writer);
629621
}
630622
});
631-
const lists = checker.getExpandedParameters(candidateSignature);
632-
return lists.map(parameterList => {
623+
const expansions = checker.getExpandedParameters(candidateSignature);
624+
const hasNonTrailingRest = expansions.some(e => e.some((p,i) => (p as TransientSymbol).checkFlags & CheckFlags.RestParameter && i !== e.length - 1));
625+
const hasTupleExpansion = expansions.length > 1;
626+
return (hasNonTrailingRest ? [candidateSignature.parameters] : expansions).map(parameterList => {
633627
return {
634-
isVariadic: isVariadic && (lists.length === 1 || !!((parameterList[parameterList.length - 1] as TransientSymbol).checkFlags & CheckFlags.RestParameter)),
628+
isVariadic: isVariadic && (!hasTupleExpansion || !!((parameterList[parameterList.length - 1] as TransientSymbol).checkFlags & CheckFlags.RestParameter)),
635629
parameters: parameterList.map(p => createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer)),
636630
prefix: [...typeParameterParts, punctuationPart(SyntaxKind.OpenParenToken)],
637631
suffix: [punctuationPart(SyntaxKind.CloseParenToken)]
@@ -645,15 +639,14 @@ namespace ts.SignatureHelp {
645639
printer.writeNode(EmitHint.Unspecified, param, sourceFile, writer);
646640
});
647641
const isOptional = checker.isOptionalParameter(parameter.valueDeclaration as ParameterDeclaration);
648-
const isRest = !!((parameter as TransientSymbol).checkFlags & CheckFlags.RestParameter);
649-
return { name: parameter.name, documentation: parameter.getDocumentationComment(checker), displayParts, isOptional, isRest };
642+
return { name: parameter.name, documentation: parameter.getDocumentationComment(checker), displayParts, isOptional };
650643
}
651644

652645
function createSignatureHelpParameterForTypeParameter(typeParameter: TypeParameter, checker: TypeChecker, enclosingDeclaration: Node, sourceFile: SourceFile, printer: Printer): SignatureHelpParameter {
653646
const displayParts = mapToDisplayParts(writer => {
654647
const param = checker.typeParameterToDeclaration(typeParameter, enclosingDeclaration, signatureHelpNodeBuilderFlags)!;
655648
printer.writeNode(EmitHint.Unspecified, param, sourceFile, writer);
656649
});
657-
return { name: typeParameter.symbol.name, documentation: typeParameter.symbol.getDocumentationComment(checker), displayParts, isOptional: false, isRest: false };
650+
return { name: typeParameter.symbol.name, documentation: typeParameter.symbol.getDocumentationComment(checker), displayParts, isOptional: false };
658651
}
659652
}

src/services/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1078,7 +1078,6 @@ namespace ts {
10781078
documentation: SymbolDisplayPart[];
10791079
displayParts: SymbolDisplayPart[];
10801080
isOptional: boolean;
1081-
isRest?: boolean;
10821081
}
10831082

10841083
export interface SelectionRange {
Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// <reference path='fourslash.ts' />
22

3-
////export function leading(...args: [...names: string[], allCaps: boolean]): void {
3+
////export function leading(...args: [...names: string[], x: boolean, y: number]): void {
44
////}
55
////
66
////leading(/*1*/);
@@ -10,29 +10,25 @@
1010
verify.signatureHelp(
1111
{
1212
marker: "1",
13-
text: "leading(...names: string[], allCaps: boolean): void",
13+
text: "leading(...args: [...names: string[], x: boolean, y: number]): void",
1414
overloadsCount: 1,
15-
parameterCount: 2,
16-
parameterName: "names",
17-
parameterSpan: "...names: string[]",
15+
parameterCount: 1,
16+
parameterName: "args",
17+
parameterSpan: "...args: [...names: string[], x: boolean, y: number]",
1818
isVariadic: true,
1919
},
2020
{
2121
marker: "2",
22-
text: "leading(...names: string[], allCaps: boolean): void",
22+
text: "leading(...args: [...names: string[], x: boolean, y: number]): void",
2323
overloadsCount: 1,
24-
parameterCount: 2,
25-
parameterName: "names",
26-
parameterSpan: "...names: string[]",
24+
parameterCount: 1,
2725
isVariadic: true,
2826
},
2927
{
3028
marker: "3",
31-
text: "leading(...names: string[], allCaps: boolean): void",
29+
text: "leading(...args: [...names: string[], x: boolean, y: number]): void",
3230
overloadsCount: 1,
33-
parameterCount: 2,
34-
parameterName: "names",
35-
parameterSpan: "...names: string[]",
31+
parameterCount: 1,
3632
isVariadic: true,
3733
},
3834
);

0 commit comments

Comments
 (0)