* Fixes #159155

* Fixes #160276
This commit is contained in:
Henning Dieterichs 2022-09-07 15:39:13 +02:00 committed by GitHub
parent eff6fa7696
commit c399c8cce7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 72 additions and 63 deletions

View file

@ -83,7 +83,9 @@ export class BlockDecorations extends ViewPart {
this.domNode.appendChild(block);
}
const top = ctx.getVerticalOffsetForLineNumber(decoration.range.startLineNumber, true);
const bottom = ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, true);
const bottom = decoration.range.isEmpty()
? ctx.getVerticalOffsetForLineNumber(decoration.range.startLineNumber, false)
: ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, true);
block.setClassName('blockDecorations-block ' + decoration.options.blockClassName);
block.setLeft(ctx.scrollLeft);

View file

@ -116,6 +116,13 @@ export class LineRange {
return new Range(this.startLineNumber, 1, this.endLineNumberExclusive - 1, Constants.MAX_SAFE_SMALL_INTEGER);
}
public toInclusiveRangeOrEmpty(): Range {
if (this.isEmpty) {
return new Range(this.startLineNumber, 1, this.startLineNumber, 1);
}
return new Range(this.startLineNumber, 1, this.endLineNumberExclusive - 1, Constants.MAX_SAFE_SMALL_INTEGER);
}
intersects(lineRange: LineRange) {
return this.startLineNumber <= lineRange.endLineNumberExclusive
&& lineRange.startLineNumber <= this.endLineNumberExclusive;

View file

@ -55,38 +55,40 @@ export class BaseCodeEditorView extends CodeEditorView {
const activeModifiedBaseRange = viewModel.activeModifiedBaseRange.read(reader);
const result = new Array<IModelDeltaDecoration>();
const result: IModelDeltaDecoration[] = [];
for (const modifiedBaseRange of model.modifiedBaseRanges.read(reader)) {
const range = modifiedBaseRange.baseRange;
if (range && !range.isEmpty) {
const blockClassNames = ['merge-editor-block'];
const isHandled = model.isHandled(modifiedBaseRange).read(reader);
if (isHandled) {
blockClassNames.push('handled');
}
if (modifiedBaseRange === activeModifiedBaseRange) {
blockClassNames.push('focused');
}
blockClassNames.push('base');
result.push({
range: range.toInclusiveRange()!,
options: {
isWholeLine: true,
blockClassName: blockClassNames.join(' '),
description: 'Merge Editor',
minimap: {
position: MinimapPosition.Gutter,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
},
overviewRuler: modifiedBaseRange.isConflicting ? {
position: OverviewRulerLane.Center,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
} : undefined
}
});
if (!range) {
continue;
}
const blockClassNames = ['merge-editor-block'];
const isHandled = model.isHandled(modifiedBaseRange).read(reader);
if (isHandled) {
blockClassNames.push('handled');
}
if (modifiedBaseRange === activeModifiedBaseRange) {
blockClassNames.push('focused');
}
blockClassNames.push('base');
result.push({
range: range.toInclusiveRangeOrEmpty(),
options: {
showIfCollapsed: true,
blockClassName: blockClassNames.join(' '),
description: 'Merge Editor',
minimap: {
position: MinimapPosition.Gutter,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
},
overviewRuler: modifiedBaseRange.isConflicting ? {
position: OverviewRulerLane.Center,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
} : undefined
}
});
}
return result;
});

View file

@ -115,7 +115,7 @@ export class InputCodeEditorView extends CodeEditorView {
for (const modifiedBaseRange of model.modifiedBaseRanges.read(reader)) {
const range = modifiedBaseRange.getInputRange(this.inputNumber);
if (!range || range.isEmpty) {
if (!range) {
continue;
}
@ -134,9 +134,9 @@ export class InputCodeEditorView extends CodeEditorView {
blockClassNames.push(inputClassName);
result.push({
range: range.toInclusiveRange()!,
range: range.toInclusiveRangeOrEmpty(),
options: {
isWholeLine: true,
showIfCollapsed: true,
blockClassName: blockClassNames.join(' '),
description: 'Merge Editor',
minimap: {

View file

@ -129,38 +129,36 @@ export class ResultCodeEditorView extends CodeEditorView {
const modifiedBaseRange = m.left;
if (modifiedBaseRange) {
const range = model.getLineRangeInResult(modifiedBaseRange.baseRange, reader).toInclusiveRange();
if (range) {
const blockClassNames = ['merge-editor-block'];
const isHandled = model.isHandled(modifiedBaseRange).read(reader);
if (isHandled) {
blockClassNames.push('handled');
}
if (modifiedBaseRange === activeModifiedBaseRange) {
blockClassNames.push('focused');
}
if (modifiedBaseRange.isConflicting) {
blockClassNames.push('conflicting');
}
blockClassNames.push('result');
result.push({
range,
options: {
isWholeLine: true,
blockClassName: blockClassNames.join(' '),
description: 'Result Diff',
minimap: {
position: MinimapPosition.Gutter,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
},
overviewRuler: modifiedBaseRange.isConflicting ? {
position: OverviewRulerLane.Center,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
} : undefined
}
});
const blockClassNames = ['merge-editor-block'];
const isHandled = model.isHandled(modifiedBaseRange).read(reader);
if (isHandled) {
blockClassNames.push('handled');
}
if (modifiedBaseRange === activeModifiedBaseRange) {
blockClassNames.push('focused');
}
if (modifiedBaseRange.isConflicting) {
blockClassNames.push('conflicting');
}
blockClassNames.push('result');
result.push({
range: model.getLineRangeInResult(modifiedBaseRange.baseRange, reader).toInclusiveRangeOrEmpty(),
options: {
showIfCollapsed: true,
blockClassName: blockClassNames.join(' '),
description: 'Result Diff',
minimap: {
position: MinimapPosition.Gutter,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
},
overviewRuler: modifiedBaseRange.isConflicting ? {
position: OverviewRulerLane.Center,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
} : undefined
}
});
}