Change:
<img width="842" alt="image" src="https://user-"Observe that the viewzone in base is not highlighted, even though it is the active conflict.
Fixed: !

Discussion:
this.domNode.appendChild(block); } const top = ctx.getVerticalOffsetForLineNumber(decoration.range.startLineNumber, true); <del> const bottom = ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, true); </del> <ins> const bottom = decoration.range.isEmpty() ? ctx.getVerticalOffsetForLineNumber(decoration.range.startLineNumber, false) : ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, true); </ins> block.setClassName('blockDecorations-block ' + decoration.options.blockClassName); block.setLeft(ctx.scrollLeft);

return new Range(this.startLineNumber, 1, this.endLineNumberExclusive - 1, Constants.MAX_SAFE_SMALL_INTEGER); } <ins> 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); } </ins> intersects(lineRange: LineRange) { return this.startLineNumber <= lineRange.endLineNumberExclusive && lineRange.startLineNumber <= this.endLineNumberExclusive;

const activeModifiedBaseRange = viewModel.activeModifiedBaseRange.read(reader); <del> const result = new Array<IModelDeltaDecoration>(); </del> <ins> const result: IModelDeltaDecoration[] = []; </ins> for (const modifiedBaseRange of model.modifiedBaseRanges.read(reader)) { const range = modifiedBaseRange.baseRange; <del> 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'); </del> <ins> if (!range) { continue; } </ins> <del> 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 } }); </del> <ins> const blockClassNames = ['merge-editor-block']; const isHandled = model.isHandled(modifiedBaseRange).read(reader); if (isHandled) { blockClassNames.push('handled'); </ins> } <ins> 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 } }); </ins> } return result; });

for (const modifiedBaseRange of model.modifiedBaseRanges.read(reader)) { const range = modifiedBaseRange.getInputRange(this.inputNumber); <del> if (!range || range.isEmpty) { </del> <ins> if (!range) { </ins> continue; }

blockClassNames.push(inputClassName); result.push({ <del> range: range.toInclusiveRange()!, </del> <ins> range: range.toInclusiveRangeOrEmpty(), </ins> options: { <del> isWholeLine: true, </del> <ins> showIfCollapsed: true, </ins> blockClassName: blockClassNames.join(' '), description: 'Merge Editor', minimap: {

const modifiedBaseRange = m.left; if (modifiedBaseRange) { <del> 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 } }); </del> <ins> const blockClassNames = ['merge-editor-block']; const isHandled = model.isHandled(modifiedBaseRange).read(reader); if (isHandled) { blockClassNames.push('handled'); </ins> } <ins> 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 } }); </ins> }