From 6fc79968aba0b0cb5cc320a3415f0b41abc82ab2 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 13 Aug 2021 11:24:12 -0700 Subject: [PATCH] testing: add gutterEnabled setting Fixes #130542 --- .../testing/browser/testingDecorations.ts | 35 ++++++++++++------- .../contrib/testing/common/configuration.ts | 7 ++++ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/vs/workbench/contrib/testing/browser/testingDecorations.ts b/src/vs/workbench/contrib/testing/browser/testingDecorations.ts index 314f7bc83cc0..0a44ecb4f441 100644 --- a/src/vs/workbench/contrib/testing/browser/testingDecorations.ts +++ b/src/vs/workbench/contrib/testing/browser/testingDecorations.ts @@ -73,6 +73,7 @@ export class TestingDecorations extends Disposable implements IEditorContributio constructor( private readonly editor: ICodeEditor, @ICodeEditorService private readonly codeEditorService: ICodeEditorService, + @IConfigurationService private readonly configurationService: IConfigurationService, @ITestService private readonly testService: ITestService, @ITestResultService private readonly results: ITestResultService, @IInstantiationService private readonly instantiationService: IInstantiationService, @@ -127,6 +128,12 @@ export class TestingDecorations extends Disposable implements IEditorContributio } })); + this._register(configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration(TestingConfigKeys.GutterEnabled)) { + this.setDecorations(this.currentUri); + } + })); + this._register(Event.any( this.results.onResultsChanged, this.testService.excluded.onTestExclusionsChanged, @@ -167,21 +174,25 @@ export class TestingDecorations extends Disposable implements IEditorContributio return; } + const gutterEnabled = getTestingConfiguration(this.configurationService, TestingConfigKeys.GutterEnabled); + this.editor.changeDecorations(accessor => { const newDecorations: ITestDecoration[] = []; - for (const test of this.testService.collection.all) { - if (!test.item.range || test.item.uri?.toString() !== uri.toString()) { - continue; - } + if (gutterEnabled) { + for (const test of this.testService.collection.all) { + if (!test.item.range || test.item.uri?.toString() !== uri.toString()) { + continue; + } - const stateLookup = this.results.getStateById(test.item.extId); - const line = test.item.range.startLineNumber; - const resultItem = stateLookup?.[1]; - const existing = newDecorations.findIndex(d => d instanceof RunTestDecoration && d.line === line); - if (existing !== -1) { - newDecorations[existing] = (newDecorations[existing] as RunTestDecoration).merge(test, resultItem); - } else { - newDecorations.push(this.instantiationService.createInstance(RunSingleTestDecoration, test, this.editor, stateLookup?.[1])); + const stateLookup = this.results.getStateById(test.item.extId); + const line = test.item.range.startLineNumber; + const resultItem = stateLookup?.[1]; + const existing = newDecorations.findIndex(d => d instanceof RunTestDecoration && d.line === line); + if (existing !== -1) { + newDecorations[existing] = (newDecorations[existing] as RunTestDecoration).merge(test, resultItem); + } else { + newDecorations.push(this.instantiationService.createInstance(RunSingleTestDecoration, test, this.editor, stateLookup?.[1])); + } } } diff --git a/src/vs/workbench/contrib/testing/common/configuration.ts b/src/vs/workbench/contrib/testing/common/configuration.ts index cc075d3ff01d..a24f854765a7 100644 --- a/src/vs/workbench/contrib/testing/common/configuration.ts +++ b/src/vs/workbench/contrib/testing/common/configuration.ts @@ -14,6 +14,7 @@ export const enum TestingConfigKeys { AutoOpenPeekViewDuringAutoRun = 'testing.automaticallyOpenPeekViewDuringAutoRun', FollowRunningTest = 'testing.followRunningTest', DefaultGutterClickAction = 'testing.defaultGutterClickAction', + GutterEnabled = 'testing.gutterEnabled', } export const enum AutoOpenPeekViewWhen { @@ -92,6 +93,11 @@ export const testingConfiguation: IConfigurationNode = { ], default: DefaultGutterClickAction.Run, }, + [TestingConfigKeys.GutterEnabled]: { + description: localize('testing.gutterEnabled', 'Controls whether test decorations are shown in the editor gutter.'), + type: 'boolean', + default: true, + }, } }; @@ -102,6 +108,7 @@ export interface ITestingConfiguration { [TestingConfigKeys.AutoOpenPeekViewDuringAutoRun]: boolean; [TestingConfigKeys.FollowRunningTest]: boolean; [TestingConfigKeys.DefaultGutterClickAction]: DefaultGutterClickAction; + [TestingConfigKeys.GutterEnabled]: boolean; } export const getTestingConfiguration = (config: IConfigurationService, key: K) => config.getValue(key);