15
15
after : & ' a [ Token ] ,
16
16
interner : & ' a Interner < T > ,
17
17
18
- pos : u32 ,
18
+ pos : Option < u32 > ,
19
19
before_hunk_start : u32 ,
20
20
after_hunk_start : u32 ,
21
21
before_hunk_len : u32 ,
42
42
interner : & input. interner ,
43
43
before : & input. before ,
44
44
after : & input. after ,
45
- pos : 0 ,
45
+ pos : None ,
46
46
}
47
47
}
48
48
}
65
65
interner : & input. interner ,
66
66
before : & input. before ,
67
67
after : & input. after ,
68
- pos : 0 ,
68
+ pos : None ,
69
69
}
70
70
}
71
71
80
80
return ;
81
81
}
82
82
83
- let end = ( self . pos + 3 ) . min ( self . before . len ( ) as u32 ) ;
84
- self . update_pos ( end, end) ;
83
+ let pos = match self . pos {
84
+ Some ( pos) => pos,
85
+ None => {
86
+ let pos = self . before_hunk_start . saturating_sub ( 3 ) ;
87
+ self . pos = Some ( pos) ;
88
+ pos
89
+ }
90
+ } ;
91
+
92
+ let end = ( pos + 3 ) . min ( self . before . len ( ) as u32 ) ;
93
+ self . update_pos ( pos, end, end) ;
85
94
86
95
writeln ! (
87
96
& mut self . dst,
@@ -98,10 +107,10 @@ where
98
107
self . after_hunk_len = 0
99
108
}
100
109
101
- fn update_pos ( & mut self , print_to : u32 , move_to : u32 ) {
102
- self . print_tokens ( & self . before [ self . pos as usize ..print_to as usize ] , ' ' ) ;
103
- let len = print_to - self . pos ;
104
- self . pos = move_to;
110
+ fn update_pos ( & mut self , pos : u32 , print_to : u32 , move_to : u32 ) {
111
+ self . print_tokens ( & self . before [ pos as usize ..print_to as usize ] , ' ' ) ;
112
+ let len = print_to - pos;
113
+ self . pos = Some ( move_to) ;
105
114
self . before_hunk_len += len;
106
115
self . after_hunk_len += len;
107
116
}
@@ -115,13 +124,16 @@ where
115
124
type Out = W ;
116
125
117
126
fn process_change ( & mut self , before : Range < u32 > , after : Range < u32 > ) {
118
- if before . start - self . pos > 6 {
127
+ let pos = if self . pos . is_none ( ) || before . start . saturating_sub ( self . pos . unwrap ( ) ) > 6 {
119
128
self . flush ( ) ;
120
- self . pos = before. start - 3 ;
121
- self . before_hunk_start = self . pos ;
122
- self . after_hunk_start = after. start - 3 ;
123
- }
124
- self . update_pos ( before. start , before. end ) ;
129
+ self . before_hunk_start = before. start . saturating_sub ( 3 ) ;
130
+ self . after_hunk_start = after. start . saturating_sub ( 3 ) ;
131
+ self . pos = Some ( self . before_hunk_start ) ;
132
+ self . before_hunk_start
133
+ } else {
134
+ self . pos . unwrap ( )
135
+ } ;
136
+ self . update_pos ( pos, before. start , before. end ) ;
125
137
self . before_hunk_len += before. end - before. start ;
126
138
self . after_hunk_len += after. end - after. start ;
127
139
self . print_tokens (
0 commit comments