Jelajahi Sumber

on model remove dispose listener, clear timeout, fixes #10

Johannes Rieken 9 tahun lalu
induk
melakukan
3248b9469e
1 mengubah file dengan 13 tambahan dan 2 penghapusan
  1. 13 2
      src/languageFeatures.ts

+ 13 - 2
src/languageFeatures.ts

@@ -58,16 +58,27 @@ export class DiagnostcsAdapter extends Adapter {
 			}
 
 			let handle: number;
-			this._listener[model.uri.toString()] = model.onDidChangeContent(() => {
+			const changeSubscription = model.onDidChangeContent(() => {
 				clearTimeout(handle);
 				handle = setTimeout(() => this._doValidate(model.uri), 500);
 			});
 
+			this._listener[model.uri.toString()] = {
+				dispose() {
+					changeSubscription.dispose();
+					clearTimeout(handle);
+				}
+			};
+
 			this._doValidate(model.uri);
 		};
 
 		const onModelRemoved = (model: monaco.editor.IModel): void => {
-			delete this._listener[model.uri.toString()];
+			const key = model.uri.toString();
+			if (this._listener[key]) {
+				this._listener[key].dispose();
+				delete this._listener[key];
+			}
 		};
 
 		this._disposables.push(monaco.editor.onDidCreateModel(onModelAdd));