@@ -15,6 +15,7 @@ import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
1515import { DiffModel , UnchangedRegion } from 'vs/editor/browser/widget/diffEditorWidget2/diffModel' ;
1616import { PlaceholderViewZone , ViewZoneOverlayWidget , applyObservableDecorations , applyStyle , applyViewZones } from 'vs/editor/browser/widget/diffEditorWidget2/utils' ;
1717import { EditorOption } from 'vs/editor/common/config/editorOptions' ;
18+ import { CursorChangeReason } from 'vs/editor/common/cursorEvents' ;
1819import { IModelDecorationOptions , IModelDeltaDecoration } from 'vs/editor/common/model' ;
1920
2021export class UnchangedRangesFeature extends Disposable {
@@ -30,32 +31,38 @@ export class UnchangedRangesFeature extends Disposable {
3031 super ( ) ;
3132
3233 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+ }
4043 } ) ) ;
4144
4245 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+ }
5055 } ) ) ;
5156
57+ const unchangedRegions = this . _diffModel . map ( ( m , reader ) => m ?. diff . read ( reader ) ?. mappings . length === 0 ? [ ] : m ?. unchangedRegions . read ( reader ) ?? [ ] ) ;
58+
5259 const viewZones = derivedWithStore ( 'view zones' , ( reader , store ) => {
5360 const origViewZones : IViewZone [ ] = [ ] ;
5461 const modViewZones : IViewZone [ ] = [ ] ;
5562 const sideBySide = this . _sideBySide . read ( reader ) ;
5663
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 ) {
5966 if ( r . shouldHideControls ( reader ) ) {
6067 continue ;
6168 }
@@ -85,16 +92,16 @@ export class UnchangedRangesFeature extends Disposable {
8592 } ;
8693
8794 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 => ( {
9097 range : r . originalRange . toInclusiveRange ( ) ! ,
9198 options : unchangedLinesDecoration ,
9299 } ) ) ;
93100 } ) ) ) ;
94101
95102 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 => ( {
98105 range : r . modifiedRange . toInclusiveRange ( ) ! ,
99106 options : unchangedLinesDecoration ,
100107 } ) ) ;
@@ -104,10 +111,9 @@ export class UnchangedRangesFeature extends Disposable {
104111 this . _register ( applyViewZones ( this . _modifiedEditor , viewZones . map ( v => v . modViewZones ) , v => this . _isUpdatingViewZones = v ) ) ;
105112
106113 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 ) ) ;
111117 } ) ) ;
112118 }
113119}
0 commit comments