@@ -55,9 +55,11 @@ export class DiffModel extends Disposable implements IDiffEditorViewModel {
5555 if ( ! diff ) {
5656 return ;
5757 }
58- if ( ! this . _showMoves . get ( ) ) {
59- const textEdits = TextEditInfo . fromModelContentChanges ( e . changes ) ;
60- this . _lastDiff = applyModifiedEdits ( this . _lastDiff ! , textEdits , model . original , model . modified ) ;
58+
59+ const textEdits = TextEditInfo . fromModelContentChanges ( e . changes ) ;
60+ const result = applyModifiedEdits ( this . _lastDiff ! , textEdits , model . original , model . modified ) ;
61+ if ( result ) {
62+ this . _lastDiff = result ;
6163 this . _diff . set ( DiffState . fromDiffResult ( this . _lastDiff ) , undefined ) ;
6264 const currentSyncedMovedText = this . syncedMovedTexts . get ( ) ;
6365 this . syncedMovedTexts . set ( currentSyncedMovedText ? this . _lastDiff . moves . find ( m => m . lineRangeMapping . modifiedRange . intersect ( currentSyncedMovedText . lineRangeMapping . modifiedRange ) ) : undefined , undefined ) ;
@@ -70,13 +72,16 @@ export class DiffModel extends Disposable implements IDiffEditorViewModel {
7072 if ( ! diff ) {
7173 return ;
7274 }
73- if ( ! this . _showMoves . get ( ) ) {
74- const textEdits = TextEditInfo . fromModelContentChanges ( e . changes ) ;
75- this . _lastDiff = applyOriginalEdits ( this . _lastDiff ! , textEdits , model . original , model . modified ) ;
75+
76+ const textEdits = TextEditInfo . fromModelContentChanges ( e . changes ) ;
77+ const result = applyModifiedEdits ( this . _lastDiff ! , textEdits , model . original , model . modified ) ;
78+ if ( result ) {
79+ this . _lastDiff = result ;
7680 this . _diff . set ( DiffState . fromDiffResult ( this . _lastDiff ) , undefined ) ;
7781 const currentSyncedMovedText = this . syncedMovedTexts . get ( ) ;
7882 this . syncedMovedTexts . set ( currentSyncedMovedText ? this . _lastDiff . moves . find ( m => m . lineRangeMapping . modifiedRange . intersect ( currentSyncedMovedText . lineRangeMapping . modifiedRange ) ) : undefined , undefined ) ;
7983 }
84+
8085 debouncer . schedule ( ) ;
8186 } ) ) ;
8287
@@ -107,8 +112,8 @@ export class DiffModel extends Disposable implements IDiffEditorViewModel {
107112 computeMoves : this . _showMoves . read ( reader ) ,
108113 } ) ;
109114
110- result = applyOriginalEdits ( result , originalTextEditInfos , model . original , model . modified ) ;
111- result = applyModifiedEdits ( result , modifiedTextEditInfos , model . original , model . modified ) ;
115+ result = applyOriginalEdits ( result , originalTextEditInfos , model . original , model . modified ) ?? result ;
116+ result = applyModifiedEdits ( result , modifiedTextEditInfos , model . original , model . modified ) ?? result ;
112117
113118 const newUnchangedRegions = UnchangedRegion . fromDiffs ( result . changes , model . original . getLineCount ( ) , model . modified . getLineCount ( ) ) ;
114119
@@ -327,13 +332,16 @@ export class UnchangedRegion {
327332 }
328333}
329334
330- function applyOriginalEdits ( diff : IDocumentDiff , textEdits : TextEditInfo [ ] , originalTextModel : ITextModel , modifiedTextModel : ITextModel ) : IDocumentDiff {
335+ function applyOriginalEdits ( diff : IDocumentDiff , textEdits : TextEditInfo [ ] , originalTextModel : ITextModel , modifiedTextModel : ITextModel ) : IDocumentDiff | undefined {
331336 if ( textEdits . length === 0 ) {
332337 return diff ;
333338 }
334339
335340 const diff2 = flip ( diff ) ;
336341 const diff3 = applyModifiedEdits ( diff2 , textEdits , modifiedTextModel , originalTextModel ) ;
342+ if ( ! diff3 ) {
343+ return undefined ;
344+ }
337345 return flip ( diff3 ) ;
338346}
339347
@@ -346,10 +354,14 @@ function flip(diff: IDocumentDiff): IDocumentDiff {
346354 } ;
347355}
348356
349- function applyModifiedEdits ( diff : IDocumentDiff , textEdits : TextEditInfo [ ] , originalTextModel : ITextModel , modifiedTextModel : ITextModel ) : IDocumentDiff {
357+ function applyModifiedEdits ( diff : IDocumentDiff , textEdits : TextEditInfo [ ] , originalTextModel : ITextModel , modifiedTextModel : ITextModel ) : IDocumentDiff | undefined {
350358 if ( textEdits . length === 0 ) {
351359 return diff ;
352360 }
361+ if ( diff . changes . some ( c => ! c . innerChanges ) || diff . moves . length > 0 ) {
362+ // TODO support these cases
363+ return undefined ;
364+ }
353365
354366 const changes = applyModifiedEditsToLineRangeMappings ( diff . changes , textEdits , originalTextModel , modifiedTextModel ) ;
355367
0 commit comments