diff --git a/packages/vscode-typescript/src/client.ts b/packages/vscode-typescript/src/client.ts index b8bd17df8540a..68729770dbf21 100644 --- a/packages/vscode-typescript/src/client.ts +++ b/packages/vscode-typescript/src/client.ts @@ -314,9 +314,8 @@ export class Client implements vscode.Disposable { logLevelListener, serverTelemetryListener, registerSourceDefinitionFeature(this.client), - registerOnAutoInsertFeature(this.documentSelector, this.client), ); - // Register the selector-scoped custom providers (hover, multi-document highlight). These start + // Register the selector-scoped custom providers (hover, multi-document highlight, on-auto-insert). These start // scoped to the static jsTs selector and expand as content-mapped extensions register. this.registerSelectorScopedFeatures(); } @@ -383,6 +382,7 @@ export class Client implements vscode.Disposable { this.selectorScopedFeatures.push( registerMultiDocumentHighlightFeature(selector, this.client), registerHoverFeature(selector, this.client), + registerOnAutoInsertFeature(selector, this.client), ); } diff --git a/packages/vscode-typescript/src/languageFeatures/util/dependentRegistration.ts b/packages/vscode-typescript/src/languageFeatures/util/dependentRegistration.ts index 2c9608c2ae14f..e119bac392b60 100644 --- a/packages/vscode-typescript/src/languageFeatures/util/dependentRegistration.ts +++ b/packages/vscode-typescript/src/languageFeatures/util/dependentRegistration.ts @@ -3,14 +3,15 @@ import * as vscode from "vscode"; export class Condition { private _value: boolean; private isDisposed = false; + private readonly updateListener: vscode.Disposable; constructor( private readonly getValue: () => boolean, - onUpdate: (handler: () => void) => void, + onUpdate: (handler: () => void) => vscode.Disposable, ) { this._value = this.getValue(); - onUpdate(() => { + this.updateListener = onUpdate(() => { const newValue = this.getValue(); if (newValue !== this._value) { this._value = newValue; @@ -31,6 +32,7 @@ export class Condition { return; } this.isDisposed = true; + this.updateListener.dispose(); this._onDidChange.dispose(); } }