Fix run indicators with expanded diff hunks (#23758)

Fix runnable positioning when diff hunks are altered.

Release Notes:

- N/A
This commit is contained in:
Conrad Irwin 2025-01-27 23:05:46 -07:00 committed by GitHub
parent ee5f270f3f
commit 7deafdafae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 6 deletions

View file

@ -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));

View file

@ -91,6 +91,7 @@ pub enum Event {
ExcerptsEdited {
ids: Vec<ExcerptId>,
},
DiffHunksToggled,
Edited {
singleton_buffer_edited: bool,
edited_buffer: Option<Entity<Buffer>>,
@ -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);
}
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,7 +3479,8 @@ 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
if !region.is_main_buffer
|| region.buffer.remote_id() == excerpt.buffer_id
&& region.buffer_range.end.value.unwrap() < range.start
{
cursor.next();