@@ -17,7 +17,7 @@ import { DetailedLineRangeMapping, DocumentLineRangeMap, DocumentRangeMap, LineR
17
17
import { TextModelDiffChangeReason , TextModelDiffs , TextModelDiffState } from 'vs/workbench/contrib/mergeEditor/browser/model/textModelDiffs' ;
18
18
import { MergeEditorTelemetry } from 'vs/workbench/contrib/mergeEditor/browser/telemetry' ;
19
19
import { leftJoin } from 'vs/workbench/contrib/mergeEditor/browser/utils' ;
20
- import { ModifiedBaseRange , ModifiedBaseRangeState , ModifiedBaseRangeStateKind } from './modifiedBaseRange' ;
20
+ import { InputNumber , ModifiedBaseRange , ModifiedBaseRangeState , ModifiedBaseRangeStateKind } from './modifiedBaseRange' ;
21
21
22
22
export interface InputData {
23
23
readonly textModel : ITextModel ;
@@ -40,13 +40,7 @@ export class MergeEditorModel extends EditorModel {
40
40
derived ( 'modifiedBaseRangeResultStates' , reader => {
41
41
const map = new Map < ModifiedBaseRange , ModifiedBaseRangeData > (
42
42
this . modifiedBaseRanges . read ( reader ) . map < [ ModifiedBaseRange , ModifiedBaseRangeData ] > ( ( s ) => [
43
- s ,
44
- {
45
- accepted : observableValue ( `BaseRangeState${ s . baseRange } ` , ModifiedBaseRangeState . base ) ,
46
- handled : observableValue ( `BaseRangeHandledState${ s . baseRange } ` , false ) ,
47
- computedFromDiffing : false ,
48
- previousNonDiffingState : undefined ,
49
- }
43
+ s , new ModifiedBaseRangeData ( s )
50
44
] )
51
45
) ;
52
46
return map ;
@@ -109,7 +103,9 @@ export class MergeEditorModel extends EditorModel {
109
103
shouldRecomputeHandledFromAccepted = false ;
110
104
for ( const [ _range , observableState ] of states ) {
111
105
const state = observableState . accepted . get ( ) ;
112
- observableState . handled . set ( ! ( state . kind === ModifiedBaseRangeStateKind . base || state . kind === ModifiedBaseRangeStateKind . unrecognized ) , tx ) ;
106
+ const handled = ! ( state . kind === ModifiedBaseRangeStateKind . base || state . kind === ModifiedBaseRangeStateKind . unrecognized ) ;
107
+ observableState . handledInput1 . set ( handled , tx ) ;
108
+ observableState . handledInput2 . set ( handled , tx ) ;
113
109
}
114
110
}
115
111
} ) ;
@@ -149,7 +145,8 @@ export class MergeEditorModel extends EditorModel {
149
145
state . accepted . set ( newState , tx ) ;
150
146
state . computedFromDiffing = false ;
151
147
state . previousNonDiffingState = undefined ;
152
- state . handled . set ( handled , tx ) ;
148
+ state . handledInput1 . set ( handled , tx ) ;
149
+ state . handledInput2 . set ( handled , tx ) ;
153
150
}
154
151
155
152
this . resultTextModel . pushEditOperations ( null , [ {
@@ -201,6 +198,7 @@ export class MergeEditorModel extends EditorModel {
201
198
202
199
public readonly baseInput2Diffs = this . input2TextModelDiffs . diffs ;
203
200
public readonly baseResultDiffs = this . resultTextModelDiffs . diffs ;
201
+ public get isApplyingEditInResult ( ) : boolean { return this . resultTextModelDiffs . isApplyingChange ; }
204
202
public readonly input1ResultMapping = derived ( 'input1ResultMapping' , reader => {
205
203
return this . getInputResultMapping (
206
204
this . baseInput1Diffs . read ( reader ) ,
@@ -408,7 +406,7 @@ export class MergeEditorModel extends EditorModel {
408
406
public setState (
409
407
baseRange : ModifiedBaseRange ,
410
408
state : ModifiedBaseRangeState ,
411
- markHandled : boolean ,
409
+ markInputAsHandled : boolean | InputNumber ,
412
410
transaction : ITransaction ,
413
411
pushStackElement : boolean = false
414
412
) : void {
@@ -444,8 +442,13 @@ export class MergeEditorModel extends EditorModel {
444
442
}
445
443
}
446
444
447
- if ( markHandled ) {
448
- existingState . handled . set ( true , transaction ) ;
445
+ if ( markInputAsHandled !== false ) {
446
+ if ( markInputAsHandled === true || markInputAsHandled === 1 ) {
447
+ existingState . handledInput1 . set ( true , transaction ) ;
448
+ }
449
+ if ( markInputAsHandled === true || markInputAsHandled === 2 ) {
450
+ existingState . handledInput2 . set ( true , transaction ) ;
451
+ }
449
452
}
450
453
}
451
454
@@ -466,13 +469,32 @@ export class MergeEditorModel extends EditorModel {
466
469
return this . modifiedBaseRangeResultStates . get ( ) . get ( baseRange ) ! . handled ;
467
470
}
468
471
472
+ public isInputHandled ( baseRange : ModifiedBaseRange , inputNumber : InputNumber ) : IObservable < boolean > {
473
+ const state = this . modifiedBaseRangeResultStates . get ( ) . get ( baseRange ) ! ;
474
+ return inputNumber === 1 ? state . handledInput1 : state . handledInput2 ;
475
+ }
476
+
477
+ public setInputHandled ( baseRange : ModifiedBaseRange , inputNumber : InputNumber , handled : boolean , tx : ITransaction ) : void {
478
+ const state = this . modifiedBaseRangeResultStates . get ( ) . get ( baseRange ) ! ;
479
+ if ( state . handled . get ( ) === handled ) {
480
+ return ;
481
+ }
482
+
483
+ if ( inputNumber === 1 ) {
484
+ state . handledInput1 . set ( handled , tx ) ;
485
+ } else {
486
+ state . handledInput2 . set ( handled , tx ) ;
487
+ }
488
+ }
489
+
469
490
public setHandled ( baseRange : ModifiedBaseRange , handled : boolean , tx : ITransaction ) : void {
470
491
const state = this . modifiedBaseRangeResultStates . get ( ) . get ( baseRange ) ! ;
471
492
if ( state . handled . get ( ) === handled ) {
472
493
return ;
473
494
}
474
495
475
- state . handled . set ( handled , tx ) ;
496
+ state . handledInput1 . set ( handled , tx ) ;
497
+ state . handledInput2 . set ( handled , tx ) ;
476
498
}
477
499
478
500
public readonly unhandledConflictsCount = derived ( 'unhandledConflictsCount' , reader => {
@@ -689,13 +711,17 @@ function arrayCount<T>(array: Iterable<T>, predicate: (value: T) => boolean): nu
689
711
return count ;
690
712
}
691
713
692
- interface ModifiedBaseRangeData {
693
- accepted : ISettableObservable < ModifiedBaseRangeState > ;
714
+ class ModifiedBaseRangeData {
715
+ constructor ( private readonly baseRange : ModifiedBaseRange ) { }
716
+
717
+ public accepted : ISettableObservable < ModifiedBaseRangeState > = observableValue ( `BaseRangeState${ this . baseRange . baseRange } ` , ModifiedBaseRangeState . base ) ;
718
+ public handledInput1 : ISettableObservable < boolean > = observableValue ( `BaseRangeHandledState${ this . baseRange . baseRange } .Input1` , false ) ;
719
+ public handledInput2 : ISettableObservable < boolean > = observableValue ( `BaseRangeHandledState${ this . baseRange . baseRange } .Input2` , false ) ;
694
720
695
- handled : ISettableObservable < boolean > ;
721
+ public computedFromDiffing = false ;
722
+ public previousNonDiffingState : ModifiedBaseRangeState | undefined = undefined ;
696
723
697
- computedFromDiffing : boolean ;
698
- previousNonDiffingState : ModifiedBaseRangeState | undefined ;
724
+ public readonly handled = derived ( 'handled' , reader => this . handledInput1 . read ( reader ) && this . handledInput2 . read ( reader ) ) ;
699
725
}
700
726
701
727
export const enum MergeEditorModelState {
0 commit comments