fix: stop hiding cached gutter markers while edits refresh

This commit is contained in:
2026-10-13 22:01:32 +02:00
parent 142b00118a
commit 00628e0efd
5 changed files with 23 additions and 6 deletions
+2 -3
View File
@@ -4932,9 +4932,8 @@ impl Editor {
return None;
}
let changes = self.active.gutter_changes.as_ref()?;
if changes.revision != self.active.text_revision
|| Some(changes.path.as_path()) != self.path()
{
// Keep the last completed markers visible while the worker recomputes after edits.
if Some(changes.path.as_path()) != self.path() {
return None;
}
changes.lines.get(row).copied().flatten()
+18 -1
View File
@@ -1610,17 +1610,34 @@ mod tests {
assert_eq!(session.editor.gutter_change(1), Some(Change::Modified));
session.editor.handle(Input::Char('i'));
session.editor.handle(Input::Char('x'));
assert_eq!(session.editor.gutter_change(1), None);
assert_eq!(session.editor.gutter_change(1), Some(Change::Modified));
session.editor.handle(Input::Char('y'));
assert_eq!(session.editor.gutter_change(1), Some(Change::Modified));
session.editor.handle(Input::Backspace);
assert_eq!(session.editor.gutter_change(1), Some(Change::Modified));
session.editor.handle(Input::Escape);
session.editor.handle(Input::Char('u'));
assert_eq!(session.editor.gutter_change(1), Some(Change::Modified));
session.editor.handle(Input::Char('U'));
assert_eq!(session.editor.gutter_change(1), Some(Change::Modified));
assert!(!session.apply_gutter_result(
second_request,
vec![(first_buffer, Ok(vec![None, Some(Change::Removed)]))],
));
assert_eq!(session.editor.gutter_change(1), Some(Change::Modified));
session.poll_gutter_at(now);
assert_eq!(session.editor.gutter_change(1), Some(Change::Modified));
assert!(session.apply_gutter_result(
session.gutter_request_id,
vec![(first_buffer, Ok(vec![None, Some(Change::Added)]))],
));
assert_eq!(session.editor.gutter_change(1), Some(Change::Added));
session.poll_gutter_at(now + Duration::from_secs(1));
assert!(session.apply_gutter_result(
session.gutter_request_id,
vec![(first_buffer, Ok(vec![None, None]))],
));
assert_eq!(session.editor.gutter_change(1), None);
session.editor.execute(&format!("buffer {second_buffer}"));
assert_eq!(session.editor.gutter_change(0), Some(Change::Added));
}