Skip to content

Commit 0a55dcf

Browse files
committed
Show hint when the diff algorithm quits early
1 parent 3fc780d commit 0a55dcf

3 files changed

Lines changed: 18 additions & 2 deletions

File tree

src/vs/editor/browser/widget/diffEditorWidget.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,9 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
632632

633633
if (typeof newOptions.maximumComputationTime !== 'undefined') {
634634
this._maximumComputationTime = newOptions.maximumComputationTime;
635+
if (this._isVisible) {
636+
this._beginUpdateDecorationsSoon();
637+
}
635638
}
636639

637640
let beginUpdateDecorations = false;

src/vs/editor/common/config/commonEditorConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ const editorConfiguration: IConfigurationNode = {
465465
'diffEditor.maximumComputationTime': {
466466
type: 'number',
467467
default: 5000,
468-
description: nls.localize('maximumComputationTime', "Timeout in milliseconds after which diff computation is cancelled.")
468+
description: nls.localize('maximumComputationTime', "Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.")
469469
},
470470
'diffEditor.renderSideBySide': {
471471
type: 'boolean',

src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configur
1515

1616
const enum WidgetState {
1717
Hidden,
18-
HintWhitespace
18+
HintWhitespace,
19+
HintTimeout
1920
}
2021

2122
class DiffEditorHelperContribution extends Disposable implements IEditorContribution {
@@ -47,6 +48,9 @@ class DiffEditorHelperContribution extends Disposable implements IEditorContribu
4748
if (this._diffEditor.ignoreTrimWhitespace && diffComputationResult.changes.length === 0 && !diffComputationResult.identical) {
4849
return WidgetState.HintWhitespace;
4950
}
51+
if (diffComputationResult.quitEarly) {
52+
return WidgetState.HintTimeout;
53+
}
5054
return WidgetState.Hidden;
5155
}
5256

@@ -71,12 +75,21 @@ class DiffEditorHelperContribution extends Disposable implements IEditorContribu
7175
this._helperWidgetListener = this._helperWidget.onClick(() => this._onDidClickHelperWidget());
7276
this._helperWidget.render();
7377
}
78+
79+
if (this._state === WidgetState.HintTimeout) {
80+
this._helperWidget = this._instantiationService.createInstance(FloatingClickWidget, this._diffEditor.getModifiedEditor(), nls.localize('hintTimeout', "Remove diff computation timeout"), null);
81+
this._helperWidgetListener = this._helperWidget.onClick(() => this._onDidClickHelperWidget());
82+
this._helperWidget.render();
83+
}
7484
}
7585

7686
private _onDidClickHelperWidget(): void {
7787
if (this._state === WidgetState.HintWhitespace) {
7888
this._configurationService.updateValue('diffEditor.ignoreTrimWhitespace', false, ConfigurationTarget.USER);
7989
}
90+
if (this._state === WidgetState.HintTimeout) {
91+
this._configurationService.updateValue('diffEditor.maximumComputationTime', 0, ConfigurationTarget.USER);
92+
}
8093
}
8194

8295
dispose(): void {

0 commit comments

Comments
 (0)