@@ -661,8 +661,9 @@ namespace Harness.LanguageService {
661661 }
662662
663663 editScript ( fileName : string , start : number , end : number , newText : string ) {
664+ const changeArgs = this . client . createChangeFileRequestArgs ( fileName , start , end , newText ) ;
664665 super . editScript ( fileName , start , end , newText ) ;
665- this . client . changeFile ( fileName , start , end , newText ) ;
666+ this . client . changeFile ( fileName , changeArgs ) ;
666667 }
667668 }
668669
@@ -719,8 +720,8 @@ namespace Harness.LanguageService {
719720 return this . host . getCurrentDirectory ( ) ;
720721 }
721722
722- getDirectories ( ) : string [ ] {
723- return [ ] ;
723+ getDirectories ( path : string ) : string [ ] {
724+ return this . host . getDirectories ( path ) ;
724725 }
725726
726727 getEnvironmentVariable ( name : string ) : string {
@@ -890,9 +891,16 @@ namespace Harness.LanguageService {
890891 }
891892 }
892893
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+
893900 export class ServerLanguageServiceAdapter implements LanguageServiceAdapter {
894901 private host : SessionClientHost ;
895902 private client : ts . server . SessionClient ;
903+ private server : FourslashSession ;
896904 constructor ( cancellationToken ?: ts . HostCancellationToken , options ?: ts . CompilerOptions ) {
897905 // This is the main host that tests use to direct tests
898906 const clientHost = new SessionClientHost ( cancellationToken , options ) ;
@@ -912,11 +920,12 @@ namespace Harness.LanguageService {
912920 logger : serverHost ,
913921 canUseEvents : true
914922 } ;
915- const server = new ts . server . Session ( opts ) ;
923+ this . server = new FourslashSession ( opts ) ;
924+
916925
917926 // Fake the connection between the client and the server
918927 serverHost . writeMessage = client . onMessage . bind ( client ) ;
919- clientHost . writeMessage = server . onMessage . bind ( server ) ;
928+ clientHost . writeMessage = this . server . onMessage . bind ( this . server ) ;
920929
921930 // Wire the client to the host to get notifications when a file is open
922931 // or edited.
@@ -930,5 +939,20 @@ namespace Harness.LanguageService {
930939 getLanguageService ( ) : ts . LanguageService { return this . client ; }
931940 getClassifier ( ) : ts . Classifier { throw new Error ( "getClassifier is not available using the server interface." ) ; }
932941 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+ }
933957 }
934958}
0 commit comments