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
This commit is contained in:
Cole Miller 2025-02-14 13:58:59 -05:00 committed by GitHub
parent 610158b2f0
commit de020af6ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -91,6 +91,7 @@ enum DisplayDiffHunk {
multi_buffer_range: Range<Anchor>, multi_buffer_range: Range<Anchor>,
status: DiffHunkStatus, status: DiffHunkStatus,
expanded: bool, expanded: bool,
is_primary: bool,
}, },
} }
@ -1605,6 +1606,7 @@ impl EditorElement {
hunk.buffer_range.clone(), hunk.buffer_range.clone(),
), ),
expanded, expanded,
is_primary: true,
}, },
None, None,
)); ));
@ -1620,6 +1622,7 @@ impl EditorElement {
hunk.buffer_range, hunk.buffer_range,
), ),
expanded, expanded,
is_primary: false,
}, },
None, None,
)); ));
@ -1644,6 +1647,7 @@ impl EditorElement {
hunk.buffer_range, hunk.buffer_range,
), ),
expanded, expanded,
is_primary: true,
}, },
None, None,
)); ));
@ -4205,14 +4209,29 @@ impl EditorElement {
newest_cursor_position, 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 { if let DisplayDiffHunk::Unfolded {
display_row_range, display_row_range,
multi_buffer_range, multi_buffer_range,
status, status,
is_primary: true,
.. ..
} = &hunk } = &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 if display_row_range.start < row_range.start
|| display_row_range.start >= row_range.end || display_row_range.start >= row_range.end
{ {