Skip to content

Commit f12e9a8

Browse files
author
Andy
authored
Minor refactor in goToTypeDefinition (#25951)
1 parent 1e8a5bf commit f12e9a8

File tree

2 files changed

+11
-14
lines changed

2 files changed

+11
-14
lines changed

src/services/goToDefinition.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,8 @@ namespace ts.GoToDefinition {
136136

137137
const symbol = typeChecker.getSymbolAtLocation(node);
138138
const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, node);
139-
if (!type) {
140-
return undefined;
141-
}
142-
143-
if (type.isUnion() && !(type.flags & TypeFlags.Enum)) {
144-
return flatMap(type.types, t => t.symbol && getDefinitionFromSymbol(typeChecker, t.symbol, node));
145-
}
146-
147-
return type.symbol && getDefinitionFromSymbol(typeChecker, type.symbol, node);
139+
return type && flatMap(type.isUnion() && !(type.flags & TypeFlags.Enum) ? type.types : [type], t =>
140+
t.symbol && getDefinitionFromSymbol(typeChecker, t.symbol, node));
148141
}
149142

150143
export function getDefinitionAndBoundSpan(program: Program, sourceFile: SourceFile, position: number): DefinitionInfoAndBoundSpan | undefined {
@@ -230,7 +223,7 @@ namespace ts.GoToDefinition {
230223
}
231224

232225
function getCallSignatureDefinition(): DefinitionInfo[] | undefined {
233-
return isCallExpressionTarget(node) || isNewExpressionTarget(node) || isNameOfFunctionDeclaration(node)
226+
return isCallOrNewExpressionTarget(node) || isNameOfFunctionDeclaration(node)
234227
? getSignatureDefinition(symbol.declarations, /*selectConstructors*/ false)
235228
: undefined;
236229
}

src/services/utilities.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,16 +194,20 @@ namespace ts {
194194
}
195195

196196
export function isCallExpressionTarget(node: Node): boolean {
197-
return isCallOrNewExpressionTarget(node, SyntaxKind.CallExpression);
197+
return isCallOrNewExpressionTargetWorker(node, isCallExpression);
198198
}
199199

200200
export function isNewExpressionTarget(node: Node): boolean {
201-
return isCallOrNewExpressionTarget(node, SyntaxKind.NewExpression);
201+
return isCallOrNewExpressionTargetWorker(node, isNewExpression);
202202
}
203203

204-
function isCallOrNewExpressionTarget(node: Node, kind: SyntaxKind): boolean {
204+
export function isCallOrNewExpressionTarget(node: Node): boolean {
205+
return isCallOrNewExpressionTargetWorker(node, isCallOrNewExpression);
206+
}
207+
208+
function isCallOrNewExpressionTargetWorker<T extends CallExpression | NewExpression>(node: Node, pred: (node: Node) => node is T): boolean {
205209
const target = climbPastPropertyAccess(node);
206-
return !!target && !!target.parent && target.parent.kind === kind && (<CallExpression>target.parent).expression === target;
210+
return !!target && !!target.parent && pred(target.parent) && target.parent.expression === target;
207211
}
208212

209213
export function climbPastPropertyAccess(node: Node) {

0 commit comments

Comments
 (0)