Skip to content

Commit d9d481a

Browse files
committed
Fix background decorations (fixes microsoft#28368)
1 parent f7f7d74 commit d9d481a

2 files changed

Lines changed: 17 additions & 7 deletions

File tree

extensions/merge-conflict/src/mergeConflictParser.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export class MergeConflictParser {
102102
header: scanned.startHeader.range,
103103
decoratorContent: new vscode.Range(
104104
scanned.startHeader.rangeIncludingLineBreak.end,
105-
MergeConflictParser.shiftBackOneCharacter(document, tokenAfterCurrentBlock.range.start)),
105+
MergeConflictParser.shiftBackOneCharacter(document, tokenAfterCurrentBlock.range.start, scanned.startHeader.rangeIncludingLineBreak.end)),
106106
// Current content is range between header (shifted for linebreak) and splitter or common ancestors mark start
107107
content: new vscode.Range(
108108
scanned.startHeader.rangeIncludingLineBreak.end,
@@ -115,7 +115,7 @@ export class MergeConflictParser {
115115
header: currentTokenLine.range,
116116
decoratorContent: new vscode.Range(
117117
currentTokenLine.rangeIncludingLineBreak.end,
118-
MergeConflictParser.shiftBackOneCharacter(document, nextTokenLine.range.start)),
118+
MergeConflictParser.shiftBackOneCharacter(document, nextTokenLine.range.start, currentTokenLine.rangeIncludingLineBreak.end)),
119119
// Each common ancestors block is range between one common ancestors token
120120
// (shifted for linebreak) and start of next common ancestors token or splitter
121121
content: new vscode.Range(
@@ -129,7 +129,7 @@ export class MergeConflictParser {
129129
header: scanned.endFooter.range,
130130
decoratorContent: new vscode.Range(
131131
scanned.splitter.rangeIncludingLineBreak.end,
132-
MergeConflictParser.shiftBackOneCharacter(document, scanned.endFooter.range.start)),
132+
MergeConflictParser.shiftBackOneCharacter(document, scanned.endFooter.range.start, scanned.splitter.rangeIncludingLineBreak.end)),
133133
// Incoming content is range between splitter (shifted for linebreak) and footer start
134134
content: new vscode.Range(
135135
scanned.splitter.rangeIncludingLineBreak.end,
@@ -150,7 +150,11 @@ export class MergeConflictParser {
150150
return text.includes(startHeaderMarker) && text.includes(endFooterMarker);
151151
}
152152

153-
private static shiftBackOneCharacter(document: vscode.TextDocument, range: vscode.Position): vscode.Position {
153+
private static shiftBackOneCharacter(document: vscode.TextDocument, range: vscode.Position, unlessEqual: vscode.Position): vscode.Position {
154+
if (range.isEqual(unlessEqual)) {
155+
return range;
156+
}
157+
154158
let line = range.line;
155159
let character = range.character - 1;
156160

extensions/merge-conflict/src/mergeDecorator.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,11 +197,17 @@ export default class MergeDectorator implements vscode.Disposable {
197197

198198
conflicts.forEach(conflict => {
199199
// TODO, this could be more effective, just call getMatchPositions once with a map of decoration to position
200-
pushDecoration('current.content', { range: conflict.current.decoratorContent });
201-
pushDecoration('incoming.content', { range: conflict.incoming.decoratorContent });
200+
if (!conflict.current.decoratorContent.isEmpty) {
201+
pushDecoration('current.content', { range: conflict.current.decoratorContent });
202+
}
203+
if (!conflict.incoming.decoratorContent.isEmpty) {
204+
pushDecoration('incoming.content', { range: conflict.incoming.decoratorContent });
205+
}
202206

203207
conflict.commonAncestors.forEach(commonAncestorsRegion => {
204-
pushDecoration('commonAncestors.content', { range: commonAncestorsRegion.decoratorContent });
208+
if (!commonAncestorsRegion.decoratorContent.isEmpty) {
209+
pushDecoration('commonAncestors.content', { range: commonAncestorsRegion.decoratorContent });
210+
}
205211
});
206212

207213
if (this.config.enableDecorations) {

0 commit comments

Comments
 (0)