mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Fix 38219: signature helper works for optional function condition. (#39672)
* fix optional fuction condition. * Adds a test Co-authored-by: Orta <git@orta.io>
This commit is contained in:
@@ -304,14 +304,17 @@ namespace ts.SignatureHelp {
|
||||
if (!info) return undefined;
|
||||
const { contextualType, argumentIndex, argumentCount, argumentsSpan } = info;
|
||||
|
||||
const signatures = contextualType.getCallSignatures();
|
||||
// for optional function condition.
|
||||
const nonNullableContextualType = contextualType.getNonNullableType();
|
||||
|
||||
const signatures = nonNullableContextualType.getCallSignatures();
|
||||
if (signatures.length !== 1) return undefined;
|
||||
|
||||
const invocation: ContextualInvocation = { kind: InvocationKind.Contextual, signature: first(signatures), node: startingToken, symbol: chooseBetterSymbol(contextualType.symbol) };
|
||||
const invocation: ContextualInvocation = { kind: InvocationKind.Contextual, signature: first(signatures), node: startingToken, symbol: chooseBetterSymbol(nonNullableContextualType.symbol) };
|
||||
return { isTypeParameterList: false, invocation, argumentsSpan, argumentIndex, argumentCount };
|
||||
}
|
||||
|
||||
interface ContextualSignatureLocationInfo {readonly contextualType: Type; readonly argumentIndex: number; readonly argumentCount: number; readonly argumentsSpan: TextSpan; }
|
||||
interface ContextualSignatureLocationInfo { readonly contextualType: Type; readonly argumentIndex: number; readonly argumentCount: number; readonly argumentsSpan: TextSpan; }
|
||||
function getContextualSignatureLocationInfo(startingToken: Node, sourceFile: SourceFile, checker: TypeChecker): ContextualSignatureLocationInfo | undefined {
|
||||
if (startingToken.kind !== SyntaxKind.OpenParenToken && startingToken.kind !== SyntaxKind.CommaToken) return undefined;
|
||||
const { parent } = startingToken;
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
// #39672
|
||||
// <reference path='fourslash.ts'/>
|
||||
// @strict: true
|
||||
|
||||
//// interface Obj {
|
||||
//// optionalMethod?: (current: any) => any;
|
||||
//// };
|
||||
////
|
||||
//// const o: Obj = {
|
||||
//// optionalMethod(/*1*/) {
|
||||
//// return {};
|
||||
//// }
|
||||
//// };
|
||||
|
||||
verify.signatureHelp(
|
||||
{
|
||||
marker: "1",
|
||||
text: 'optionalMethod(current: any): any',
|
||||
parameterName: "current",
|
||||
parameterSpan: "current: any",
|
||||
},
|
||||
);
|
||||
Reference in New Issue
Block a user