@@ -33,17 +33,21 @@ impl Hunk {
3333 Self :: default ( )
3434 }
3535
36- pub fn f1_range ( & self ) -> String {
36+ pub fn f1_range ( & self , is_ed : bool ) -> String {
3737 if self . ln1_start == self . ln1_end {
3838 format ! ( "{}" , self . ln1_start)
39+ } else if is_ed && ( self . ln1_start == self . ln1_end - 1 ) {
40+ format ! ( "{}" , self . ln1_end)
3941 } else {
4042 format ! ( "{},{}" , self . ln1_start, self . ln1_end)
4143 }
4244 }
4345
44- pub fn f2_range ( & self ) -> String {
46+ pub fn f2_range ( & self , is_ed : bool ) -> String {
4547 if self . ln2_start == self . ln2_end {
4648 format ! ( "{}" , self . ln2_start)
49+ } else if is_ed && ( self . ln2_start == self . ln2_end - 1 ) {
50+ format ! ( "{}" , self . ln2_end)
4751 } else {
4852 format ! ( "{},{}" , self . ln2_start, self . ln2_end)
4953 }
@@ -70,14 +74,14 @@ impl Hunk {
7074 Change :: None => { }
7175 Change :: Unchanged ( _) => { }
7276 Change :: Insert ( _) => {
73- println ! ( "{}a{}" , self . ln1_start, self . f2_range( ) ) ;
77+ println ! ( "{}a{}" , self . ln1_start, self . f2_range( false ) ) ;
7478
7579 for i in self . ln2_start ..self . ln2_end {
7680 println ! ( "> {}" , file2. line( i) ) ;
7781 }
7882 }
7983 Change :: Delete ( _) => {
80- println ! ( "{}d{}" , self . f1_range( ) , self . ln2_end) ;
84+ println ! ( "{}d{}" , self . f1_range( false ) , self . ln2_end) ;
8185
8286 for i in self . ln1_start ..self . ln1_end {
8387 println ! ( "< {}" , file1. line( i) ) ;
@@ -88,7 +92,7 @@ impl Hunk {
8892 }
8993 }
9094 Change :: Substitute ( _) => {
91- println ! ( "{}c{}" , self . f1_range( ) , self . f2_range( ) ) ;
95+ println ! ( "{}c{}" , self . f1_range( false ) , self . f2_range( false ) ) ;
9296
9397 for i in self . ln1_start ..self . ln1_end {
9498 println ! ( "< {}" , file1. line( i) ) ;
@@ -115,10 +119,10 @@ impl Hunk {
115119 "{}-{} ({}) <> {}-{} ({})" ,
116120 self . ln1_start,
117121 self . ln1_end,
118- self . f1_range( ) ,
122+ self . f1_range( false ) ,
119123 self . ln2_start,
120124 self . ln2_end,
121- self . f2_range( )
125+ self . f2_range( false )
122126 ) ;
123127
124128 match & self . kind {
@@ -164,24 +168,20 @@ impl Hunk {
164168 Change :: None => { }
165169 Change :: Unchanged ( _) => { }
166170 Change :: Insert ( _) => {
167- self . changes . sort_by_key ( |change| change. get_ln2 ( ) ) ;
168-
169171 println ! ( "{}a" , self . ln1_end) ;
170- for change in & self . changes {
171- println ! ( "{}" , file2. line( change . get_ln2 ( ) - 1 ) ) ;
172+ for i in self . ln2_start .. self . ln2_end {
173+ println ! ( "{}" , file2. line( i ) ) ;
172174 }
173175
174176 println ! ( "." )
175177 }
176178 Change :: Delete ( _) => {
177- println ! ( "{}d" , self . f1_range( ) ) ;
179+ println ! ( "{}d" , self . f1_range( true ) ) ;
178180 }
179181 Change :: Substitute ( _) => {
180- self . changes . sort_by_key ( |change| change. get_ln2 ( ) ) ;
181- println ! ( "{}c" , self . f1_range( ) ) ;
182-
183- for change in & self . changes {
184- println ! ( "{}" , file2. line( change. get_ln2( ) - 1 ) ) ;
182+ println ! ( "{}c" , self . f1_range( true ) ) ;
183+ for i in self . ln2_start ..self . ln2_end {
184+ println ! ( "{}" , file2. line( i) ) ;
185185 }
186186
187187 println ! ( "." )
@@ -220,11 +220,11 @@ impl Hunk {
220220 println ! ( "." )
221221 }
222222 Change :: Delete ( _) => {
223- println ! ( "d{}" , self . f1_range( ) . replace( "," , " " ) ) ;
223+ println ! ( "d{}" , self . f1_range( true ) . replace( "," , " " ) ) ;
224224 }
225225 Change :: Substitute ( _) => {
226226 self . changes . sort_by_key ( |change| change. get_ln2 ( ) ) ;
227- println ! ( "c{}" , self . f1_range( ) . replace( "," , " " ) ) ;
227+ println ! ( "c{}" , self . f1_range( true ) . replace( "," , " " ) ) ;
228228
229229 for change in & self . changes {
230230 println ! ( "{}" , file2. line( change. get_ln2( ) - 1 ) ) ;
@@ -286,17 +286,17 @@ impl Hunks {
286286 let mut hunk_end1: usize ;
287287 let mut hunk_start2 = 0 ;
288288 let mut hunk_end2: usize ;
289- let mut prev_val = 0 as i32 ;
289+ let mut prev_val = - 2 as i32 ;
290290 for i in 0 ..lcs_indices. len ( ) {
291291 if ( lcs_indices[ i] == -1 ) && ( prev_val != -1 ) {
292292 // We reach a new deletion/substitution block
293293 hunk_start1 = i;
294- hunk_start2 = if prev_val == 0 {
294+ hunk_start2 = if prev_val == - 2 {
295295 0
296296 } else {
297297 ( prev_val + 1 ) as usize
298298 } ;
299- } else if ( prev_val != -1 ) && ( lcs_indices[ i] != -1 ) && ( lcs_indices[ i] != prev_val + 1 ) {
299+ } else if ( i != 0 ) && ( prev_val != -1 ) && ( lcs_indices[ i] != -1 ) && ( lcs_indices[ i] != prev_val + 1 ) {
300300 // there was an insertion (but no deletion)
301301 // no -1 values but a bump in the values, eg [136, 145]
302302 hunk_start1 = i;
0 commit comments