Touch up stale hunks fix (#24669)

Release Notes:

- N/A

Co-authored-by: Max <max@zed.dev>
This commit is contained in:
Cole Miller 2025-02-11 12:47:41 -05:00 committed by GitHub
parent 7c00eec08b
commit 759ea0ec48
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 19 additions and 13 deletions

View file

@ -587,16 +587,18 @@ impl BufferDiff {
range: Range<Anchor>, range: Range<Anchor>,
buffer: &text::BufferSnapshot, buffer: &text::BufferSnapshot,
cx: &App, cx: &App,
) -> Range<Anchor> { ) -> Option<Range<Anchor>> {
let start = self let start = self
.hunks_intersecting_range(range.clone(), &buffer, cx) .hunks_intersecting_range(range.clone(), &buffer, cx)
.next() .next()?
.map_or(Anchor::MIN, |hunk| hunk.buffer_range.start); .buffer_range
.start;
let end = self let end = self
.hunks_intersecting_range_rev(range.clone(), &buffer) .hunks_intersecting_range_rev(range.clone(), &buffer)
.next() .next()?
.map_or(Anchor::MAX, |hunk| hunk.buffer_range.end); .buffer_range
start..end .end;
Some(start..end)
} }
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]

View file

@ -260,16 +260,20 @@ impl BufferDiffState {
let changed_range = match (unstaged_changed_range, uncommitted_changed_range) { let changed_range = match (unstaged_changed_range, uncommitted_changed_range) {
(None, None) => None, (None, None) => None,
(Some(unstaged_range), None) => { (Some(unstaged_range), None) => {
Some(uncommitted_diff.range_to_hunk_range(unstaged_range, &buffer, cx)) uncommitted_diff.range_to_hunk_range(unstaged_range, &buffer, cx)
} }
(None, Some(uncommitted_range)) => Some(uncommitted_range), (None, Some(uncommitted_range)) => Some(uncommitted_range),
(Some(unstaged_range), Some(uncommitted_range)) => maybe!({ (Some(unstaged_range), Some(uncommitted_range)) => {
let expanded_range = let mut start = uncommitted_range.start;
uncommitted_diff.range_to_hunk_range(unstaged_range, &buffer, cx); let mut end = uncommitted_range.end;
let start = expanded_range.start.min(&uncommitted_range.start, &buffer); if let Some(unstaged_range) =
let end = expanded_range.end.max(&uncommitted_range.end, &buffer); uncommitted_diff.range_to_hunk_range(unstaged_range, &buffer, cx)
{
start = unstaged_range.start.min(&uncommitted_range.start, &buffer);
end = unstaged_range.end.max(&uncommitted_range.end, &buffer);
}
Some(start..end) Some(start..end)
}), }
}; };
cx.emit(BufferDiffEvent::DiffChanged { changed_range }); cx.emit(BufferDiffEvent::DiffChanged { changed_range });
})?; })?;