From aba193c3a4196eaddca83054c89fb3bfb43bd8e4 Mon Sep 17 00:00:00 2001 From: Phil Price Date: Tue, 23 May 2017 09:57:41 -0700 Subject: [PATCH] Ensure that changing codeLens.enabled responds immediately --- .../merge-conflict/src/codelensProvider.ts | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/extensions/merge-conflict/src/codelensProvider.ts b/extensions/merge-conflict/src/codelensProvider.ts index 6788a4332ab..fb31f4c382d 100644 --- a/extensions/merge-conflict/src/codelensProvider.ts +++ b/extensions/merge-conflict/src/codelensProvider.ts @@ -10,7 +10,7 @@ const localize = loadMessageBundle(); export default class MergeConflictCodeLensProvider implements vscode.CodeLensProvider, vscode.Disposable { - private disposables: vscode.Disposable[] = []; + private codeLensRegistrationHandle: vscode.Disposable | null; private config: interfaces.IExtensionConfiguration; constructor(private context: vscode.ExtensionContext, private tracker: interfaces.IDocumentMergeConflictTracker) { @@ -18,18 +18,31 @@ export default class MergeConflictCodeLensProvider implements vscode.CodeLensPro begin(config: interfaces.IExtensionConfiguration) { this.config = config; - this.disposables.push( - vscode.languages.registerCodeLensProvider({ pattern: '**/*' }, this) - ); + + if (this.config.enableCodeLens) { + this.registerCodeLensProvider(); + } } - configurationUpdated(config: interfaces.IExtensionConfiguration) { - this.config = config; + configurationUpdated(updatedConfig: interfaces.IExtensionConfiguration) { + + if (updatedConfig.enableCodeLens === false && this.codeLensRegistrationHandle) { + this.codeLensRegistrationHandle.dispose(); + this.codeLensRegistrationHandle = null; + } + else if (updatedConfig.enableCodeLens === true && !this.codeLensRegistrationHandle) { + this.registerCodeLensProvider(); + } + + this.config = updatedConfig; } + dispose() { - this.disposables.forEach(disposable => disposable.dispose()); - this.disposables = []; + if (this.codeLensRegistrationHandle) { + this.codeLensRegistrationHandle.dispose(); + this.codeLensRegistrationHandle = null; + } } async provideCodeLenses(document: vscode.TextDocument, token: vscode.CancellationToken): Promise { @@ -81,4 +94,8 @@ export default class MergeConflictCodeLensProvider implements vscode.CodeLensPro return items; } + + private registerCodeLensProvider() { + this.codeLensRegistrationHandle = vscode.languages.registerCodeLensProvider({ pattern: '**/*' }, this); + } }