@@ -230,77 +230,78 @@ impl ConsumeHunk for FileDiff {
230
230
header : & str ,
231
231
hunk : & [ u8 ] ,
232
232
) -> std:: io:: Result < ( ) > {
233
- let lines = hunk
234
- . lines ( )
235
- . scan (
236
- ( before_hunk_start, after_hunk_start) ,
237
- |( old_lineno, new_lineno) , line| {
238
- let ( line_type, content, old_lineno, new_lineno) =
239
- match line {
240
- [ b'+' , rest @ ..] => {
241
- let result = (
242
- DiffLineType :: Add ,
243
- rest,
244
- None ,
245
- Some ( * new_lineno) ,
246
- ) ;
247
- * new_lineno += 1 ;
248
- result
249
- }
250
- [ b'-' , rest @ ..] => {
251
- let result = (
252
- DiffLineType :: Delete ,
253
- rest,
254
- Some ( * old_lineno) ,
255
- None ,
256
- ) ;
257
- * old_lineno += 1 ;
258
- result
259
- }
260
- [ b' ' , rest @ ..] => {
261
- let result = (
262
- DiffLineType :: None ,
263
- rest,
264
- Some ( * old_lineno) ,
265
- Some ( * new_lineno) ,
266
- ) ;
267
- * old_lineno += 1 ;
268
- * new_lineno += 1 ;
269
- result
270
- }
271
- [ b'@' , ..] => (
272
- DiffLineType :: Header ,
273
- line,
233
+ let non_header_lines = hunk. lines ( ) . scan (
234
+ ( before_hunk_start, after_hunk_start) ,
235
+ |( old_lineno, new_lineno) , line| {
236
+ let ( line_type, content, old_lineno, new_lineno) =
237
+ match line {
238
+ [ b'+' , rest @ ..] => {
239
+ let result = (
240
+ DiffLineType :: Add ,
241
+ rest,
274
242
None ,
243
+ Some ( * new_lineno) ,
244
+ ) ;
245
+ * new_lineno += 1 ;
246
+ result
247
+ }
248
+ [ b'-' , rest @ ..] => {
249
+ let result = (
250
+ DiffLineType :: Delete ,
251
+ rest,
252
+ Some ( * old_lineno) ,
275
253
None ,
276
- ) ,
277
- _ => {
278
- // Empty lines or unknown prefixes are treated as context.
279
- let result = (
280
- DiffLineType :: None ,
281
- line,
282
- Some ( * old_lineno) ,
283
- Some ( * new_lineno) ,
284
- ) ;
285
- * old_lineno += 1 ;
286
- * new_lineno += 1 ;
287
- result
288
- }
289
- } ;
290
-
291
- Some ( DiffLine {
292
- position : DiffLinePosition {
293
- old_lineno,
294
- new_lineno,
295
- } ,
296
- content : String :: from_utf8_lossy ( content)
297
- . trim_matches ( is_newline)
298
- . into ( ) ,
299
- line_type,
300
- } )
301
- } ,
302
- )
303
- . collect ( ) ;
254
+ ) ;
255
+ * old_lineno += 1 ;
256
+ result
257
+ }
258
+ [ b' ' , rest @ ..] => {
259
+ let result = (
260
+ DiffLineType :: None ,
261
+ rest,
262
+ Some ( * old_lineno) ,
263
+ Some ( * new_lineno) ,
264
+ ) ;
265
+ * old_lineno += 1 ;
266
+ * new_lineno += 1 ;
267
+ result
268
+ }
269
+ _ => {
270
+ // Empty lines or unknown prefixes are treated as context.
271
+ let result = (
272
+ DiffLineType :: None ,
273
+ line,
274
+ Some ( * old_lineno) ,
275
+ Some ( * new_lineno) ,
276
+ ) ;
277
+ * old_lineno += 1 ;
278
+ * new_lineno += 1 ;
279
+ result
280
+ }
281
+ } ;
282
+
283
+ Some ( DiffLine {
284
+ position : DiffLinePosition {
285
+ old_lineno,
286
+ new_lineno,
287
+ } ,
288
+ content : String :: from_utf8_lossy ( content)
289
+ . trim_matches ( is_newline)
290
+ . into ( ) ,
291
+ line_type,
292
+ } )
293
+ } ,
294
+ ) ;
295
+
296
+ let mut lines = vec ! [ DiffLine {
297
+ content: header. to_string( ) . into( ) ,
298
+ line_type: DiffLineType :: Header ,
299
+ position: DiffLinePosition {
300
+ old_lineno: None ,
301
+ new_lineno: None ,
302
+ } ,
303
+ } ] ;
304
+ lines. extend ( non_header_lines) ;
304
305
305
306
let hunk_header = HunkHeader {
306
307
old_start : before_hunk_start,
0 commit comments