@@ -38,13 +38,31 @@ priv struct HunkHeader(Range, Range)
3838///|
3939/// Creates a hunk header from a (non empty) array of edit
4040fn HunkHeader ::new(edits : ArrayView [Edit ]) -> Self {
41- let first = edits[0]
42- let last = edits[edits.length() - 1]
43- let old_start = first.old_range().0
44- let new_start = first.new_range().0
45- let old_end = last.old_range().1
46- let new_end = last.new_range().1
47- HunkHeader (Range (old_start, old_end), Range (new_start, new_end))
41+ let (first_old_start, first_old_end) = edits[0].old_range()
42+ let (first_new_start, first_new_end) = edits[0].new_range()
43+ let mut old_end = first_old_end
44+ let mut new_end = first_new_end
45+ let mut found_old_end = false
46+ let mut found_new_end = false
47+ let mut i = edits.length()
48+ while i > 0 {
49+ i -= 1
50+ let edit = edits[i]
51+ let (edit_old_start, edit_old_end) = edit.old_range()
52+ let (edit_new_start, edit_new_end) = edit.new_range()
53+ if !found_old_end && edit_old_start != edit_old_end {
54+ old_end = edit_old_end
55+ found_old_end = true
56+ }
57+ if !found_new_end && edit_new_start != edit_new_end {
58+ new_end = edit_new_end
59+ found_new_end = true
60+ }
61+ if found_old_end && found_new_end {
62+ break
63+ }
64+ }
65+ HunkHeader (Range (first_old_start, old_end), Range (first_new_start, new_end))
4866}
4967
5068///|
0 commit comments