Skip to content

Commit 8853ed8

Browse files
committed
Atop 0.1.8: Fix unified diff including up to 2 * context_lines before first hunk when near input start
See pascalkuthe#35
1 parent 05ff38e commit 8853ed8

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

src/unified_diff.rs

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ where
1515
after: &'a [Token],
1616
interner: &'a Interner<T>,
1717

18-
pos: u32,
18+
pos: Option<u32>,
1919
before_hunk_start: u32,
2020
after_hunk_start: u32,
2121
before_hunk_len: u32,
@@ -42,7 +42,7 @@ where
4242
interner: &input.interner,
4343
before: &input.before,
4444
after: &input.after,
45-
pos: 0,
45+
pos: None,
4646
}
4747
}
4848
}
@@ -65,7 +65,7 @@ where
6565
interner: &input.interner,
6666
before: &input.before,
6767
after: &input.after,
68-
pos: 0,
68+
pos: None,
6969
}
7070
}
7171

@@ -80,8 +80,17 @@ where
8080
return;
8181
}
8282

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);
8594

8695
writeln!(
8796
&mut self.dst,
@@ -98,10 +107,10 @@ where
98107
self.after_hunk_len = 0
99108
}
100109

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);
105114
self.before_hunk_len += len;
106115
self.after_hunk_len += len;
107116
}
@@ -115,13 +124,16 @@ where
115124
type Out = W;
116125

117126
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 {
119128
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);
125137
self.before_hunk_len += before.end - before.start;
126138
self.after_hunk_len += after.end - after.start;
127139
self.print_tokens(

0 commit comments

Comments
 (0)