WIP - maintain foldmap with Buffer::edits_since

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Max Brunsfeld 2021-11-30 17:23:02 -08:00
parent 2463077b2d
commit faba276fdc
11 changed files with 279 additions and 163 deletions

View file

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