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:
parent
ee5f270f3f
commit
7deafdafae
2 changed files with 14 additions and 6 deletions
|
@ -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));
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue