Skip to content

Commit 393099a

Browse files
authored
Merge pull request microsoft#153378 from microsoft/3wm
2 parents 67c2833 + 48a7f63 commit 393099a

File tree

8 files changed

+327
-114
lines changed

8 files changed

+327
-114
lines changed

src/vs/editor/common/services/editorSimpleWorker.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { IRequestHandler } from 'vs/base/common/worker/simpleWorker';
1111
import { IPosition, Position } from 'vs/editor/common/core/position';
1212
import { IRange, Range } from 'vs/editor/common/core/range';
1313
import { DiffComputer, IChange, IDiffComputationResult } from 'vs/editor/common/diff/diffComputer';
14-
import { EndOfLineSequence } from 'vs/editor/common/model';
14+
import { EndOfLineSequence, ITextModel } from 'vs/editor/common/model';
1515
import { IMirrorTextModel, IModelChangedEvent, MirrorTextModel as BaseMirrorModel } from 'vs/editor/common/model/mirrorTextModel';
1616
import { ensureValidWordDefinition, getWordAtText, IWordAtPosition } from 'vs/editor/common/core/wordHelper';
1717
import { IInplaceReplaceSupportResult, ILink, TextEdit } from 'vs/editor/common/languages';
@@ -388,8 +388,12 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable {
388388
return null;
389389
}
390390

391-
const originalLines = original.getLinesContent();
392-
const modifiedLines = modified.getLinesContent();
391+
return EditorSimpleWorker.computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime);
392+
}
393+
394+
public static computeDiff(originalTextModel: ICommonModel | ITextModel, modifiedTextModel: ICommonModel | ITextModel, ignoreTrimWhitespace: boolean, maxComputationTime: number): IDiffComputationResult | null {
395+
const originalLines = originalTextModel.getLinesContent();
396+
const modifiedLines = modifiedTextModel.getLinesContent();
393397
const diffComputer = new DiffComputer(originalLines, modifiedLines, {
394398
shouldComputeCharChanges: true,
395399
shouldPostProcessCharChanges: true,
@@ -399,15 +403,15 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable {
399403
});
400404

401405
const diffResult = diffComputer.computeDiff();
402-
const identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(original, modified));
406+
const identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel));
403407
return {
404408
quitEarly: diffResult.quitEarly,
405409
identical: identical,
406410
changes: diffResult.changes
407411
};
408412
}
409413

