From 759ea0ec48fbaff66725817fb6da4f7445c051c7 Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Tue, 11 Feb 2025 12:47:41 -0500 Subject: [PATCH] Touch up stale hunks fix (#24669) Release Notes: - N/A Co-authored-by: Max --- crates/buffer_diff/src/buffer_diff.rs | 14 ++++++++------ crates/project/src/buffer_store.rs | 18 +++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/crates/buffer_diff/src/buffer_diff.rs b/crates/buffer_diff/src/buffer_diff.rs index fb244abbb7..772835f9a9 100644 --- a/crates/buffer_diff/src/buffer_diff.rs +++ b/crates/buffer_diff/src/buffer_diff.rs @@ -587,16 +587,18 @@ impl BufferDiff { range: Range, buffer: &text::BufferSnapshot, cx: &App, - ) -> Range { + ) -> Option> { let start = self .hunks_intersecting_range(range.clone(), &buffer, cx) - .next() - .map_or(Anchor::MIN, |hunk| hunk.buffer_range.start); + .next()? + .buffer_range + .start; let end = self .hunks_intersecting_range_rev(range.clone(), &buffer) - .next() - .map_or(Anchor::MAX, |hunk| hunk.buffer_range.end); - start..end + .next()? + .buffer_range + .end; + Some(start..end) } #[allow(clippy::too_many_arguments)] diff --git a/crates/project/src/buffer_store.rs b/crates/project/src/buffer_store.rs index 0955f8e869..08d11de899 100644 --- a/crates/project/src/buffer_store.rs +++ b/crates/project/src/buffer_store.rs @@ -260,16 +260,20 @@ impl BufferDiffState { let changed_range = match (unstaged_changed_range, uncommitted_changed_range) { (None, None) => 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), - (Some(unstaged_range), Some(uncommitted_range)) => maybe!({ - let expanded_range = - uncommitted_diff.range_to_hunk_range(unstaged_range, &buffer, cx); - let start = expanded_range.start.min(&uncommitted_range.start, &buffer); - let end = expanded_range.end.max(&uncommitted_range.end, &buffer); + (Some(unstaged_range), Some(uncommitted_range)) => { + let mut start = uncommitted_range.start; + let mut end = uncommitted_range.end; + if let Some(unstaged_range) = + 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) - }), + } }; cx.emit(BufferDiffEvent::DiffChanged { changed_range }); })?;