33 * Licensed under the MIT License. See License.txt in the project root for license information.
44 *--------------------------------------------------------------------------------------------*/
55
6- import 'vs/css!./media/diffEditor' ;
7- import * as nls from 'vs/nls' ;
86import * 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' ;
910import * 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' ;
1211import { RunOnceScheduler } from 'vs/base/common/async' ;
12+ import { Codicon } from 'vs/base/common/codicons' ;
1313import { Color } from 'vs/base/common/color' ;
14+ import { onUnexpectedError } from 'vs/base/common/errors' ;
1415import { Emitter , Event } from 'vs/base/common/event' ;
1516import { Disposable } from 'vs/base/common/lifecycle' ;
17+ import { Constants } from 'vs/base/common/uint' ;
1618import { URI } from 'vs/base/common/uri' ;
19+ import 'vs/css!./media/diffEditor' ;
1720import { 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' ;
1923import * as editorBrowser from 'vs/editor/browser/editorBrowser' ;
24+ import { EditorExtensionsRegistry , IDiffEditorContributionDescription } from 'vs/editor/browser/editorExtensions' ;
2025import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService' ;
26+ import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll' ;
2127import { CodeEditorWidget , ICodeEditorWidgetOptions } from 'vs/editor/browser/widget/codeEditorWidget' ;
2228import { 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' ;
2434import { IPosition , Position } from 'vs/editor/common/core/position' ;
2535import { IRange , Range } from 'vs/editor/common/core/range' ;
2636import { ISelection , Selection } from 'vs/editor/common/core/selection' ;
2737import { StringBuilder } from 'vs/editor/common/core/stringBuilder' ;
38+ import { IChange , ICharChange , IDiffComputationResult , ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer' ;
2839import * as editorCommon from 'vs/editor/common/editorCommon' ;
2940import { IModelDecorationsChangeAccessor , IModelDeltaDecoration , ITextModel } from 'vs/editor/common/model' ;
3041import { 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' ;
3244import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations' ;
3345import { RenderLineInput , renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer' ;
3446import { 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' ;
3550import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey' ;
51+ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView' ;
3652import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
3753import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection' ;
3854import { 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' ;
4755import { 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' ;
5357import { 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' ;
5858import { 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' ;
6160
6261export interface IDiffCodeEditorWidgetOptions {
6362 originalEditor ?: ICodeEditorWidgetOptions ;
@@ -227,7 +226,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
227226
228227 private readonly _updateDecorationsRunner : RunOnceScheduler ;
229228
230- private readonly _documentDiffProvider : IDocumentDiffProvider ;
229+ private readonly _documentDiffProvider : WorkerBasedDocumentDiffProvider ;
231230 private readonly _contextKeyService : IContextKeyService ;
232231 private readonly _instantiationService : IInstantiationService ;
233232 private readonly _codeEditorService : ICodeEditorService ;
@@ -251,7 +250,9 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
251250 ) {
252251 super ( ) ;
253252
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+
255256 this . _codeEditorService = codeEditorService ;
256257 this . _contextKeyService = this . _register ( contextKeyService . createScoped ( domElement ) ) ;
257258 this . _instantiationService = instantiationService . createChild ( new ServiceCollection ( [ IContextKeyService , this . _contextKeyService ] ) ) ;
@@ -762,7 +763,8 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
762763 this . _options = newOptions ;
763764
764765 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 ) ;
766768
767769 if ( beginUpdateDecorations ) {
768770 this . _beginUpdateDecorations ( ) ;
@@ -1092,7 +1094,11 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
10921094 }
10931095
10941096 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+ }
10961102 const currentOriginalModel = this . _originalEditor . getModel ( ) ;
10971103 const currentModifiedModel = this . _modifiedEditor . getModel ( ) ;
10981104 if ( ! currentOriginalModel || ! currentModifiedModel ) {
@@ -1126,8 +1132,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
11261132 this . _setState ( editorBrowser . DiffEditorState . ComputingDiff ) ;
11271133 this . _documentDiffProvider . computeDiff ( currentOriginalModel , currentModifiedModel , {
11281134 ignoreTrimWhitespace : this . _options . ignoreTrimWhitespace ,
1129- maxComputationTime : this . _options . maxComputationTime ,
1130- diffAlgorithm : this . _options . diffAlgorithm ,
1135+ maxComputationTimeMs : this . _options . maxComputationTime ,
11311136 } ) . then ( result => {
11321137 if ( currentToken === this . _diffComputationToken
11331138 && currentOriginalModel === this . _originalEditor . getModel ( )
0 commit comments