@@ -12,10 +12,14 @@ namespace ts.GoToDefinition {
12
12
if ( node === sourceFile ) {
13
13
return undefined ;
14
14
}
15
- const { parent } = node ;
16
15
16
+ const { parent } = node ;
17
17
const typeChecker = program . getTypeChecker ( ) ;
18
18
19
+ if ( node . kind === SyntaxKind . OverrideKeyword || ( isJSDocOverrideTag ( node ) && rangeContainsPosition ( node . tagName , position ) ) ) {
20
+ return getDefinitionFromOverriddenMember ( typeChecker , node ) || emptyArray ;
21
+ }
22
+
19
23
// Labels
20
24
if ( isJumpStatementTarget ( node ) ) {
21
25
const label = getTargetLabel ( node . parent , node . text ) ;
@@ -126,6 +130,26 @@ namespace ts.GoToDefinition {
126
130
}
127
131
}
128
132
133
+ function getDefinitionFromOverriddenMember ( typeChecker : TypeChecker , node : Node ) {
134
+ const classElement = findAncestor ( node , isClassElement ) ;
135
+ if ( ! ( classElement && classElement . name ) ) return ;
136
+
137
+ const baseDeclaration = findAncestor ( classElement , isClassLike ) ;
138
+ if ( ! baseDeclaration ) return ;
139
+
140
+ const baseTypeNode = getEffectiveBaseTypeNode ( baseDeclaration ) ;
141
+ const baseType = baseTypeNode ? typeChecker . getTypeAtLocation ( baseTypeNode ) : undefined ;
142
+ if ( ! baseType ) return ;
143
+
144
+ const name = unescapeLeadingUnderscores ( getTextOfPropertyName ( classElement . name ) ) ;
145
+ const symbol = hasStaticModifier ( classElement )
146
+ ? typeChecker . getPropertyOfType ( typeChecker . getTypeOfSymbolAtLocation ( baseType . symbol , baseDeclaration ) , name )
147
+ : typeChecker . getPropertyOfType ( baseType , name ) ;
148
+ if ( ! symbol ) return ;
149
+
150
+ return getDefinitionFromSymbol ( typeChecker , symbol , node ) ;
151
+ }
152
+
129
153
export function getReferenceAtPosition ( sourceFile : SourceFile , position : number , program : Program ) : { reference : FileReference , fileName : string , unverified : boolean , file ?: SourceFile } | undefined {
130
154
const referencePath = findReferenceInPosition ( sourceFile . referencedFiles , position ) ;
131
155
if ( referencePath ) {
0 commit comments