Skip to content

Commit e76d172

Browse files
ShuiRuTianorta
andauthored
Fix 38219: signature helper works for optional function condition. (microsoft#39672)
* fix optional fuction condition. * Adds a test Co-authored-by: Orta <[email protected]>
1 parent 8a05707 commit e76d172

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

src/services/signatureHelp.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,14 +304,17 @@ namespace ts.SignatureHelp {
304304
if (!info) return undefined;
305305
const { contextualType, argumentIndex, argumentCount, argumentsSpan } = info;
306306

307-
const signatures = contextualType.getCallSignatures();
307+
// for optional function condition.
308+
const nonNullableContextualType = contextualType.getNonNullableType();
309+
310+
const signatures = nonNullableContextualType.getCallSignatures();
308311
if (signatures.length !== 1) return undefined;
309312

310-
const invocation: ContextualInvocation = { kind: InvocationKind.Contextual, signature: first(signatures), node: startingToken, symbol: chooseBetterSymbol(contextualType.symbol) };
313+
const invocation: ContextualInvocation = { kind: InvocationKind.Contextual, signature: first(signatures), node: startingToken, symbol: chooseBetterSymbol(nonNullableContextualType.symbol) };
311314
return { isTypeParameterList: false, invocation, argumentsSpan, argumentIndex, argumentCount };
312315
}
313316

314-
interface ContextualSignatureLocationInfo {readonly contextualType: Type; readonly argumentIndex: number; readonly argumentCount: number; readonly argumentsSpan: TextSpan; }
317+
interface ContextualSignatureLocationInfo { readonly contextualType: Type; readonly argumentIndex: number; readonly argumentCount: number; readonly argumentsSpan: TextSpan; }
315318
function getContextualSignatureLocationInfo(startingToken: Node, sourceFile: SourceFile, checker: TypeChecker): ContextualSignatureLocationInfo | undefined {
316319
if (startingToken.kind !== SyntaxKind.OpenParenToken && startingToken.kind !== SyntaxKind.CommaToken) return undefined;
317320
const { parent } = startingToken;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// #39672
2+
// <reference path='fourslash.ts'/>
3+
// @strict: true
4+
5+
//// interface Obj {
6+
//// optionalMethod?: (current: any) => any;
7+
//// };
8+
////
9+
//// const o: Obj = {
10+
//// optionalMethod(/*1*/) {
11+
//// return {};
12+
//// }
13+
//// };
14+
15+
verify.signatureHelp(
16+
{
17+
marker: "1",
18+
text: 'optionalMethod(current: any): any',
19+
parameterName: "current",
20+
parameterSpan: "current: any",
21+
},
22+
);

0 commit comments

Comments
 (0)