Skip to content

Commit dc4f65e

Browse files
committed
fix edit_script
1 parent 452b18b commit dc4f65e

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

text/diff_util/file_diff.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ impl<'a> FileDiff<'a> {
9393
&mut lcs_indices,
9494
);
9595

96+
println!("{:?}", lcs_indices);
9697
diff.hunks
9798
.create_hunks_from_lcs(&lcs_indices, num_lines1, num_lines2);
9899

text/diff_util/hunks.rs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,21 @@ impl Hunk {
3333
Self::default()
3434
}
3535

36-
pub fn f1_range(&self) -> String {
36+
pub fn f1_range(&self, is_ed: bool) -> String {
3737
if self.ln1_start == self.ln1_end {
3838
format!("{}", self.ln1_start)
39+
} else if is_ed && (self.ln1_start == self.ln1_end - 1) {
40+
format!("{}", self.ln1_end)
3941
} else {
4042
format!("{},{}", self.ln1_start, self.ln1_end)
4143
}
4244
}
4345

44-
pub fn f2_range(&self) -> String {
46+
pub fn f2_range(&self, is_ed: bool) -> String {
4547
if self.ln2_start == self.ln2_end {
4648
format!("{}", self.ln2_start)
49+
} else if is_ed && (self.ln2_start == self.ln2_end - 1) {
50+
format!("{}", self.ln2_end)
4751
} else {
4852
format!("{},{}", self.ln2_start, self.ln2_end)
4953
}
@@ -70,14 +74,14 @@ impl Hunk {
7074
Change::None => {}
7175
Change::Unchanged(_) => {}
7276
Change::Insert(_) => {
73-
println!("{}a{}", self.ln1_start, self.f2_range());
77+
println!("{}a{}", self.ln1_start, self.f2_range(false));
7478

7579
for i in self.ln2_start..self.ln2_end {
7680
println!("> {}", file2.line(i));
7781
}
7882
}
7983
Change::Delete(_) => {
80-
println!("{}d{}", self.f1_range(), self.ln2_end);
84+
println!("{}d{}", self.f1_range(false), self.ln2_end);
8185

8286
for i in self.ln1_start..self.ln1_end {
8387
println!("< {}", file1.line(i));
@@ -88,7 +92,7 @@ impl Hunk {
8892
}
8993
}
9094
Change::Substitute(_) => {
91-
println!("{}c{}", self.f1_range(), self.f2_range());
95+
println!("{}c{}", self.f1_range(false), self.f2_range(false));
9296

9397
for i in self.ln1_start..self.ln1_end {
9498
println!("< {}", file1.line(i));
@@ -115,10 +119,10 @@ impl Hunk {
115119
"{}-{} ({}) <> {}-{} ({})",
116120
self.ln1_start,
117121
self.ln1_end,
118-
self.f1_range(),
122+
self.f1_range(false),
119123
self.ln2_start,
120124
self.ln2_end,
121-
self.f2_range()
125+
self.f2_range(false)
122126
);
123127

124128
match &self.kind {
@@ -164,24 +168,20 @@ impl Hunk {
164168
Change::None => {}
165169
Change::Unchanged(_) => {}
166170
Change::Insert(_) => {
167-
self.changes.sort_by_key(|change| change.get_ln2());
168-
169171
println!("{}a", self.ln1_end);
170-
for change in &self.changes {
171-
println!("{}", file2.line(change.get_ln2() - 1));
172+
for i in self.ln2_start..self.ln2_end {
173+
println!("{}", file2.line(i));
172174
}
173175

174176
println!(".")
175177
}
176178
Change::Delete(_) => {
177-
println!("{}d", self.f1_range());
179+
println!("{}d", self.f1_range(true));
178180
}
179181
Change::Substitute(_) => {
180-
self.changes.sort_by_key(|change| change.get_ln2());
181-
println!("{}c", self.f1_range());
182-
183-
for change in &self.changes {
184-
println!("{}", file2.line(change.get_ln2() - 1));
182+
println!("{}c", self.f1_range(true));
183+
for i in self.ln2_start..self.ln2_end {
184+
println!("{}", file2.line(i));
185185
}
186186

187187
println!(".")
@@ -220,11 +220,11 @@ impl Hunk {
220220
println!(".")
221221
}
222222
Change::Delete(_) => {
223-
println!("d{}", self.f1_range().replace(",", " "));
223+
println!("d{}", self.f1_range(true).replace(",", " "));
224224
}
225225
Change::Substitute(_) => {
226226
self.changes.sort_by_key(|change| change.get_ln2());
227-
println!("c{}", self.f1_range().replace(",", " "));
227+
println!("c{}", self.f1_range(true).replace(",", " "));
228228

229229
for change in &self.changes {
230230
println!("{}", file2.line(change.get_ln2() - 1));
@@ -286,17 +286,17 @@ impl Hunks {
286286
let mut hunk_end1: usize;
287287
let mut hunk_start2 = 0;
288288
let mut hunk_end2: usize;
289-
let mut prev_val = 0 as i32;
289+
let mut prev_val = -2 as i32;
290290
for i in 0..lcs_indices.len() {
291291
if (lcs_indices[i] == -1) && (prev_val != -1) {
292292
// We reach a new deletion/substitution block
293293
hunk_start1 = i;
294-
hunk_start2 = if prev_val == 0 {
294+
hunk_start2 = if prev_val == -2 {
295295
0
296296
} else {
297297
(prev_val + 1) as usize
298298
};
299-
} else if (prev_val != -1) && (lcs_indices[i] != -1) && (lcs_indices[i] != prev_val + 1) {
299+
} else if (i != 0) && (prev_val != -1) && (lcs_indices[i] != -1) && (lcs_indices[i] != prev_val + 1) {
300300
// there was an insertion (but no deletion)
301301
// no -1 values but a bump in the values, eg [136, 145]
302302
hunk_start1 = i;

0 commit comments

Comments
 (0)