11
22import * as monaco from 'monaco-editor'
33import {
4- Services , MonacoToProtocolConverter , ProtocolToMonacoConverter , MonacoLanguages , TextDocumentSaveReason , MonacoCommands
4+ Services , MonacoToProtocolConverter , ProtocolToMonacoConverter , MonacoLanguages , TextDocumentSaveReason , MonacoCommands , DisposableCollection
55} from 'monaco-languageclient'
6- import { RenameFile , CreateFile , WorkspaceEdit } from 'vscode-languageserver-protocol'
6+ import { RenameFile , CreateFile , WorkspaceEdit , Disposable } from 'vscode-languageserver-protocol'
77import WatchableConsoleWindow from './services/WatchableConsoleWindow'
88import CodinGameMonacoWorkspace from './services/CodinGameMonacoWorkspace'
99import { Infrastructure } from './infrastructure'
@@ -29,9 +29,10 @@ function installCommands (services: CgMonacoServices) {
2929 } )
3030}
3131
32- function autoSaveModels ( services : CgMonacoServices ) {
32+ function autoSaveModels ( services : CgMonacoServices ) : Disposable {
33+ const disposableCollection = new DisposableCollection ( )
3334 const timeoutMap = new Map < string , number > ( )
34- services . workspace . onDidChangeTextDocument ( e => {
35+ disposableCollection . push ( services . workspace . onDidChangeTextDocument ( e => {
3536 const timeout = timeoutMap . get ( e . textDocument . uri )
3637 if ( timeout != null ) {
3738 window . clearTimeout ( timeout )
@@ -43,7 +44,13 @@ function autoSaveModels (services: CgMonacoServices) {
4344 console . error ( '[LSP]' , `Unable to save the document ${ e . textDocument . uri . toString ( ) } ` , err )
4445 } )
4546 } , 500 ) )
46- } )
47+ } ) )
48+ disposableCollection . push ( Disposable . create ( ( ) => {
49+ for ( const timeout of Array . from ( timeoutMap . values ( ) ) ) {
50+ window . clearTimeout ( timeout )
51+ }
52+ } ) )
53+ return disposableCollection
4754}
4855
4956let services : CgMonacoServices | null = null
0 commit comments