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)); 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) => { multi_buffer::Event::LanguageChanged(buffer_id) => {
linked_editing_ranges::refresh_linked_ranges(self, window, cx); linked_editing_ranges::refresh_linked_ranges(self, window, cx);
cx.emit(EditorEvent::Reparsed(*buffer_id)); cx.emit(EditorEvent::Reparsed(*buffer_id));

View file

@ -91,6 +91,7 @@ pub enum Event {
ExcerptsEdited { ExcerptsEdited {
ids: Vec<ExcerptId>, ids: Vec<ExcerptId>,
}, },
DiffHunksToggled,
Edited { Edited {
singleton_buffer_edited: bool, singleton_buffer_edited: bool,
edited_buffer: Option<Entity<Buffer>>, edited_buffer: Option<Entity<Buffer>>,
@ -2299,6 +2300,7 @@ impl MultiBuffer {
excerpt_edits, excerpt_edits,
DiffChangeKind::ExpandOrCollapseHunks { expand }, DiffChangeKind::ExpandOrCollapseHunks { expand },
); );
cx.emit(Event::DiffHunksToggled);
cx.emit(Event::Edited { cx.emit(Event::Edited {
singleton_buffer_edited: false, singleton_buffer_edited: false,
edited_buffer: None, edited_buffer: None,
@ -3418,10 +3420,8 @@ impl MultiBufferSnapshot {
while let Some(region) = cursor.region() { while let Some(region) = cursor.region() {
if region.is_main_buffer { if region.is_main_buffer {
let mut buffer_end = region.buffer_range.start.key; let mut buffer_end = region.buffer_range.start.key;
if region.is_main_buffer { let overshoot = range.end.saturating_sub(region.range.start.key);
let overshoot = range.end.saturating_sub(region.range.start.key); buffer_end.add_assign(&overshoot);
buffer_end.add_assign(&overshoot);
}
range_end = Some((region.excerpt.id, buffer_end)); range_end = Some((region.excerpt.id, buffer_end));
break; break;
} }
@ -3433,6 +3433,10 @@ impl MultiBufferSnapshot {
value: None, value: None,
}); });
if cursor.region().is_some_and(|region| !region.is_main_buffer) {
cursor.prev();
}
iter::from_fn(move || loop { iter::from_fn(move || loop {
let excerpt = cursor.excerpt()?; let excerpt = cursor.excerpt()?;
@ -3475,8 +3479,9 @@ impl MultiBufferSnapshot {
// the metadata item's range. // the metadata item's range.
if range.start > D::default() { if range.start > D::default() {
while let Some(region) = cursor.region() { while let Some(region) = cursor.region() {
if region.buffer.remote_id() == excerpt.buffer_id if !region.is_main_buffer
&& region.buffer_range.end.value.unwrap() < range.start || region.buffer.remote_id() == excerpt.buffer_id
&& region.buffer_range.end.value.unwrap() < range.start
{ {
cursor.next(); cursor.next();
} else { } else {