mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-30 01:04:49 -05:00
Minor refactor in goToTypeDefinition (#25951)
This commit is contained in:
@@ -136,15 +136,8 @@ namespace ts.GoToDefinition {
|
||||
|
||||
const symbol = typeChecker.getSymbolAtLocation(node);
|
||||
const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, node);
|
||||
if (!type) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (type.isUnion() && !(type.flags & TypeFlags.Enum)) {
|
||||
return flatMap(type.types, t => t.symbol && getDefinitionFromSymbol(typeChecker, t.symbol, node));
|
||||
}
|
||||
|
||||
return type.symbol && getDefinitionFromSymbol(typeChecker, type.symbol, node);
|
||||
return type && flatMap(type.isUnion() && !(type.flags & TypeFlags.Enum) ? type.types : [type], t =>
|
||||
t.symbol && getDefinitionFromSymbol(typeChecker, t.symbol, node));
|
||||
}
|
||||
|
||||
export function getDefinitionAndBoundSpan(program: Program, sourceFile: SourceFile, position: number): DefinitionInfoAndBoundSpan | undefined {
|
||||
@@ -230,7 +223,7 @@ namespace ts.GoToDefinition {
|
||||
}
|
||||
|
||||
function getCallSignatureDefinition(): DefinitionInfo[] | undefined {
|
||||
return isCallExpressionTarget(node) || isNewExpressionTarget(node) || isNameOfFunctionDeclaration(node)
|
||||
return isCallOrNewExpressionTarget(node) || isNameOfFunctionDeclaration(node)
|
||||
? getSignatureDefinition(symbol.declarations, /*selectConstructors*/ false)
|
||||
: undefined;
|
||||
}
|
||||
|
||||
@@ -194,16 +194,20 @@ namespace ts {
|
||||
}
|
||||
|
||||
export function isCallExpressionTarget(node: Node): boolean {
|
||||
return isCallOrNewExpressionTarget(node, SyntaxKind.CallExpression);
|
||||
return isCallOrNewExpressionTargetWorker(node, isCallExpression);
|
||||
}
|
||||
|
||||
export function isNewExpressionTarget(node: Node): boolean {
|
||||
return isCallOrNewExpressionTarget(node, SyntaxKind.NewExpression);
|
||||
return isCallOrNewExpressionTargetWorker(node, isNewExpression);
|
||||
}
|
||||
|
||||
function isCallOrNewExpressionTarget(node: Node, kind: SyntaxKind): boolean {
|
||||
export function isCallOrNewExpressionTarget(node: Node): boolean {
|
||||
return isCallOrNewExpressionTargetWorker(node, isCallOrNewExpression);
|
||||
}
|
||||
|
||||
function isCallOrNewExpressionTargetWorker<T extends CallExpression | NewExpression>(node: Node, pred: (node: Node) => node is T): boolean {
|
||||
const target = climbPastPropertyAccess(node);
|
||||
return !!target && !!target.parent && target.parent.kind === kind && (<CallExpression>target.parent).expression === target;
|
||||
return !!target && !!target.parent && pred(target.parent) && target.parent.expression === target;
|
||||
}
|
||||
|
||||
export function climbPastPropertyAccess(node: Node) {
|
||||
|
||||
Reference in New Issue
Block a user