@@ -97,6 +97,7 @@ module ts.server {
9797 export var Rename = "rename" ;
9898 export var Saveto = "saveto" ;
9999 export var SignatureHelp = "signatureHelp" ;
100+ export var TypeDefinition = "typeDefinition" ;
100101 export var Unknown = "unknown" ;
101102 }
102103
@@ -285,7 +286,29 @@ module ts.server {
285286 } ) ) ;
286287 }
287288
288- getOccurrences ( line : number , offset : number , fileName : string ) : protocol . OccurrencesResponseItem [ ] {
289+ getTypeDefinition ( line : number , offset : number , fileName : string ) : protocol . FileSpan [ ] {
290+ var file = ts . normalizePath ( fileName ) ;
291+ var project = this . projectService . getProjectForFile ( file ) ;
292+ if ( ! project ) {
293+ throw Errors . NoProject ;
294+ }
295+
296+ var compilerService = project . compilerService ;
297+ var position = compilerService . host . lineOffsetToPosition ( file , line , offset ) ;
298+
299+ var definitions = compilerService . languageService . getTypeDefinitionAtPosition ( file , position ) ;
300+ if ( ! definitions ) {
301+ return undefined ;
302+ }
303+
304+ return definitions . map ( def => ( {
305+ file : def . fileName ,
306+ start : compilerService . host . positionToLineOffset ( def . fileName , def . textSpan . start ) ,
307+ end : compilerService . host . positionToLineOffset ( def . fileName , ts . textSpanEnd ( def . textSpan ) )
308+ } ) ) ;
309+ }
310+
311+ getOccurrences ( line : number , offset : number , fileName : string ) : protocol . OccurrencesResponseItem [ ] {
289312 fileName = ts . normalizePath ( fileName ) ;
290313 let project = this . projectService . getProjectForFile ( fileName ) ;
291314
@@ -817,6 +840,11 @@ module ts.server {
817840 response = this . getDefinition ( defArgs . line , defArgs . offset , defArgs . file ) ;
818841 break ;
819842 }
843+ case CommandNames . TypeDefinition : {
844+ var defArgs = < protocol . FileLocationRequestArgs > request . arguments ;
845+ response = this . getTypeDefinition ( defArgs . line , defArgs . offset , defArgs . file ) ;
846+ break ;
847+ }
820848 case CommandNames . References : {
821849 var refArgs = < protocol . FileLocationRequestArgs > request . arguments ;
822850 response = this . getReferences ( refArgs . line , refArgs . offset , refArgs . file ) ;
0 commit comments