@@ -47,9 +47,9 @@ namespace FourSlash {
4747 /**
4848 * Inserted in source files by surrounding desired text
4949 * in a range with `[|` and `|]`. For example,
50- *
50+ *
5151 * [|text in range|]
52- *
52+ *
5353 * is a range with `text in range` "selected".
5454 */
5555 ranges : Range [ ] ;
@@ -540,53 +540,66 @@ namespace FourSlash {
540540 }
541541
542542 public verifyGoToDefinitionIs ( endMarker : string | string [ ] ) {
543- this . verifyGoToDefinitionWorker ( endMarker instanceof Array ? endMarker : [ endMarker ] ) ;
543+ this . verifyGoToXWorker ( endMarker instanceof Array ? endMarker : [ endMarker ] , ( ) => this . getGoToDefinition ( ) ) ;
544544 }
545545
546546 public verifyGoToDefinition ( arg0 : any , endMarkerNames ?: string | string [ ] ) {
547+ this . verifyGoToX ( arg0 , endMarkerNames , ( ) => this . getGoToDefinition ( ) ) ;
548+ }
549+
550+ private getGoToDefinition ( ) : ts . DefinitionInfo [ ] {
551+ return this . languageService . getDefinitionAtPosition ( this . activeFile . fileName , this . currentCaretPosition )
552+ }
553+
554+ public verifyGoToType ( arg0 : any , endMarkerNames ?: string | string [ ] ) {
555+ this . verifyGoToX ( arg0 , endMarkerNames , ( ) =>
556+ this . languageService . getTypeDefinitionAtPosition ( this . activeFile . fileName , this . currentCaretPosition ) ) ;
557+ }
558+
559+ private verifyGoToX ( arg0 : any , endMarkerNames : string | string [ ] | undefined , getDefs : ( ) => ts . DefinitionInfo [ ] | undefined ) {
547560 if ( endMarkerNames ) {
548- this . verifyGoToDefinitionPlain ( arg0 , endMarkerNames ) ;
561+ this . verifyGoToXPlain ( arg0 , endMarkerNames , getDefs ) ;
549562 }
550563 else if ( arg0 instanceof Array ) {
551564 const pairs : [ string | string [ ] , string | string [ ] ] [ ] = arg0 ;
552565 for ( const [ start , end ] of pairs ) {
553- this . verifyGoToDefinitionPlain ( start , end ) ;
566+ this . verifyGoToXPlain ( start , end , getDefs ) ;
554567 }
555568 }
556569 else {
557570 const obj : { [ startMarkerName : string ] : string | string [ ] } = arg0 ;
558571 for ( const startMarkerName in obj ) {
559572 if ( ts . hasProperty ( obj , startMarkerName ) ) {
560- this . verifyGoToDefinitionPlain ( startMarkerName , obj [ startMarkerName ] ) ;
573+ this . verifyGoToXPlain ( startMarkerName , obj [ startMarkerName ] , getDefs ) ;
561574 }
562575 }
563576 }
564577 }
565578
566- private verifyGoToDefinitionPlain ( startMarkerNames : string | string [ ] , endMarkerNames : string | string [ ] ) {
579+ private verifyGoToXPlain ( startMarkerNames : string | string [ ] , endMarkerNames : string | string [ ] , getDefs : ( ) => ts . DefinitionInfo [ ] | undefined ) {
567580 if ( startMarkerNames instanceof Array ) {
568581 for ( const start of startMarkerNames ) {
569- this . verifyGoToDefinitionSingle ( start , endMarkerNames ) ;
582+ this . verifyGoToXSingle ( start , endMarkerNames , getDefs ) ;
570583 }
571584 }
572585 else {
573- this . verifyGoToDefinitionSingle ( startMarkerNames , endMarkerNames ) ;
586+ this . verifyGoToXSingle ( startMarkerNames , endMarkerNames , getDefs ) ;
574587 }
575588 }
576589
577590 public verifyGoToDefinitionForMarkers ( markerNames : string [ ] ) {
578591 for ( const markerName of markerNames ) {
579- this . verifyGoToDefinitionSingle ( `${ markerName } Reference` , `${ markerName } Definition` ) ;
592+ this . verifyGoToXSingle ( `${ markerName } Reference` , `${ markerName } Definition` , ( ) => this . getGoToDefinition ( ) ) ;
580593 }
581594 }
582595
583- private verifyGoToDefinitionSingle ( startMarkerName : string , endMarkerNames : string | string [ ] ) {
596+ private verifyGoToXSingle ( startMarkerName : string , endMarkerNames : string | string [ ] , getDefs : ( ) => ts . DefinitionInfo [ ] | undefined ) {
584597 this . goToMarker ( startMarkerName ) ;
585- this . verifyGoToDefinitionWorker ( endMarkerNames instanceof Array ? endMarkerNames : [ endMarkerNames ] ) ;
598+ this . verifyGoToXWorker ( endMarkerNames instanceof Array ? endMarkerNames : [ endMarkerNames ] , getDefs ) ;
586599 }
587600
588- private verifyGoToDefinitionWorker ( endMarkers : string [ ] ) {
589- const definitions = this . languageService . getDefinitionAtPosition ( this . activeFile . fileName , this . currentCaretPosition ) || [ ] ;
601+ private verifyGoToXWorker ( endMarkers : string [ ] , getDefs : ( ) => ts . DefinitionInfo [ ] | undefined ) {
602+ const definitions = getDefs ( ) || [ ] ;
590603
591604 if ( endMarkers . length !== definitions . length ) {
592605 this . raiseError ( `goToDefinitions failed - expected to find ${ endMarkers . length } definitions but got ${ definitions . length } ` ) ;
@@ -1987,7 +2000,7 @@ namespace FourSlash {
19872000 * Compares expected text to the text that would be in the sole range
19882001 * (ie: [|...|]) in the file after applying the codefix sole codefix
19892002 * in the source file.
1990- *
2003+ *
19912004 * Because codefixes are only applied on the working file, it is unsafe
19922005 * to apply this more than once (consider a refactoring across files).
19932006 */
@@ -3042,10 +3055,6 @@ namespace FourSlashInterface {
30423055 this . state . goToEOF ( ) ;
30433056 }
30443057
3045- public type ( definitionIndex = 0 ) {
3046- this . state . goToTypeDefinition ( definitionIndex ) ;
3047- }
3048-
30493058 public implementation ( ) {
30503059 this . state . goToImplementation ( ) ;
30513060 }
@@ -3213,6 +3222,13 @@ namespace FourSlashInterface {
32133222 this . state . verifyGoToDefinition ( arg0 , endMarkerName ) ;
32143223 }
32153224
3225+ public goToType ( startMarkerName : string | string [ ] , endMarkerName : string | string [ ] ) : void ;
3226+ public goToType ( startsAndEnds : [ string | string [ ] , string | string [ ] ] [ ] ) : void ;
3227+ public goToType ( startsAndEnds : { [ startMarkerName : string ] : string | string [ ] } ) : void ;
3228+ public goToType ( arg0 : any , endMarkerName ?: string | string [ ] ) {
3229+ this . state . verifyGoToType ( arg0 , endMarkerName ) ;
3230+ }
3231+
32163232 public goToDefinitionForMarkers ( ...markerNames : string [ ] ) {
32173233 this . state . verifyGoToDefinitionForMarkers ( markerNames ) ;
32183234 }
0 commit comments