410-
private _modelsAreIdentical(original: ICommonModel, modified: ICommonModel): boolean {
414+
private static _modelsAreIdentical(original: ICommonModel | ITextModel, modified: ICommonModel | ITextModel): boolean {
411415
const originalLineCount = original.getLineCount();
412416
const modifiedLineCount = modified.getLineCount();
413417
if (originalLineCount !== modifiedLineCount) {

src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { ILabelService } from 'vs/platform/label/common/label';
1616
import { IEditorIdentifier, IUntypedEditorInput } from 'vs/workbench/common/editor';
1717
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
1818
import { AbstractTextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput';
19+
import { EditorWorkerServiceDiffComputer } from 'vs/workbench/contrib/mergeEditor/browser/model/diffComputer';
1920
import { autorun } from 'vs/workbench/contrib/audioCues/browser/observable';
2021
import { MergeEditorModel } from 'vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel';
2122
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
@@ -109,7 +110,8 @@ export class MergeEditorInput extends AbstractTextResourceEditorInput implements
109110
this.input2.title,
110111
this.input2.detail,
111112
this.input2.description,
112-
result.object.textEditorModel
113+
result.object.textEditorModel,
114+
this._instaService.createInstance(EditorWorkerServiceDiffComputer),
113115
);
114116

115117
await this._model.onInitialized;

src/vs/workbench/contrib/mergeEditor/browser/model/diffComputer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export class EditorWorkerServiceDiffComputer implements IDiffComputer {
2424

2525
async computeDiff(textModel1: ITextModel, textModel2: ITextModel): Promise<IDiffComputerResult> {
2626
const diffs = await this.editorWorkerService.computeDiff(textModel1.uri, textModel2.uri, false, 1000);
27-
if (!diffs || diffs.quitEarly) {
27+
if (!diffs) {
2828
return { diffs: null };
2929
}
3030
return { diffs: EditorWorkerServiceDiffComputer.fromDiffComputationResult(diffs, textModel1, textModel2) };
@@ -53,7 +53,7 @@ function fromLineChange(lineChange: ILineChange, originalTextModel: ITextModel,
5353
}
5454

5555
let innerDiffs = lineChange.charChanges?.map(c => rangeMappingFromCharChange(c, originalTextModel, modifiedTextModel)).filter(isDefined);
56-
if (!innerDiffs) {
56+
if (!innerDiffs || innerDiffs.length === 0) {
5757
innerDiffs = [rangeMappingFromLineRanges(originalRange, modifiedRange)];
5858
}
5959

src/vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,24 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { compareBy, CompareResult, tieBreakComparators, equals, numberComparator } from 'vs/base/common/arrays';
6+
import { compareBy, CompareResult, equals, numberComparator, tieBreakComparators } from 'vs/base/common/arrays';
77
import { BugIndicatingError } from 'vs/base/common/errors';
88
import { splitLines } from 'vs/base/common/strings';
99
import { Constants } from 'vs/base/common/uint';
1010
import { Position } from 'vs/editor/common/core/position';
1111
import { Range } from 'vs/editor/common/core/range';
12+
import { ILanguageService } from 'vs/editor/common/languages/language';
1213
import { ITextModel } from 'vs/editor/common/model';
13-
import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker';
14+
import { IModelService } from 'vs/editor/common/services/model';
1415
import { EditorModel } from 'vs/workbench/common/editor/editorModel';
1516
import { autorunHandleChanges, derivedObservable, IObservable, IReader, ITransaction, keepAlive, ObservableValue, transaction, waitForState } from 'vs/workbench/contrib/audioCues/browser/observable';
16-
import { EditorWorkerServiceDiffComputer } from 'vs/workbench/contrib/mergeEditor/browser/model/diffComputer';
17-
import { DetailedLineRangeMapping, DocumentMapping, LineRangeMapping } from 'vs/workbench/contrib/mergeEditor/browser/model/mapping';
17+
import { IDiffComputer } from 'vs/workbench/contrib/mergeEditor/browser/model/diffComputer';
1818
import { LineRangeEdit, RangeEdit } from 'vs/workbench/contrib/mergeEditor/browser/model/editing';
1919
import { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';
20+
import { DetailedLineRangeMapping, DocumentMapping, LineRangeMapping } from 'vs/workbench/contrib/mergeEditor/browser/model/mapping';
2021
import { TextModelDiffChangeReason, TextModelDiffs, TextModelDiffState } from 'vs/workbench/contrib/mergeEditor/browser/model/textModelDiffs';
21-
import { concatArrays, leftJoin, elementAtOrUndefined } from 'vs/workbench/contrib/mergeEditor/browser/utils';
22+
import { concatArrays, elementAtOrUndefined, leftJoin } from 'vs/workbench/contrib/mergeEditor/browser/utils';
2223
import { ModifiedBaseRange, ModifiedBaseRangeState } from './modifiedBaseRange';
23-
import { IModelService } from 'vs/editor/common/services/model';
24-
import { ILanguageService } from 'vs/editor/common/languages/language';
2524

2625
export const enum MergeEditorModelState {
2726
initializing = 1,
@@ -30,7 +29,6 @@ export const enum MergeEditorModelState {
3029
}
3130

3231
export class MergeEditorModel extends EditorModel {
33-
private readonly diffComputer = new EditorWorkerServiceDiffComputer(this.editorWorkerService);
3432
private readonly input1TextModelDiffs = this._register(new TextModelDiffs(this.base, this.input1, this.diffComputer));
3533
private readonly input2TextModelDiffs = this._register(new TextModelDiffs(this.base, this.input2, this.diffComputer));
3634
private readonly resultTextModelDiffs = this._register(new TextModelDiffs(this.base, this.result, this.diffComputer));
@@ -138,7 +136,7 @@ export class MergeEditorModel extends EditorModel {
138136
readonly input2Detail: string | undefined,
139137
readonly input2Description: string | undefined,
140138
readonly result: ITextModel,
141-
@IEditorWorkerService private readonly editorWorkerService: IEditorWorkerService,
139+
private readonly diffComputer: IDiffComputer,
142140
@IModelService private readonly modelService: IModelService,
143141
@ILanguageService private readonly languageService: ILanguageService,
144142
) {

src/vs/workbench/contrib/mergeEditor/browser/view/colors.ts

Lines changed: 24 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -7,114 +7,50 @@ import { localize } from 'vs/nls';
77
import { registerColor } from 'vs/platform/theme/common/colorRegistry';
88

99
export const diff = registerColor(
10-
'mergeEditor.diff',
11-
{
12-
dark: '#9bb95533',
13-
light: '#9bb95533',
14-
hcDark: '#9bb95533',
15-
hcLight: '#9bb95533',
16-
},
17-
localize(
18-
'mergeEditor.diff',
19-
'The foreground color for changes.'
20-
)
10+
'mergeEditor.change.background',
11+
{ dark: '#9bb95533', light: '#9bb95533', hcDark: '#9bb95533', hcLight: '#9bb95533', },
12+
localize('mergeEditor.change.background', 'The background color for changes.')
2113
);
2214

2315
export const diffWord = registerColor(
24-
'mergeEditor.diff.word',
25-
{
26-
dark: '#9bb9551e',
27-
light: '#9bb9551e',
28-
hcDark: '#9bb9551e',
29-
hcLight: '#9bb9551e',
30-
},
31-
localize(
32-
'mergeEditor.diff.word',
33-
'The foreground color for word changes.'
34-
)
16+
'mergeEditor.change.word.background',
17+
{ dark: '#9bb9551e', light: '#9bb9551e', hcDark: '#9bb9551e', hcLight: '#9bb9551e', },
18+
localize('mergeEditor.change.word.background', 'The background color for word changes.')
3519
);
3620

3721
export const conflictBorderUnhandledUnfocused = registerColor(
38-
'mergeEditor.conflictBorder.unhandledUnfocused',
39-
{
40-
dark: '#ffa6007a',
41-
light: '#ffa6007a',
42-
hcDark: '#ffa6007a',
43-
hcLight: '#ffa6007a',
44-
},
45-
localize(
46-
'mergeEditor.conflictBorder.unhandledUnfocused',
47-
'The border color of unhandled unfocused conflicts.'
48-
)
22+
'mergeEditor.conflict.unhandledUnfocused.border',
23+
{ dark: '#ffa6007a', light: '#ffa6007a', hcDark: '#ffa6007a', hcLight: '#ffa6007a', },
24+
localize('mergeEditor.conflict.unhandledUnfocused.border', 'The border color of unhandled unfocused conflicts.')
4925
);
5026

5127
export const conflictBorderUnhandledFocused = registerColor(
52-
'mergeEditor.conflictBorder.unhandledFocused',
53-
{
54-
dark: '#ffa600',
55-
light: '#ffa600',
56-
hcDark: '#ffa600',
57-
hcLight: '#ffa600',
58-
},
59-
localize(
60-
'mergeEditor.conflictBorder.unhandledFocused',
61-
'The border color of unhandled focused conflicts.'
62-
)
28+
'mergeEditor.conflict.unhandledFocused.border',
29+
{ dark: '#ffa600', light: '#ffa600', hcDark: '#ffa600', hcLight: '#ffa600', },
30+
localize('mergeEditor.conflict.unhandledFocused.border', 'The border color of unhandled focused conflicts.')
6331
);
6432

6533
export const conflictBorderHandledUnfocused = registerColor(
66-
'mergeEditor.conflictBorder.handledUnfocused',
67-
{
68-
dark: '#86868649',
69-
light: '#86868649',
70-
hcDark: '#86868649',
71-
hcLight: '#86868649',
72-
},
73-
localize(
74-
'mergeEditor.conflictBorder.handledUnfocused',
75-
'The border color of handled unfocused conflicts.'
76-
)
34+
'mergeEditor.conflict.handledUnfocused.border',
35+
{ dark: '#86868649', light: '#86868649', hcDark: '#86868649', hcLight: '#86868649', },
36+
localize('mergeEditor.conflict.handledUnfocused.border', 'The border color of handled unfocused conflicts.')
7737
);
7838

7939
export const conflictBorderHandledFocused = registerColor(
80-
'mergeEditor.conflictBorder.handledFocused',
81-
{
82-
dark: '#c1c1c1cc',
83-
light: '#c1c1c1cc',
84-
hcDark: '#c1c1c1cc',
85-
hcLight: '#c1c1c1cc',
86-
},
87-
localize(
88-
'mergeEditor.conflictBorder.handledFocused',
89-
'The border color of handled focused conflicts.'
90-
)
40+
'mergeEditor.conflict.handledFocused.border',
41+
{ dark: '#c1c1c1cc', light: '#c1c1c1cc', hcDark: '#c1c1c1cc', hcLight: '#c1c1c1cc', },
42+
localize('mergeEditor.conflict.handledFocused.border', 'The border color of handled focused conflicts.')
9143
);
9244

9345

9446
export const handledConflictMinimapOverViewRulerColor = registerColor(
95-
'mergeEditor.conflict-handled.minimapOverViewRuler',
96-
{
97-
dark: '#adaca8ee',
98-
light: '#adaca8ee',
99-
hcDark: '#adaca8ee',
100-
hcLight: '#adaca8ee',
101-
},
102-
localize(
103-
'mergeEditor.conflict-unhandled.minimapOverViewRuler',
104-
'The foreground color for changes in input 1.'
105-
)
47+
'mergeEditor.conflict.handled.minimapOverViewRuler',
48+
{ dark: '#adaca8ee', light: '#adaca8ee', hcDark: '#adaca8ee', hcLight: '#adaca8ee', },
49+
localize('mergeEditor.conflict.handled.minimapOverViewRuler', 'The foreground color for changes in input 1.')
10650
);
10751

10852
export const unhandledConflictMinimapOverViewRulerColor = registerColor(
109-
'mergeEditor.conflict-unhandled.minimapOverViewRuler',
110-
{
111-
dark: '#fcba03FF',
112-
light: '#fcba03FF',
113-
hcDark: '#fcba03FF',
114-
hcLight: '#fcba03FF',
115-
},
116-
localize(
117-
'mergeEditor.conflict-unhandled.minimapOverViewRuler',
118-
'The foreground color for changes in input 1.'
119-
)
53+
'mergeEditor.conflict.unhandled.minimapOverViewRuler',
54+
{ dark: '#fcba03FF', light: '#fcba03FF', hcDark: '#fcba03FF', hcLight: '#fcba03FF', },
55+
localize('mergeEditor.conflict.unhandled.minimapOverViewRuler', 'The foreground color for changes in input 1.')
12056
);

src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends D
1919
(e) => this._editor.hasModel()
2020
);
2121

22-
private readonly viewZoneChanges = new ObservableValue(0, 'counter');
22+
private readonly changeCounter = new ObservableValue(0, 'counter');
2323

2424
constructor(
2525
private readonly _editor: CodeEditorWidget,
@@ -31,7 +31,11 @@ export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends D
3131
this._register(autorun((reader) => this.render(reader), 'Render'));
3232

3333
this._editor.onDidChangeViewZones(e => {
34-
this.viewZoneChanges.set(this.viewZoneChanges.get() + 1, undefined);
34+
this.changeCounter.set(this.changeCounter.get() + 1, undefined);
35+
});
36+
37+
this._editor.onDidContentSizeChange(e => {
38+
this.changeCounter.set(this.changeCounter.get() + 1, undefined);
3539
});
3640
}
3741

@@ -41,7 +45,7 @@ export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends D
4145
if (!this.modelAttached.read(reader)) {
4246
return;
4347
}
44-
this.viewZoneChanges.read(reader);
48+
this.changeCounter.read(reader);
4549
const scrollTop = this.scrollTop.read(reader);
4650

4751
const visibleRanges = this._editor.getVisibleRanges();

src/vs/workbench/contrib/mergeEditor/browser/view/media/mergeEditor.css

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,28 @@
3030
}
3131

3232
.merge-editor-diff {
33-
background-color: var(--vscode-mergeEditor-diff);
33+
background-color: var(--vscode-mergeEditor-change-background);
3434
}
3535

3636
.merge-editor-diff-word {
37-
background-color: var(--vscode-mergeEditor-diff-word);
37+
background-color: var(--vscode-mergeEditor-change-word-background);
3838
}
3939

4040
.merge-editor-block {
41-
border: 2px solid var(--vscode-mergeEditor-conflictBorder-unhandledUnfocused);
41+
border: 2px solid var(--vscode-mergeEditor-conflict-unhandledUnfocused-border);
4242
}
4343

4444
.merge-editor-block.focused {
45-
border: 2px solid var(--vscode-mergeEditor-conflictBorder-unhandledFocused);
45+
border: 2px solid var(--vscode-mergeEditor-conflict-unhandledFocused-border);
4646
}
4747

4848
.merge-editor-block.handled {
49-
border: 2px solid var(--vscode-mergeEditor-conflictBorder-handledUnfocused);
49+
border: 2px solid var(--vscode-mergeEditor-conflict-handledUnfocused-border);
5050

5151
}
5252

5353
.merge-editor-block.handled.focused {
54-
border: 2px solid var(--vscode-mergeEditor-conflictBorder-handledFocused);
54+
border: 2px solid var(--vscode-mergeEditor-conflict-handledFocused-border);
5555
}
5656

5757
.gutter-item {

0 commit comments

Comments
 (0)