Update breadcrumbs when multibuffers' excerpts change

This commit is contained in:
Max Brunsfeld 2022-04-06 17:12:36 -07:00
parent 8f38ac8270
commit ec837fa6d7
2 changed files with 21 additions and 3 deletions

View File

@ -16,6 +16,7 @@ use language::{
Bias, Buffer, Diagnostic, DiagnosticEntry, DiagnosticSeverity, Point, Selection, SelectionGoal,
};
use project::{DiagnosticSummary, Project, ProjectPath};
use settings::Settings;
use std::{
any::{Any, TypeId},
cmp::Ordering,
@ -26,7 +27,6 @@ use std::{
};
use util::TryFutureExt;
use workspace::{ItemHandle as _, ItemNavHistory, Workspace};
use settings::Settings;
action!(Deploy);

View File

@ -788,7 +788,7 @@ impl MultiBuffer {
old: edit_start..edit_start,
new: edit_start..edit_end,
}]);
cx.emit(Event::Edited);
cx.notify();
ids
}
@ -802,10 +802,12 @@ impl MultiBuffer {
snapshot.trailing_excerpt_update_count += 1;
snapshot.is_dirty = false;
snapshot.has_conflict = false;
self.subscriptions.publish_mut([Edit {
old: 0..prev_len,
new: 0..0,
}]);
cx.emit(Event::Edited);
cx.notify();
}
@ -993,6 +995,7 @@ impl MultiBuffer {
}
self.subscriptions.publish_mut(edits);
cx.emit(Event::Edited);
cx.notify();
}
@ -2928,7 +2931,7 @@ mod tests {
use gpui::MutableAppContext;
use language::{Buffer, Rope};
use rand::prelude::*;
use std::env;
use std::{env, rc::Rc};
use text::{Point, RandomCharIter};
use util::test::sample_text;
@ -2985,6 +2988,15 @@ mod tests {
let buffer_2 = cx.add_model(|cx| Buffer::new(0, sample_text(6, 6, 'g'), cx));
let multibuffer = cx.add_model(|_| MultiBuffer::new(0));
let events = Rc::new(RefCell::new(Vec::<Event>::new()));
multibuffer.update(cx, |_, cx| {
let events = events.clone();
cx.subscribe(&multibuffer, move |_, _, event, _| {
events.borrow_mut().push(event.clone())
})
.detach();
});
let subscription = multibuffer.update(cx, |multibuffer, cx| {
let subscription = multibuffer.subscribe();
multibuffer.push_excerpts(buffer_1.clone(), [Point::new(1, 2)..Point::new(2, 5)], cx);
@ -3009,6 +3021,12 @@ mod tests {
subscription
});
// Adding excerpts emits an edited event.
assert_eq!(
events.borrow().as_slice(),
&[Event::Edited, Event::Edited, Event::Edited]
);
let snapshot = multibuffer.read(cx).snapshot(cx);
assert_eq!(
snapshot.text(),