Fix overly wide columns when last hunk is near start of file

pull/889/head
Wilfred Hughes 2025-10-05 00:27:18 +07:00
parent 5f43683d99
commit 84d037343d
2 changed files with 21 additions and 20 deletions

@ -59,7 +59,7 @@ sample_files/devicetree_1.dts sample_files/devicetree_2.dts
f7c4e7b4444b02d87b2eec1485d86211 -
sample_files/elisp_1.el sample_files/elisp_2.el
c47ace7b6cfecb9d6195ad323eb38407 -
d7bdaf5f87e1c44475774c6e7ba70822 -
sample_files/elisp_contiguous_1.el sample_files/elisp_contiguous_2.el
4a5a33873a4f84ee055d95e1448fba35 -
@ -152,7 +152,7 @@ sample_files/many_newlines_1.txt sample_files/many_newlines_2.txt
52ca05855e520876479e6f608c5e7831 -
sample_files/metadata_1.clj sample_files/metadata_2.clj
25326c138b8e05d250ba7de40655fb0e -
fd0fee4a660e938c44182e6f77746d0e -
sample_files/modules_1.ml sample_files/modules_2.ml
8584f755c99a93dd744a6722596a4418 -
@ -242,7 +242,7 @@ sample_files/simple_1.txt sample_files/simple_2.txt
7df04bd5dbc68a2392b2f0b375c4413e -
sample_files/slider_1.rs sample_files/slider_2.rs
9182f0f53b7588d7cb6e93ab8ff5ce57 -
346155adadb1340c026bbfa5cfd5669d -
sample_files/slider_at_end_1.json sample_files/slider_at_end_2.json
cb370f1c0ccc5e155743330629f899f0 -

@ -174,12 +174,6 @@ struct SourceDimensions {
/// The number of characters required to display line numbers on
/// the RHS.
rhs_line_nums_width: usize,
/// The highest line number in the LHS source that we will
/// display.
lhs_max_line_visible: LineNumber,
/// The highest line number in the RHS source that we will
/// display.
rhs_max_line_visible: LineNumber,
lhs_max_line_in_file: LineNumber,
rhs_max_line_in_file: LineNumber,
}
@ -247,8 +241,6 @@ impl SourceDimensions {
content_display_width: content_width,
lhs_line_nums_width,
rhs_line_nums_width,
lhs_max_line_visible,
rhs_max_line_visible,
lhs_max_line_in_file,
rhs_max_line_in_file,
}
@ -555,16 +547,25 @@ pub(crate) fn print(
let mut lhs_max_visible_line = 1.into();
let mut rhs_max_visible_line = 1.into();
for (lhs_line_num, rhs_line_num) in matched_lines_to_print.iter().rev() {
if let Some(lhs_line_num) = *lhs_line_num {
lhs_max_visible_line = max(lhs_max_visible_line, lhs_line_num);
}
if let Some(rhs_line_num) = *rhs_line_num {
rhs_max_visible_line = max(rhs_max_visible_line, rhs_line_num);
}
if let Some(hunk) = hunks.last() {
let (start_i, end_i) = matched_lines_indexes_for_hunk(
matched_lines_to_print,
hunk,
display_options.num_context_lines as usize,
);
let aligned_lines = &matched_lines_to_print[start_i..end_i];
for (lhs_line_num, rhs_line_num) in aligned_lines.iter().rev() {
if let Some(lhs_line_num) = *lhs_line_num {
lhs_max_visible_line = max(lhs_max_visible_line, lhs_line_num);
}
if let Some(rhs_line_num) = *rhs_line_num {
rhs_max_visible_line = max(rhs_max_visible_line, rhs_line_num);
}
if lhs_max_visible_line > 1.into() && rhs_max_visible_line > 1.into() {
break;
if lhs_max_visible_line > 1.into() && rhs_max_visible_line > 1.into() {
break;
}
}
}