11import * as monaco from 'monaco-editor'
22import {
3- CloseAction , ErrorAction , MonacoLanguageClient , Emitter , Event , TextDocument , Services , State , DisposableCollection , CancellationToken , RequestType , NotificationType , LogMessageNotification , Disposable
3+ CloseAction , ErrorAction , MonacoLanguageClient , Emitter , Event , TextDocument , Services , State , DisposableCollection , CancellationToken , RequestType , NotificationType , LogMessageNotification
44} from 'monaco-languageclient'
55import delay from 'delay'
6- import { Uri } from 'monaco-editor'
7- import { registerTextModelContentProvider } from '@codingame/monaco-editor-wrapper'
8- import { getServices , installServices } from './services'
6+ import { installServices } from './services'
97import createLanguageClient from './createLanguageClient'
108import { WillShutdownParams } from './customRequests'
11- import { InitializeTextDocumentFeature , WillDisposeFeature } from './extensions'
9+ import { FileSystemFeature , InitializeTextDocumentFeature , WillDisposeFeature } from './extensions'
1210import { loadExtensionConfigurations } from './extensionConfiguration'
1311import { getLanguageClientOptions , LanguageClientId , LanguageClientOptions } from './languageClientOptions'
1412import { Infrastructure } from './infrastructure'
@@ -205,7 +203,6 @@ export class LanguageClientManager implements LanguageClient {
205203 this . languageClient = languageClient
206204
207205 let readyPromise : Promise < void > | null = null
208- let fileHandlerRegistration : Disposable | null = null
209206 languageClient . onDidChangeState ( async ( state ) => {
210207 switch ( state . newState ) {
211208 case State . Starting : {
@@ -242,7 +239,6 @@ export class LanguageClientManager implements LanguageClient {
242239 break
243240 }
244241 case State . Running : {
245- fileHandlerRegistration = this . registerFileHandlers ( )
246242 this . updateStatus ( 'connected' )
247243
248244 await readyPromise
@@ -251,9 +247,6 @@ export class LanguageClientManager implements LanguageClient {
251247 break
252248 }
253249 case State . Stopped : {
254- fileHandlerRegistration ?. dispose ( )
255- fileHandlerRegistration = null
256-
257250 this . updateStatus ( 'closed' )
258251 break
259252 }
@@ -262,6 +255,8 @@ export class LanguageClientManager implements LanguageClient {
262255
263256 this . languageClient . registerFeature ( new WillDisposeFeature ( this . languageClient , this . onWillShutdownEmitter ) )
264257
258+ this . languageClient . registerFeature ( new FileSystemFeature ( this . infrastructure , this ) )
259+
265260 if ( ! this . infrastructure . automaticTextDocumentUpdate ) {
266261 this . languageClient . registerFeature ( new InitializeTextDocumentFeature ( this ) )
267262 }
@@ -276,22 +271,6 @@ export class LanguageClientManager implements LanguageClient {
276271 sendRequest < P , R , E > ( type : RequestType < P , R , E > , params : P ) : Promise < R > {
277272 return this . languageClient ! . sendRequest < P , R , E > ( type , params )
278273 }
279-
280- private registerFileHandlers ( ) : Disposable {
281- const disposableCollection = new DisposableCollection ( )
282- const languageClientManager = this
283- disposableCollection . push ( registerTextModelContentProvider ( 'file' , {
284- async provideTextContent ( resource : Uri ) : Promise < monaco . editor . ITextModel | null > {
285- return await languageClientManager . infrastructure . getFileContent ( resource , languageClientManager )
286- }
287- } ) )
288- disposableCollection . push ( getServices ( ) . workspace . registerSaveDocumentHandler ( {
289- async saveTextContent ( textDocument , reason ) {
290- await languageClientManager . infrastructure . saveFileContent ?.( textDocument , reason , languageClientManager )
291- }
292- } ) )
293- return disposableCollection
294- }
295274}
296275
297276/**
0 commit comments