diff options
Diffstat (limited to 'src/vs/workbench/contrib/mergeEditor/browser/view/viewModel.ts')
-rw-r--r-- | src/vs/workbench/contrib/mergeEditor/browser/view/viewModel.ts | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/vs/workbench/contrib/mergeEditor/browser/view/viewModel.ts b/src/vs/workbench/contrib/mergeEditor/browser/view/viewModel.ts index b53549fea4b..de910cceaee 100644 --- a/src/vs/workbench/contrib/mergeEditor/browser/view/viewModel.ts +++ b/src/vs/workbench/contrib/mergeEditor/browser/view/viewModel.ts @@ -3,13 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { findLast, lastOrDefault } from 'vs/base/common/arrays'; +import { findLast } from 'vs/base/common/arrays'; +import { derived, derivedObservableWithWritableCache, IReader, ITransaction, observableValue, transaction } from 'vs/base/common/observable'; import { ScrollType } from 'vs/editor/common/editorCommon'; -import { derivedObservable, derivedObservableWithWritableCache, IReader, ITransaction, ObservableValue, transaction } from 'vs/workbench/contrib/audioCues/browser/observable'; import { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange'; import { MergeEditorModel } from 'vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel'; import { ModifiedBaseRange, ModifiedBaseRangeState } from 'vs/workbench/contrib/mergeEditor/browser/model/modifiedBaseRange'; -import { elementAtOrUndefined } from 'vs/workbench/contrib/mergeEditor/browser/utils'; import { CodeEditorView } from 'vs/workbench/contrib/mergeEditor/browser/view/editors/codeEditorView'; import { InputCodeEditorView } from 'vs/workbench/contrib/mergeEditor/browser/view/editors/inputCodeEditorView'; import { ResultCodeEditorView } from 'vs/workbench/contrib/mergeEditor/browser/view/editors/resultCodeEditorView'; @@ -26,9 +25,9 @@ export class MergeEditorViewModel { return editors.find((e) => e.isFocused.read(reader)) || lastValue; }); - private readonly manuallySetActiveModifiedBaseRange = new ObservableValue< + private readonly manuallySetActiveModifiedBaseRange = observableValue< ModifiedBaseRange | undefined - >(undefined, 'manuallySetActiveModifiedBaseRange'); + >('manuallySetActiveModifiedBaseRange', undefined); private getRange(editor: CodeEditorView, modifiedBaseRange: ModifiedBaseRange, reader: IReader | undefined): LineRange { if (editor === this.resultCodeEditorView) { @@ -39,7 +38,7 @@ export class MergeEditorViewModel { } } - public readonly activeModifiedBaseRange = derivedObservable( + public readonly activeModifiedBaseRange = derived( 'activeModifiedBaseRange', (reader) => { const focusedEditor = this.lastFocusedEditor.read(reader); @@ -78,7 +77,7 @@ export class MergeEditorViewModel { this.model.setState(baseRange, state, true, tx); } - public goToConflict(getModifiedBaseRange: (editor: CodeEditorView, curLineNumber: number) => ModifiedBaseRange | undefined): void { + private goToConflict(getModifiedBaseRange: (editor: CodeEditorView, curLineNumber: number) => ModifiedBaseRange | undefined): void { const lastFocusedEditor = this.lastFocusedEditor.get(); if (!lastFocusedEditor) { return; @@ -98,23 +97,35 @@ export class MergeEditorViewModel { } } - public goToNextConflict(): void { + public goToNextModifiedBaseRange(onlyConflicting: boolean): void { this.goToConflict( (e, l) => this.model.modifiedBaseRanges .get() - .find((r) => this.getRange(e, r, undefined).startLineNumber > l) || - elementAtOrUndefined(this.model.modifiedBaseRanges.get(), 0) + .find( + (r) => + (!onlyConflicting || r.isConflicting) && + this.getRange(e, r, undefined).startLineNumber > l + ) || + this.model.modifiedBaseRanges + .get() + .find((r) => !onlyConflicting || r.isConflicting) ); } - public goToPreviousConflict(): void { + public goToPreviousModifiedBaseRange(onlyConflicting: boolean): void { this.goToConflict( (e, l) => findLast( this.model.modifiedBaseRanges.get(), - (r) => this.getRange(e, r, undefined).endLineNumberExclusive < l - ) || lastOrDefault(this.model.modifiedBaseRanges.get()) + (r) => + (!onlyConflicting || r.isConflicting) && + this.getRange(e, r, undefined).endLineNumberExclusive < l + ) || + findLast( + this.model.modifiedBaseRanges.get(), + (r) => !onlyConflicting || r.isConflicting + ) ); } @@ -124,6 +135,7 @@ export class MergeEditorViewModel { return; } transaction(tx => { + /** @description Toggle Active Conflict */ this.setState( activeModifiedBaseRange, this.model.getState(activeModifiedBaseRange).get().toggle(inputNumber), |