From be34c50c72d0da2bc67f041c84a49e80b38077bb Mon Sep 17 00:00:00 2001 From: Julia Date: Mon, 17 Oct 2022 12:41:20 -0400 Subject: [PATCH] Deduplicate identical hunk layouts --- crates/editor/src/element.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index f7d01bdb58..e5a9f8f756 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -1017,7 +1017,7 @@ impl EditorElement { 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 mut layouts = Vec::new(); + let mut layouts = Vec::::new(); for hunk in hunks { let hunk_start_point = Point::new(hunk.buffer_range.start, 0); @@ -1049,11 +1049,18 @@ impl EditorElement { start..end }; - layouts.push(DiffHunkLayout { - visual_range, - status: hunk.status(), - is_folded: containing_fold.is_some(), - }); + let has_existing_layout = match layouts.last() { + Some(e) => visual_range == e.visual_range && e.status == hunk.status(), + None => false, + }; + + if !has_existing_layout { + layouts.push(DiffHunkLayout { + visual_range, + status: hunk.status(), + is_folded: containing_fold.is_some(), + }); + } } layouts