@@ -3,7 +3,7 @@ namespace ts.GoToDefinition {
3
3
export function getDefinitionAtPosition ( program : Program , sourceFile : SourceFile , position : number ) : readonly DefinitionInfo [ ] | undefined {
4
4
const resolvedRef = getReferenceAtPosition ( sourceFile , position , program ) ;
5
5
if ( resolvedRef ) {
6
- return [ getDefinitionInfoForFileReference ( resolvedRef . reference . fileName , resolvedRef . file . fileName ) ] ;
6
+ return [ getDefinitionInfoForFileReference ( resolvedRef . reference . fileName , resolvedRef . fileName ) ] ;
7
7
}
8
8
9
9
const node = getTouchingPropertyName ( sourceFile , position ) ;
@@ -108,24 +108,41 @@ namespace ts.GoToDefinition {
108
108
|| ( ! isCallLikeExpression ( calledDeclaration . parent ) && s === calledDeclaration . parent . symbol ) ;
109
109
}
110
110
111
- export function getReferenceAtPosition ( sourceFile : SourceFile , position : number , program : Program ) : { reference : FileReference , file : SourceFile } | undefined {
111
+ export function getReferenceAtPosition ( sourceFile : SourceFile , position : number , program : Program ) : { reference : FileReference , fileName : string , file ? : SourceFile } | undefined {
112
112
const referencePath = findReferenceInPosition ( sourceFile . referencedFiles , position ) ;
113
113
if ( referencePath ) {
114
114
const file = program . getSourceFileFromReference ( sourceFile , referencePath ) ;
115
- return file && { reference : referencePath , file } ;
115
+ return file && { reference : referencePath , fileName : file . fileName } ;
116
116
}
117
117
118
118
const typeReferenceDirective = findReferenceInPosition ( sourceFile . typeReferenceDirectives , position ) ;
119
119
if ( typeReferenceDirective ) {
120
120
const reference = program . getResolvedTypeReferenceDirectives ( ) . get ( typeReferenceDirective . fileName ) ;
121
121
const file = reference && program . getSourceFile ( reference . resolvedFileName ! ) ; // TODO:GH#18217
122
- return file && { reference : typeReferenceDirective , file } ;
122
+ return file && { reference : typeReferenceDirective , fileName : file . fileName } ;
123
123
}
124
124
125
125
const libReferenceDirective = findReferenceInPosition ( sourceFile . libReferenceDirectives , position ) ;
126
126
if ( libReferenceDirective ) {
127
127
const file = program . getLibFileFromReference ( libReferenceDirective ) ;
128
- return file && { reference : libReferenceDirective , file } ;
128
+ return file && { reference : libReferenceDirective , fileName : file . fileName } ;
129
+ }
130
+
131
+ if ( sourceFile . resolvedModules ?. size ) {
132
+ const node = getTokenAtPosition ( sourceFile , position ) ;
133
+ if ( isModuleSpecifierLike ( node ) && ! pathIsBareSpecifier ( node . text ) && sourceFile . resolvedModules . has ( node . text ) ) {
134
+ const fileName = sourceFile . resolvedModules . get ( node . text ) ?. resolvedFileName
135
+ || resolvePath ( getDirectoryPath ( sourceFile . fileName ) , node . text ) ;
136
+ return {
137
+ file : program . getSourceFile ( fileName ) ,
138
+ fileName,
139
+ reference : {
140
+ pos : node . getStart ( ) ,
141
+ end : node . getEnd ( ) ,
142
+ fileName : node . text
143
+ }
144
+ } ;
145
+ }
129
146
}
130
147
131
148
return undefined ;
0 commit comments