3
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
4
*--------------------------------------------------------------------------------------------*/
5
5
6
- import 'vs/css!./media/diffEditor' ;
7
- import * as nls from 'vs/nls' ;
8
6
import * as dom from 'vs/base/browser/dom' ;
7
+ import { createFastDomNode , FastDomNode } from 'vs/base/browser/fastDomNode' ;
8
+ import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from 'vs/base/browser/ui/mouseCursor/mouseCursor' ;
9
+ import { ISashEvent , IVerticalSashLayoutProvider , Orientation , Sash , SashState } from 'vs/base/browser/ui/sash/sash' ;
9
10
import * as assert from 'vs/base/common/assert' ;
10
- import { FastDomNode , createFastDomNode } from 'vs/base/browser/fastDomNode' ;
11
- import { ISashEvent , IVerticalSashLayoutProvider , Sash , SashState , Orientation } from 'vs/base/browser/ui/sash/sash' ;
12
11
import { RunOnceScheduler } from 'vs/base/common/async' ;
12
+ import { Codicon } from 'vs/base/common/codicons' ;
13
13
import { Color } from 'vs/base/common/color' ;
14
+ import { onUnexpectedError } from 'vs/base/common/errors' ;
14
15
import { Emitter , Event } from 'vs/base/common/event' ;
15
16
import { Disposable } from 'vs/base/common/lifecycle' ;
17
+ import { Constants } from 'vs/base/common/uint' ;
16
18
import { URI } from 'vs/base/common/uri' ;
19
+ import 'vs/css!./media/diffEditor' ;
17
20
import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo' ;
18
- import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll' ;
21
+ import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration' ;
22
+ import { ElementSizeObserver } from 'vs/editor/browser/config/elementSizeObserver' ;
19
23
import * as editorBrowser from 'vs/editor/browser/editorBrowser' ;
24
+ import { EditorExtensionsRegistry , IDiffEditorContributionDescription } from 'vs/editor/browser/editorExtensions' ;
20
25
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService' ;
26
+ import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll' ;
21
27
import { CodeEditorWidget , ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditorWidget' ;
22
28
import { DiffReview } from 'vs/editor/browser/widget/diffReview' ;
23
- import { IDiffEditorOptions , EditorLayoutInfo , EditorOption , EditorOptions , EditorFontLigatures , stringSet as validateStringSetOption , boolean as validateBooleanOption , ValidDiffEditorBaseOptions , clampedInt } from 'vs/editor/common/config/editorOptions' ;
29
+ import { IDiffLinesChange , InlineDiffMargin } from 'vs/editor/browser/widget/inlineDiffMargin' ;
30
+ import { WorkerBasedDocumentDiffProvider } from 'vs/editor/browser/widget/workerBasedDocumentDiffProvider' ;
31
+ import { boolean as validateBooleanOption , clampedInt , EditorFontLigatures , EditorLayoutInfo , EditorOption , EditorOptions , IDiffEditorOptions , stringSet as validateStringSetOption , ValidDiffEditorBaseOptions } from 'vs/editor/common/config/editorOptions' ;
32
+ import { FontInfo } from 'vs/editor/common/config/fontInfo' ;
33
+ import { IDimension } from 'vs/editor/common/core/dimension' ;
24
34
import { IPosition , Position } from 'vs/editor/common/core/position' ;
25
35
import { IRange , Range } from 'vs/editor/common/core/range' ;
26
36
import { ISelection , Selection } from 'vs/editor/common/core/selection' ;
27
37
import { StringBuilder } from 'vs/editor/common/core/stringBuilder' ;
38
+ import { IChange , ICharChange , IDiffComputationResult , ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer' ;
28
39
import * as editorCommon from 'vs/editor/common/editorCommon' ;
29
40
import { IModelDecorationsChangeAccessor , IModelDeltaDecoration , ITextModel } from 'vs/editor/common/model' ;
30
41
import { ModelDecorationOptions } from 'vs/editor/common/model/textModel' ;
31
- import { OverviewRulerZone } from 'vs/editor/common/viewModel/overviewZoneManager' ;
42
+ import { ILineBreaksComputer } from 'vs/editor/common/modelLineProjectionData' ;
43
+ import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens' ;
32
44
import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations' ;
33
45
import { RenderLineInput , renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer' ;
34
46
import { IEditorWhitespace , InlineDecoration , InlineDecorationType , IViewModel , ViewLineRenderingData } from 'vs/editor/common/viewModel' ;
47
+ import { OverviewRulerZone } from 'vs/editor/common/viewModel/overviewZoneManager' ;
48
+ import * as nls from 'vs/nls' ;
49
+ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService' ;
35
50
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey' ;
51
+ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView' ;
36
52
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
37
53
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection' ;
38
54
import { INotificationService } from 'vs/platform/notification/common/notification' ;
39
- import { defaultInsertColor , defaultRemoveColor , diffBorder , diffInserted , diffInsertedOutline , diffRemoved , diffRemovedOutline , scrollbarShadow , scrollbarSliderBackground , scrollbarSliderHoverBackground , scrollbarSliderActiveBackground , diffDiagonalFill , diffInsertedLineGutter , diffRemovedLineGutter , diffInsertedLine , diffRemovedLine , diffOverviewRulerInserted , diffOverviewRulerRemoved } from 'vs/platform/theme/common/colorRegistry' ;
40
- import { IColorTheme , IThemeService , getThemeTypeSelector , registerThemingParticipant , ThemeIcon } from 'vs/platform/theme/common/themeService' ;
41
- import { IContextMenuService } from 'vs/platform/contextview/browser/contextView' ;
42
- import { IDiffLinesChange , InlineDiffMargin } from 'vs/editor/browser/widget/inlineDiffMargin' ;
43
- import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService' ;
44
- import { Constants } from 'vs/base/common/uint' ;
45
- import { EditorExtensionsRegistry , IDiffEditorContributionDescription } from 'vs/editor/browser/editorExtensions' ;
46
- import { onUnexpectedError } from 'vs/base/common/errors' ;
47
55
import { IEditorProgressService , IProgressRunner } from 'vs/platform/progress/common/progress' ;
48
- import { ElementSizeObserver } from 'vs/editor/browser/config/elementSizeObserver' ;
49
- import { Codicon } from 'vs/base/common/codicons' ;
50
- import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from 'vs/base/browser/ui/mouseCursor/mouseCursor' ;
51
- import { IViewLineTokens } from 'vs/editor/common/tokens/lineTokens' ;
52
- import { FontInfo } from 'vs/editor/common/config/fontInfo' ;
56
+ import { defaultInsertColor , defaultRemoveColor , diffBorder , diffDiagonalFill , diffInserted , diffInsertedLine , diffInsertedLineGutter , diffInsertedOutline , diffOverviewRulerInserted , diffOverviewRulerRemoved , diffRemoved , diffRemovedLine , diffRemovedLineGutter , diffRemovedOutline , scrollbarShadow , scrollbarSliderActiveBackground , scrollbarSliderBackground , scrollbarSliderHoverBackground } from 'vs/platform/theme/common/colorRegistry' ;
53
57
import { registerIcon } from 'vs/platform/theme/common/iconRegistry' ;
54
- import { ILineBreaksComputer } from 'vs/editor/common/modelLineProjectionData' ;
55
- import { IChange , ICharChange , IDiffComputationResult , ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer' ;
56
- import { IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration' ;
57
- import { IDimension } from 'vs/editor/common/core/dimension' ;
58
58
import { isHighContrast } from 'vs/platform/theme/common/theme' ;
59
- import { IDocumentDiffProvider } from 'vs/editor/common/diff/documentDiffProvider' ;
60
- import { WorkerBasedDocumentDiffProvider } from 'vs/editor/browser/widget/workerBasedDocumentDiffProvider' ;
59
+ import { getThemeTypeSelector , IColorTheme , IThemeService , registerThemingParticipant , ThemeIcon } from 'vs/platform/theme/common/themeService' ;
61
60
62
61
export interface IDiffCodeEditorWidgetOptions {
63
62
originalEditor ?: ICodeEditorWidgetOptions ;
@@ -227,7 +226,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
227
226
228
227
private readonly _updateDecorationsRunner : RunOnceScheduler ;
229
228
230
- private readonly _documentDiffProvider : IDocumentDiffProvider ;
229
+ private readonly _documentDiffProvider : WorkerBasedDocumentDiffProvider ;
231
230
private readonly _contextKeyService : IContextKeyService ;
232
231
private readonly _instantiationService : IInstantiationService ;
233
232
private readonly _codeEditorService : ICodeEditorService ;
@@ -251,7 +250,9 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
251
250
) {
252
251
super ( ) ;
253
252
254
- this . _documentDiffProvider = instantiationService . createInstance ( WorkerBasedDocumentDiffProvider ) ;
253
+ this . _documentDiffProvider = this . _register ( instantiationService . createInstance ( WorkerBasedDocumentDiffProvider , options ) ) ;
254
+ this . _register ( this . _documentDiffProvider . onDidChange ( e => this . _beginUpdateDecorationsSoon ( ) ) ) ;
255
+
255
256
this . _codeEditorService = codeEditorService ;
256
257
this . _contextKeyService = this . _register ( contextKeyService . createScoped ( domElement ) ) ;
257
258
this . _instantiationService = instantiationService . createChild ( new ServiceCollection ( [ IContextKeyService , this . _contextKeyService ] ) ) ;
@@ -762,7 +763,8 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
762
763
this . _options = newOptions ;
763
764
764
765
const beginUpdateDecorations = ( changed . ignoreTrimWhitespace || changed . renderIndicators || changed . renderMarginRevertIcon ) ;
765
- const beginUpdateDecorationsSoon = ( this . _isVisible && ( changed . maxComputationTime || changed . maxFileSize || changed . diffAlgorithm ) ) ;
766
+ const beginUpdateDecorationsSoon = ( this . _isVisible && ( changed . maxComputationTime || changed . maxFileSize ) ) ;
767
+ this . _documentDiffProvider . setOptions ( newOptions ) ;
766
768
767
769
if ( beginUpdateDecorations ) {
768
770
this . _beginUpdateDecorations ( ) ;
@@ -1092,7 +1094,11 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
1092
1094
}
1093
1095
1094
1096
private _beginUpdateDecorations ( ) : void {
1095
- this . _beginUpdateDecorationsTimeout = - 1 ;
1097
+ if ( this . _beginUpdateDecorationsTimeout !== - 1 ) {
1098
+ // Cancel any pending requests in case this method is called directly
1099
+ window . clearTimeout ( this . _beginUpdateDecorationsTimeout ) ;
1100
+ this . _beginUpdateDecorationsTimeout = - 1 ;
1101
+ }
1096
1102
const currentOriginalModel = this . _originalEditor . getModel ( ) ;
1097
1103
const currentModifiedModel = this . _modifiedEditor . getModel ( ) ;
1098
1104
if ( ! currentOriginalModel || ! currentModifiedModel ) {
@@ -1126,8 +1132,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
1126
1132
this . _setState ( editorBrowser . DiffEditorState . ComputingDiff ) ;
1127
1133
this . _documentDiffProvider . computeDiff ( currentOriginalModel , currentModifiedModel , {
1128
1134
ignoreTrimWhitespace : this . _options . ignoreTrimWhitespace ,
1129
- maxComputationTime : this . _options . maxComputationTime ,
1130
- diffAlgorithm : this . _options . diffAlgorithm ,
1135
+ maxComputationTimeMs : this . _options . maxComputationTime ,
1131
1136
} ) . then ( result => {
1132
1137
if ( currentToken === this . _diffComputationToken
1133
1138
&& currentOriginalModel === this . _originalEditor . getModel ( )
0 commit comments