WIP - maintain foldmap with Buffer::edits_since
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
2463077b2d
commit
faba276fdc
11 changed files with 279 additions and 163 deletions
|
@ -107,12 +107,13 @@ pub enum Operation {
|
|||
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
pub enum Event {
|
||||
Edited,
|
||||
Edited(Patch<usize>),
|
||||
Dirtied,
|
||||
Saved,
|
||||
FileHandleChanged,
|
||||
Reloaded,
|
||||
Reparsed,
|
||||
DiagnosticsUpdated,
|
||||
Closed,
|
||||
}
|
||||
|
||||
|
@ -805,6 +806,7 @@ impl Buffer {
|
|||
|
||||
self.diagnostics_update_count += 1;
|
||||
cx.notify();
|
||||
cx.emit(Event::DiagnosticsUpdated);
|
||||
Ok(Operation::UpdateDiagnostics(self.diagnostics.clone()))
|
||||
}
|
||||
|
||||
|
@ -1316,14 +1318,16 @@ impl Buffer {
|
|||
was_dirty: bool,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
if self.edits_since::<usize>(old_version).next().is_none() {
|
||||
let patch =
|
||||
unsafe { Patch::new_unchecked(self.edits_since::<usize>(old_version).collect()) };
|
||||
if patch.is_empty() {
|
||||
return;
|
||||
}
|
||||
|
||||
self.reparse(cx);
|
||||
self.update_language_server();
|
||||
|
||||
cx.emit(Event::Edited);
|
||||
cx.emit(Event::Edited(patch));
|
||||
if !was_dirty {
|
||||
cx.emit(Event::Dirtied);
|
||||
}
|
||||
|
|
|
@ -110,11 +110,34 @@ fn test_edit_events(cx: &mut gpui::MutableAppContext) {
|
|||
let buffer_1_events = buffer_1_events.borrow();
|
||||
assert_eq!(
|
||||
*buffer_1_events,
|
||||
vec![Event::Edited, Event::Dirtied, Event::Edited, Event::Edited]
|
||||
vec![
|
||||
Event::Edited(Patch::new(vec![Edit {
|
||||
old: 2..4,
|
||||
new: 2..5
|
||||
}])),
|
||||
Event::Dirtied,
|
||||
Event::Edited(Patch::new(vec![Edit {
|
||||
old: 5..5,
|
||||
new: 5..7
|
||||
}])),
|
||||
Event::Edited(Patch::new(vec![Edit {
|
||||
old: 5..7,
|
||||
new: 5..5,
|
||||
}]))
|
||||
]
|
||||
);
|
||||
|
||||
let buffer_2_events = buffer_2_events.borrow();
|
||||
assert_eq!(*buffer_2_events, vec![Event::Edited, Event::Dirtied]);
|
||||
assert_eq!(
|
||||
*buffer_2_events,
|
||||
vec![
|
||||
Event::Edited(Patch::new(vec![Edit {
|
||||
old: 2..4,
|
||||
new: 2..5
|
||||
}])),
|
||||
Event::Dirtied
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue