From 0a55dcfccbb19b8b2e7296e050ebc9f5836b2371 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Wed, 16 Oct 2019 11:27:44 +0200 Subject: [PATCH] Show hint when the diff algorithm quits early --- src/vs/editor/browser/widget/diffEditorWidget.ts | 3 +++ src/vs/editor/common/config/commonEditorConfig.ts | 2 +- .../codeEditor/browser/diffEditorHelper.ts | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index 369aa253237..31bbb08158d 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -632,6 +632,9 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE if (typeof newOptions.maximumComputationTime !== 'undefined') { this._maximumComputationTime = newOptions.maximumComputationTime; + if (this._isVisible) { + this._beginUpdateDecorationsSoon(); + } } let beginUpdateDecorations = false; diff --git a/src/vs/editor/common/config/commonEditorConfig.ts b/src/vs/editor/common/config/commonEditorConfig.ts index 3ebc87f80b9..a5cc33c3967 100644 --- a/src/vs/editor/common/config/commonEditorConfig.ts +++ b/src/vs/editor/common/config/commonEditorConfig.ts @@ -465,7 +465,7 @@ const editorConfiguration: IConfigurationNode = { 'diffEditor.maximumComputationTime': { type: 'number', default: 5000, - description: nls.localize('maximumComputationTime', "Timeout in milliseconds after which diff computation is cancelled.") + description: nls.localize('maximumComputationTime', "Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.") }, 'diffEditor.renderSideBySide': { type: 'boolean', diff --git a/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts b/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts index eed47f4fad8..7aea59127a7 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts @@ -15,7 +15,8 @@ import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configur const enum WidgetState { Hidden, - HintWhitespace + HintWhitespace, + HintTimeout } class DiffEditorHelperContribution extends Disposable implements IEditorContribution { @@ -47,6 +48,9 @@ class DiffEditorHelperContribution extends Disposable implements IEditorContribu if (this._diffEditor.ignoreTrimWhitespace && diffComputationResult.changes.length === 0 && !diffComputationResult.identical) { return WidgetState.HintWhitespace; } + if (diffComputationResult.quitEarly) { + return WidgetState.HintTimeout; + } return WidgetState.Hidden; } @@ -71,12 +75,21 @@ class DiffEditorHelperContribution extends Disposable implements IEditorContribu this._helperWidgetListener = this._helperWidget.onClick(() => this._onDidClickHelperWidget()); this._helperWidget.render(); } + + if (this._state === WidgetState.HintTimeout) { + this._helperWidget = this._instantiationService.createInstance(FloatingClickWidget, this._diffEditor.getModifiedEditor(), nls.localize('hintTimeout', "Remove diff computation timeout"), null); + this._helperWidgetListener = this._helperWidget.onClick(() => this._onDidClickHelperWidget()); + this._helperWidget.render(); + } } private _onDidClickHelperWidget(): void { if (this._state === WidgetState.HintWhitespace) { this._configurationService.updateValue('diffEditor.ignoreTrimWhitespace', false, ConfigurationTarget.USER); } + if (this._state === WidgetState.HintTimeout) { + this._configurationService.updateValue('diffEditor.maximumComputationTime', 0, ConfigurationTarget.USER); + } } dispose(): void { -- GitLab