diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 8faf17f1956..ea72661a868 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -624,7 +624,6 @@ namespace ts.SignatureHelp { } function itemInfoForParameters(candidateSignature: Signature, checker: TypeChecker, enclosingDeclaration: Node, sourceFile: SourceFile): SignatureHelpItemInfo[] { - const isVariadic = checker.hasEffectiveRestParameter(candidateSignature); const printer = createPrinter({ removeComments: true }); const typeParameterParts = mapToDisplayParts(writer => { if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) { @@ -633,14 +632,16 @@ namespace ts.SignatureHelp { } }); const lists = checker.getExpandedParameters(candidateSignature); - return lists.map(parameterList => { - return { - isVariadic: isVariadic && (lists.length === 1 || !!((parameterList[parameterList.length - 1] as TransientSymbol).checkFlags & CheckFlags.RestParameter)), - parameters: parameterList.map(p => createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer)), - prefix: [...typeParameterParts, punctuationPart(SyntaxKind.OpenParenToken)], - suffix: [punctuationPart(SyntaxKind.CloseParenToken)] - }; - }); + const isVariadic: (parameterList: readonly Symbol[]) => boolean = + !checker.hasEffectiveRestParameter(candidateSignature) ? _ => false + : lists.length === 1 ? _ => true + : pList => !!(pList.length && (pList[pList.length - 1] as TransientSymbol).checkFlags & CheckFlags.RestParameter); + return lists.map(parameterList => ({ + isVariadic: isVariadic(parameterList), + parameters: parameterList.map(p => createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer)), + prefix: [...typeParameterParts, punctuationPart(SyntaxKind.OpenParenToken)], + suffix: [punctuationPart(SyntaxKind.CloseParenToken)] + })); } function createSignatureHelpParameterForParameter(parameter: Symbol, checker: TypeChecker, enclosingDeclaration: Node, sourceFile: SourceFile, printer: Printer): SignatureHelpParameter { diff --git a/tests/cases/fourslash/jsSignature-41059.ts b/tests/cases/fourslash/jsSignature-41059.ts new file mode 100644 index 00000000000..35e550aaa89 --- /dev/null +++ b/tests/cases/fourslash/jsSignature-41059.ts @@ -0,0 +1,10 @@ +/// + +// @lib: esnext +// @allowNonTsExtensions: true + +// @Filename: Foo.js +//// a.next(/**/); + +goTo.marker(); +verify.signatureHelp({ overloadsCount: 2, text: "Generator.next(): IteratorResult" });