Fix bug where git diff hunks would not extend through a soft wrap

This commit is contained in:
Mikayla Maki 2023-05-19 15:30:10 -07:00
parent 560160b100
commit 623a177fe6
No known key found for this signature in database
2 changed files with 10 additions and 10 deletions

View file

@ -652,7 +652,7 @@ impl EditorElement {
//TODO: This rendering is entirely a horrible hack //TODO: This rendering is entirely a horrible hack
DiffHunkStatus::Removed => { DiffHunkStatus::Removed => {
let row = *display_row_range.start(); let row = display_row_range.start;
let offset = line_height / 2.; let offset = line_height / 2.;
let start_y = row as f32 * line_height - offset - scroll_top; let start_y = row as f32 * line_height - offset - scroll_top;
@ -674,11 +674,11 @@ impl EditorElement {
} }
}; };
let start_row = *display_row_range.start(); let start_row = display_row_range.start;
let end_row = *display_row_range.end(); let end_row = display_row_range.end;
let start_y = start_row as f32 * line_height - scroll_top; let start_y = start_row as f32 * line_height - scroll_top;
let end_y = end_row as f32 * line_height - scroll_top + line_height; let end_y = end_row as f32 * line_height - scroll_top;
let width = diff_style.width_em * line_height; let width = diff_style.width_em * line_height;
let highlight_origin = bounds.origin() + vec2f(-width, start_y); let highlight_origin = bounds.origin() + vec2f(-width, start_y);

View file

@ -1,4 +1,5 @@
use std::ops::RangeInclusive;
use std::ops::Range;
use git::diff::{DiffHunk, DiffHunkStatus}; use git::diff::{DiffHunk, DiffHunkStatus};
use language::Point; use language::Point;
@ -15,7 +16,7 @@ pub enum DisplayDiffHunk {
}, },
Unfolded { Unfolded {
display_row_range: RangeInclusive<u32>, display_row_range: Range<u32>,
status: DiffHunkStatus, status: DiffHunkStatus,
}, },
} }
@ -26,7 +27,7 @@ impl DisplayDiffHunk {
&DisplayDiffHunk::Folded { display_row } => display_row, &DisplayDiffHunk::Folded { display_row } => display_row,
DisplayDiffHunk::Unfolded { DisplayDiffHunk::Unfolded {
display_row_range, .. display_row_range, ..
} => *display_row_range.start(), } => display_row_range.start,
} }
} }
@ -36,7 +37,7 @@ impl DisplayDiffHunk {
DisplayDiffHunk::Unfolded { DisplayDiffHunk::Unfolded {
display_row_range, .. display_row_range, ..
} => display_row_range.clone(), } => display_row_range.start..=display_row_range.end - 1,
}; };
range.contains(&display_row) range.contains(&display_row)
@ -80,13 +81,12 @@ pub fn diff_hunk_to_display(hunk: DiffHunk<u32>, snapshot: &DisplaySnapshot) ->
let hunk_end_row_inclusive = hunk let hunk_end_row_inclusive = hunk
.buffer_range .buffer_range
.end .end
.saturating_sub(1)
.max(hunk.buffer_range.start); .max(hunk.buffer_range.start);
let hunk_end_point = Point::new(hunk_end_row_inclusive, 0); let hunk_end_point = Point::new(hunk_end_row_inclusive, 0);
let end = hunk_end_point.to_display_point(snapshot).row(); let end = hunk_end_point.to_display_point(snapshot).row();
DisplayDiffHunk::Unfolded { DisplayDiffHunk::Unfolded {
display_row_range: start..=end, display_row_range: start..end,
status: hunk.status(), status: hunk.status(),
} }
} }