Deduplicate identical hunk layouts

This commit is contained in:
Julia 2022-10-17 12:41:20 -04:00
parent 50ae3e03f7
commit be34c50c72

View file

@ -1017,7 +1017,7 @@ impl EditorElement {
let visual_end = DisplayPoint::new(rows.end, 0).to_point(snapshot).row; let visual_end = DisplayPoint::new(rows.end, 0).to_point(snapshot).row;
let hunks = buffer_snapshot.git_diff_hunks_in_range(visual_start..visual_end); let hunks = buffer_snapshot.git_diff_hunks_in_range(visual_start..visual_end);
let mut layouts = Vec::new(); let mut layouts = Vec::<DiffHunkLayout>::new();
for hunk in hunks { for hunk in hunks {
let hunk_start_point = Point::new(hunk.buffer_range.start, 0); let hunk_start_point = Point::new(hunk.buffer_range.start, 0);
@ -1049,11 +1049,18 @@ impl EditorElement {
start..end start..end
}; };
layouts.push(DiffHunkLayout { let has_existing_layout = match layouts.last() {
visual_range, Some(e) => visual_range == e.visual_range && e.status == hunk.status(),
status: hunk.status(), None => false,
is_folded: containing_fold.is_some(), };
});
if !has_existing_layout {
layouts.push(DiffHunkLayout {
visual_range,
status: hunk.status(),
is_folded: containing_fold.is_some(),
});
}
} }
layouts layouts