From 7deafdafae1b1b82c2a0e941580856c21e88b79c Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Mon, 27 Jan 2025 23:05:46 -0700 Subject: [PATCH] Fix run indicators with expanded diff hunks (#23758) Fix runnable positioning when diff hunks are altered. Release Notes: - N/A --- crates/editor/src/editor.rs | 3 +++ crates/multi_buffer/src/multi_buffer.rs | 17 +++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index bd5904ccd8..ba3f1dc54c 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -13381,6 +13381,9 @@ impl Editor { cx.emit(EditorEvent::Reparsed(*buffer_id)); } + multi_buffer::Event::DiffHunksToggled => { + self.tasks_update_task = Some(self.refresh_runnables(window, cx)); + } multi_buffer::Event::LanguageChanged(buffer_id) => { linked_editing_ranges::refresh_linked_ranges(self, window, cx); cx.emit(EditorEvent::Reparsed(*buffer_id)); diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index a70ab85728..ad6338ccd2 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -91,6 +91,7 @@ pub enum Event { ExcerptsEdited { ids: Vec, }, + DiffHunksToggled, Edited { singleton_buffer_edited: bool, edited_buffer: Option>, @@ -2299,6 +2300,7 @@ impl MultiBuffer { excerpt_edits, DiffChangeKind::ExpandOrCollapseHunks { expand }, ); + cx.emit(Event::DiffHunksToggled); cx.emit(Event::Edited { singleton_buffer_edited: false, edited_buffer: None, @@ -3418,10 +3420,8 @@ impl MultiBufferSnapshot { while let Some(region) = cursor.region() { if region.is_main_buffer { let mut buffer_end = region.buffer_range.start.key; - if region.is_main_buffer { - let overshoot = range.end.saturating_sub(region.range.start.key); - buffer_end.add_assign(&overshoot); - } + let overshoot = range.end.saturating_sub(region.range.start.key); + buffer_end.add_assign(&overshoot); range_end = Some((region.excerpt.id, buffer_end)); break; } @@ -3433,6 +3433,10 @@ impl MultiBufferSnapshot { value: None, }); + if cursor.region().is_some_and(|region| !region.is_main_buffer) { + cursor.prev(); + } + iter::from_fn(move || loop { let excerpt = cursor.excerpt()?; @@ -3475,8 +3479,9 @@ impl MultiBufferSnapshot { // the metadata item's range. if range.start > D::default() { while let Some(region) = cursor.region() { - if region.buffer.remote_id() == excerpt.buffer_id - && region.buffer_range.end.value.unwrap() < range.start + if !region.is_main_buffer + || region.buffer.remote_id() == excerpt.buffer_id + && region.buffer_range.end.value.unwrap() < range.start { cursor.next(); } else {