From de020af6ef3a1699d17d3d1d3498ff6dbbea4c6a Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Fri, 14 Feb 2025 13:58:59 -0500 Subject: [PATCH] Fix duplicate hunk controls after splitting DisplayDiffHunk (#24893) This PR fixes expanded modification hunks having two sets of hunk controls after #24834. Release Notes: - N/A --- crates/editor/src/element.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 91cab249bd..06c4b24641 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -91,6 +91,7 @@ enum DisplayDiffHunk { multi_buffer_range: Range, status: DiffHunkStatus, expanded: bool, + is_primary: bool, }, } @@ -1605,6 +1606,7 @@ impl EditorElement { hunk.buffer_range.clone(), ), expanded, + is_primary: true, }, None, )); @@ -1620,6 +1622,7 @@ impl EditorElement { hunk.buffer_range, ), expanded, + is_primary: false, }, None, )); @@ -1644,6 +1647,7 @@ impl EditorElement { hunk.buffer_range, ), expanded, + is_primary: true, }, None, )); @@ -4205,14 +4209,29 @@ impl EditorElement { newest_cursor_position, ]; - for (hunk, _) in display_hunks { + let mut display_hunks = display_hunks.iter().peekable(); + while let Some((hunk, _)) = display_hunks.next() { if let DisplayDiffHunk::Unfolded { display_row_range, multi_buffer_range, status, + is_primary: true, .. } = &hunk { + let mut display_row_range = display_row_range.clone(); + if let Some(( + DisplayDiffHunk::Unfolded { + display_row_range: secondary_display_row_range, + is_primary: false, + .. + }, + _, + )) = display_hunks.peek() + { + display_row_range.end = secondary_display_row_range.end; + } + if display_row_range.start < row_range.start || display_row_range.start >= row_range.end {