@@ -661,8 +661,9 @@ namespace Harness.LanguageService {
661
661
}
662
662
663
663
editScript ( fileName : string , start : number , end : number , newText : string ) {
664
+ const changeArgs = this . client . createChangeFileRequestArgs ( fileName , start , end , newText ) ;
664
665
super . editScript ( fileName , start , end , newText ) ;
665
- this . client . changeFile ( fileName , start , end , newText ) ;
666
+ this . client . changeFile ( fileName , changeArgs ) ;
666
667
}
667
668
}
668
669
@@ -719,8 +720,8 @@ namespace Harness.LanguageService {
719
720
return this . host . getCurrentDirectory ( ) ;
720
721
}
721
722
722
- getDirectories ( ) : string [ ] {
723
- return [ ] ;
723
+ getDirectories ( path : string ) : string [ ] {
724
+ return this . host . getDirectories ( path ) ;
724
725
}
725
726
726
727
getEnvironmentVariable ( name : string ) : string {
@@ -890,9 +891,16 @@ namespace Harness.LanguageService {
890
891
}
891
892
}
892
893
894
+ class FourslashSession extends ts . server . Session {
895
+ getText ( fileName : string ) {
896
+ return ts . getSnapshotText ( this . projectService . getDefaultProjectForFile ( ts . server . toNormalizedPath ( fileName ) , /*ensureProject*/ true ) ! . getScriptSnapshot ( fileName ) ! ) ;
897
+ }
898
+ }
899
+
893
900
export class ServerLanguageServiceAdapter implements LanguageServiceAdapter {
894
901
private host : SessionClientHost ;
895
902
private client : ts . server . SessionClient ;
903
+ private server : FourslashSession ;
896
904
constructor ( cancellationToken ?: ts . HostCancellationToken , options ?: ts . CompilerOptions ) {
897
905
// This is the main host that tests use to direct tests
898
906
const clientHost = new SessionClientHost ( cancellationToken , options ) ;
@@ -912,11 +920,12 @@ namespace Harness.LanguageService {
912
920
logger : serverHost ,
913
921
canUseEvents : true
914
922
} ;
915
- const server = new ts . server . Session ( opts ) ;
923
+ this . server = new FourslashSession ( opts ) ;
924
+
916
925
917
926
// Fake the connection between the client and the server
918
927
serverHost . writeMessage = client . onMessage . bind ( client ) ;
919
- clientHost . writeMessage = server . onMessage . bind ( server ) ;
928
+ clientHost . writeMessage = this . server . onMessage . bind ( this . server ) ;
920
929
921
930
// Wire the client to the host to get notifications when a file is open
922
931
// or edited.
@@ -930,5 +939,20 @@ namespace Harness.LanguageService {
930
939
getLanguageService ( ) : ts . LanguageService { return this . client ; }
931
940
getClassifier ( ) : ts . Classifier { throw new Error ( "getClassifier is not available using the server interface." ) ; }
932
941
getPreProcessedFileInfo ( ) : ts . PreProcessedFileInfo { throw new Error ( "getPreProcessedFileInfo is not available using the server interface." ) ; }
942
+ assertTextConsistent ( fileName : string ) {
943
+ const serverText = this . server . getText ( fileName ) ;
944
+ const clientText = this . host . readFile ( fileName ) ;
945
+ ts . Debug . assert ( serverText === clientText , [
946
+ "Server and client text are inconsistent." ,
947
+ "" ,
948
+ "\x1b[1mServer\x1b[0m\x1b[31m:" ,
949
+ serverText ,
950
+ "" ,
951
+ "\x1b[1mClient\x1b[0m\x1b[31m:" ,
952
+ clientText ,
953
+ "" ,
954
+ "This probably means something is wrong with the fourslash infrastructure, not with the test."
955
+ ] . join ( ts . sys . newLine ) ) ;
956
+ }
933
957
}
934
958
}
0 commit comments