@@ -15,6 +15,7 @@ import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
15
15
import { DiffModel , UnchangedRegion } from 'vs/editor/browser/widget/diffEditorWidget2/diffModel' ;
16
16
import { PlaceholderViewZone , ViewZoneOverlayWidget , applyObservableDecorations , applyStyle , applyViewZones } from 'vs/editor/browser/widget/diffEditorWidget2/utils' ;
17
17
import { EditorOption } from 'vs/editor/common/config/editorOptions' ;
18
+ import { CursorChangeReason } from 'vs/editor/common/cursorEvents' ;
18
19
import { IModelDecorationOptions , IModelDeltaDecoration } from 'vs/editor/common/model' ;
19
20
20
21
export class UnchangedRangesFeature extends Disposable {
@@ -30,32 +31,38 @@ export class UnchangedRangesFeature extends Disposable {
30
31
super ( ) ;
31
32
32
33
this . _register ( this . _originalEditor . onDidChangeCursorPosition ( e => {
33
- const m = this . _diffModel . get ( ) ;
34
- transaction ( tx => {
35
- for ( const s of this . _originalEditor . getSelections ( ) || [ ] ) {
36
- m ?. ensureOriginalLineIsVisible ( s . getStartPosition ( ) . lineNumber , tx ) ;
37
- m ?. ensureOriginalLineIsVisible ( s . getEndPosition ( ) . lineNumber , tx ) ;
38
- }
39
- } ) ;
34
+ if ( e . reason === CursorChangeReason . Explicit ) {
35
+ const m = this . _diffModel . get ( ) ;
36
+ transaction ( tx => {
37
+ for ( const s of this . _originalEditor . getSelections ( ) || [ ] ) {
38
+ m ?. ensureOriginalLineIsVisible ( s . getStartPosition ( ) . lineNumber , tx ) ;
39
+ m ?. ensureOriginalLineIsVisible ( s . getEndPosition ( ) . lineNumber , tx ) ;
40
+ }
41
+ } ) ;
42
+ }
40
43
} ) ) ;
41
44
42
45
this . _register ( this . _modifiedEditor . onDidChangeCursorPosition ( e => {
43
- const m = this . _diffModel . get ( ) ;
44
- transaction ( tx => {
45
- for ( const s of this . _modifiedEditor . getSelections ( ) || [ ] ) {
46
- m ?. ensureModifiedLineIsVisible ( s . getStartPosition ( ) . lineNumber , tx ) ;
47
- m ?. ensureModifiedLineIsVisible ( s . getEndPosition ( ) . lineNumber , tx ) ;
48
- }
49
- } ) ;
46
+ if ( e . reason === CursorChangeReason . Explicit ) {
47
+ const m = this . _diffModel . get ( ) ;
48
+ transaction ( tx => {
49
+ for ( const s of this . _modifiedEditor . getSelections ( ) || [ ] ) {
50
+ m ?. ensureModifiedLineIsVisible ( s . getStartPosition ( ) . lineNumber , tx ) ;
51
+ m ?. ensureModifiedLineIsVisible ( s . getEndPosition ( ) . lineNumber , tx ) ;
52
+ }
53
+ } ) ;
54
+ }
50
55
} ) ) ;
51
56
57
+ const unchangedRegions = this . _diffModel . map ( ( m , reader ) => m ?. diff . read ( reader ) ?. mappings . length === 0 ? [ ] : m ?. unchangedRegions . read ( reader ) ?? [ ] ) ;
58
+
52
59
const viewZones = derivedWithStore ( 'view zones' , ( reader , store ) => {
53
60
const origViewZones : IViewZone [ ] = [ ] ;
54
61
const modViewZones : IViewZone [ ] = [ ] ;
55
62
const sideBySide = this . _sideBySide . read ( reader ) ;
56
63
57
- const unchangedRegions = this . _diffModel . read ( reader ) ?. unchangedRegions . read ( reader ) ?? [ ] ;
58
- for ( const r of unchangedRegions ) {
64
+ const curUnchangedRegions = unchangedRegions . read ( reader ) ;
65
+ for ( const r of curUnchangedRegions ) {
59
66
if ( r . shouldHideControls ( reader ) ) {
60
67
continue ;
61
68
}
@@ -85,16 +92,16 @@ export class UnchangedRangesFeature extends Disposable {
85
92
} ;
86
93
87
94
this . _register ( applyObservableDecorations ( this . _originalEditor , derived ( 'decorations' , ( reader ) => {
88
- const unchangedRegions = this . _diffModel . read ( reader ) ?. unchangedRegions . read ( reader ) ?? [ ] ;
89
- return unchangedRegions . map < IModelDeltaDecoration > ( r => ( {
95
+ const curUnchangedRegions = unchangedRegions . read ( reader ) ;
96
+ return curUnchangedRegions . map < IModelDeltaDecoration > ( r => ( {
90
97
range : r . originalRange . toInclusiveRange ( ) ! ,
91
98
options : unchangedLinesDecoration ,
92
99
} ) ) ;
93
100
} ) ) ) ;
94
101
95
102
this . _register ( applyObservableDecorations ( this . _modifiedEditor , derived ( 'decorations' , ( reader ) => {
96
- const unchangedRegions = this . _diffModel . read ( reader ) ?. unchangedRegions . read ( reader ) ?? [ ] ;
97
- return unchangedRegions . map < IModelDeltaDecoration > ( r => ( {
103
+ const curUnchangedRegions = unchangedRegions . read ( reader ) ;
104
+ return curUnchangedRegions . map < IModelDeltaDecoration > ( r => ( {
98
105
range : r . modifiedRange . toInclusiveRange ( ) ! ,
99
106
options : unchangedLinesDecoration ,
100
107
} ) ) ;
@@ -104,10 +111,9 @@ export class UnchangedRangesFeature extends Disposable {
104
111
this . _register ( applyViewZones ( this . _modifiedEditor , viewZones . map ( v => v . modViewZones ) , v => this . _isUpdatingViewZones = v ) ) ;
105
112
106
113
this . _register ( autorunWithStore2 ( 'update folded unchanged regions' , ( reader , store ) => {
107
- const unchangedRegions = this . _diffModel . read ( reader ) ?. unchangedRegions . read ( reader ) ?? [ ] ;
108
-
109
- this . _originalEditor . setHiddenAreas ( unchangedRegions . map ( r => r . getHiddenOriginalRange ( reader ) . toInclusiveRange ( ) ) . filter ( isDefined ) ) ;
110
- this . _modifiedEditor . setHiddenAreas ( unchangedRegions . map ( r => r . getHiddenModifiedRange ( reader ) . toInclusiveRange ( ) ) . filter ( isDefined ) ) ;
114
+ const curUnchangedRegions = unchangedRegions . read ( reader ) ;
115
+ this . _originalEditor . setHiddenAreas ( curUnchangedRegions . map ( r => r . getHiddenOriginalRange ( reader ) . toInclusiveRange ( ) ) . filter ( isDefined ) ) ;
116
+ this . _modifiedEditor . setHiddenAreas ( curUnchangedRegions . map ( r => r . getHiddenModifiedRange ( reader ) . toInclusiveRange ( ) ) . filter ( isDefined ) ) ;
111
117
} ) ) ;
112
118
}
113
119
}
0 commit comments