@@ -413,8 +413,9 @@ export class NotebookTextDiffEditor extends EditorPane implements INotebookTextD
413413 this . _originalWebview ?. removeInsets ( [ ...this . _originalWebview ?. insetMapping . keys ( ) ] ) ;
414414 this . _modifiedWebview ?. removeInsets ( [ ...this . _modifiedWebview ?. insetMapping . keys ( ) ] ) ;
415415
416- this . _diffElementViewModels = viewModels ;
417- this . _list . splice ( 0 , this . _list . length , this . _diffElementViewModels ) ;
416+ this . _setViewModel ( viewModels ) ;
417+ // this._diffElementViewModels = viewModels;
418+ // this._list.splice(0, this._list.length, this._diffElementViewModels);
418419
419420 if ( this . _revealFirst && firstChangeIndex !== - 1 ) {
420421 this . _revealFirst = false ;
@@ -423,6 +424,32 @@ export class NotebookTextDiffEditor extends EditorPane implements INotebookTextD
423424 }
424425 }
425426
427+ private _setViewModel ( viewModels : DiffElementViewModelBase [ ] ) {
428+ let isSame = true ;
429+ if ( this . _diffElementViewModels . length === viewModels . length ) {
430+ for ( let i = 0 ; i < viewModels . length ; i ++ ) {
431+ const a = this . _diffElementViewModels [ i ] ;
432+ const b = viewModels [ i ] ;
433+
434+ if ( a . original ?. textModel . getHashValue ( ) !== b . original ?. textModel . getHashValue ( )
435+ || a . modified ?. textModel . getHashValue ( ) !== b . modified ?. textModel . getHashValue ( ) ) {
436+ isSame = false ;
437+ break ;
438+ }
439+ }
440+ } else {
441+ isSame = false ;
442+ }
443+
444+ if ( isSame ) {
445+ return ;
446+ }
447+
448+ this . _diffElementViewModels = viewModels ;
449+ this . _list . splice ( 0 , this . _list . length , this . _diffElementViewModels ) ;
450+
451+ }
452+
426453 /**
427454 * making sure that swapping cells are always translated to `insert+delete`.
428455 */
0 commit comments