11use crate :: diff_util:: constants:: NO_NEW_LINE_AT_END_OF_FILE ;
22
3- use super :: {
4- change:: { Change , ChangeData } ,
5- file_data:: FileData ,
6- } ;
3+ use super :: file_data:: FileData ;
4+
5+ #[ derive( Clone , Default ) ]
6+ pub enum Change {
7+ #[ default]
8+ None ,
9+ Insert ,
10+ Delete ,
11+ Substitute ,
12+ }
713
814#[ derive( Clone ) ]
915pub struct Hunk {
1016 pub kind : Change ,
11- pub changes : Vec < Change > ,
1217 pub ln2_start : usize ,
1318 pub ln1_start : usize ,
1419 pub ln2_end : usize ,
@@ -19,7 +24,6 @@ impl Default for Hunk {
1924 fn default ( ) -> Self {
2025 Self {
2126 kind : Default :: default ( ) ,
22- changes : Default :: default ( ) ,
2327 ln2_start : usize:: MAX ,
2428 ln1_start : usize:: MAX ,
2529 ln2_end : usize:: MIN ,
@@ -72,15 +76,14 @@ impl Hunk {
7276 pub fn print_default ( & mut self , file1 : & FileData , file2 : & FileData , is_last : bool ) {
7377 match self . kind {
7478 Change :: None => { }
75- Change :: Unchanged ( _) => { }
76- Change :: Insert ( _) => {
79+ Change :: Insert => {
7780 println ! ( "{}a{}" , self . ln1_start, self . f2_range( true ) ) ;
7881
7982 for i in self . ln2_start ..self . ln2_end {
8083 println ! ( "> {}" , file2. line( i) ) ;
8184 }
8285 }
83- Change :: Delete ( _ ) => {
86+ Change :: Delete => {
8487 println ! ( "{}d{}" , self . f1_range( true ) , self . ln2_end) ;
8588
8689 for i in self . ln1_start ..self . ln1_end {
@@ -91,7 +94,7 @@ impl Hunk {
9194 println ! ( "{}" , NO_NEW_LINE_AT_END_OF_FILE ) ;
9295 }
9396 }
94- Change :: Substitute ( _ ) => {
97+ Change :: Substitute => {
9598 println ! ( "{}c{}" , self . f1_range( true ) , self . f2_range( true ) ) ;
9699
97100 for i in self . ln1_start ..self . ln1_end {
@@ -127,37 +130,22 @@ impl Hunk {
127130
128131 match & self . kind {
129132 Change :: None => { }
130- Change :: Unchanged ( _) => {
131- self . changes . sort_by_key ( |change| change. get_ln1 ( ) ) ;
132-
133- for change in & self . changes {
134- println ! ( "{:?} \" {}\" " , change, file1. line( change. get_ln1( ) - 1 ) ) ;
133+ Change :: Insert => {
134+ for i in self . ln2_start ..self . ln2_end {
135+ println ! ( "+ \" {}\" " , file2. line( i) ) ;
135136 }
136137 }
137- Change :: Insert ( _) => {
138- self . changes . sort_by_key ( |change| change. get_ln2 ( ) ) ;
139-
140- for change in & self . changes {
141- println ! ( "{:?} \" {}\" " , change, file2. line( change. get_ln2( ) - 1 ) ) ;
138+ Change :: Delete => {
139+ for i in self . ln1_start ..self . ln1_end {
140+ println ! ( "- \" {}\" " , file1. line( i) ) ;
142141 }
143142 }
144- Change :: Delete ( _) => {
145- self . changes . sort_by_key ( |change| change. get_ln1 ( ) ) ;
146-
147- for change in & self . changes {
148- println ! ( "{:?} \" {}\" " , change, file1. line( change. get_ln1( ) - 1 ) ) ;
143+ Change :: Substitute => {
144+ for i in self . ln1_start ..self . ln1_end {
145+ println ! ( "- \" {}\" " , file1. line( i) ) ;
149146 }
150- }
151- Change :: Substitute ( _) => {
152- self . changes . sort_by_key ( |change| change. get_ln2 ( ) ) ;
153-
154- for change in & self . changes {
155- println ! (
156- "{:?} \" {}\" => \" {}\" " ,
157- change,
158- file1. line( change. get_ln1( ) - 1 ) ,
159- file2. line( change. get_ln2( ) - 1 )
160- ) ;
147+ for i in self . ln2_start ..self . ln2_end {
148+ println ! ( "+ \" {}\" " , file2. line( i) ) ;
161149 }
162150 }
163151 }
@@ -166,19 +154,18 @@ impl Hunk {
166154 pub fn print_edit_script ( & mut self , file1 : & FileData , file2 : & FileData , is_last : bool ) {
167155 match & self . kind {
168156 Change :: None => { }
169- Change :: Unchanged ( _) => { }
170- Change :: Insert ( _) => {
157+ Change :: Insert => {
171158 println ! ( "{}a" , self . ln1_end) ;
172159 for i in self . ln2_start ..self . ln2_end {
173160 println ! ( "{}" , file2. line( i) ) ;
174161 }
175162
176163 println ! ( "." )
177164 }
178- Change :: Delete ( _ ) => {
165+ Change :: Delete => {
179166 println ! ( "{}d" , self . f1_range( true ) ) ;
180167 }
181- Change :: Substitute ( _ ) => {
168+ Change :: Substitute => {
182169 println ! ( "{}c" , self . f1_range( true ) ) ;
183170 for i in self . ln2_start ..self . ln2_end {
184171 println ! ( "{}" , file2. line( i) ) ;
@@ -302,15 +289,14 @@ impl Hunks {
302289 ) {
303290 let kind: Change ;
304291 if hunk_start1 == hunk_end1 {
305- kind = Change :: Insert ( ChangeData :: new ( hunk_start1 , hunk_start2 ) ) ;
292+ kind = Change :: Insert ;
306293 } else if hunk_start2 == hunk_end2 {
307- kind = Change :: Delete ( ChangeData :: new ( hunk_start1 , hunk_start2 ) ) ;
294+ kind = Change :: Delete ;
308295 } else {
309- kind = Change :: Substitute ( ChangeData :: new ( hunk_start1 , hunk_start2 ) ) ;
296+ kind = Change :: Substitute ;
310297 }
311298 self . hunks . push ( Hunk {
312299 kind,
313- changes : vec ! [ Change :: default ( ) ] ,
314300 ln2_start : hunk_start2,
315301 ln1_start : hunk_start1,
316302 ln2_end : hunk_end2,
0 commit comments