From dca6f399d32b5ead87efc32fb2ada736ce9596c3 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Mon, 22 Jan 2024 12:28:16 +0100 Subject: [PATCH] Fixes diff editor bug --- src/vs/base/common/assert.ts | 6 ++++++ .../browser/widget/diffEditor/diffEditorViewModel.ts | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/vs/base/common/assert.ts b/src/vs/base/common/assert.ts index 5efd7244ff4..5c1bff27990 100644 --- a/src/vs/base/common/assert.ts +++ b/src/vs/base/common/assert.ts @@ -35,6 +35,12 @@ export function assert(condition: boolean): void { } } +export function softAssert(condition: boolean): void { + if (!condition) { + onUnexpectedError(new BugIndicatingError('Assertion Failed')); + } +} + /** * condition must be side-effect free! */ diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.ts b/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.ts index ab824ae4c1e..b9a3880f0d9 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditorViewModel.ts @@ -22,6 +22,7 @@ import { DiffEditorOptions } from './diffEditorOptions'; import { optimizeSequenceDiffs } from 'vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations'; import { isDefined } from 'vs/base/common/types'; import { groupAdjacentBy } from 'vs/base/common/arrays'; +import { softAssert } from 'vs/base/common/assert'; export class DiffEditorViewModel extends Disposable implements IDiffEditorViewModel { private readonly _isDiffUpToDate = observableValue(this, false); @@ -509,8 +510,14 @@ export class UnchangedRegion { visibleLineCountTop: number, visibleLineCountBottom: number, ) { - this._visibleLineCountTop.set(visibleLineCountTop, undefined); - this._visibleLineCountBottom.set(visibleLineCountBottom, undefined); + const visibleLineCountTop2 = Math.max(Math.min(visibleLineCountTop, this.lineCount), 0); + const visibleLineCountBottom2 = Math.max(Math.min(visibleLineCountBottom, this.lineCount - visibleLineCountTop), 0); + + softAssert(visibleLineCountTop === visibleLineCountTop2); + softAssert(visibleLineCountBottom === visibleLineCountBottom2); + + this._visibleLineCountTop.set(visibleLineCountTop2, undefined); + this._visibleLineCountBottom.set(visibleLineCountBottom2, undefined); } public setVisibleRanges(visibleRanges: LineRangeMapping[], tx: ITransaction): UnchangedRegion[] {