Bump FoldMap's version in FoldMap::sync
(and not in DisplayMap
)
This commit is contained in:
parent
b841b3eb79
commit
47c467dafc
6 changed files with 386 additions and 347 deletions
|
@ -33,7 +33,7 @@ pub struct DisplayMap {
|
|||
tab_map: TabMap,
|
||||
wrap_map: ModelHandle<WrapMap>,
|
||||
block_map: BlockMap,
|
||||
edits_since_sync: Mutex<Patch<usize>>,
|
||||
buffer_edits_since_sync: Mutex<Patch<usize>>,
|
||||
}
|
||||
|
||||
impl Entity for DisplayMap {
|
||||
|
@ -49,7 +49,7 @@ impl DisplayMap {
|
|||
wrap_width: Option<f32>,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) -> Self {
|
||||
let (fold_map, snapshot) = FoldMap::new(buffer.clone(), cx);
|
||||
let (fold_map, snapshot) = FoldMap::new(buffer.read(cx).snapshot());
|
||||
let (tab_map, snapshot) = TabMap::new(snapshot, tab_size);
|
||||
let (wrap_map, snapshot) = WrapMap::new(snapshot, font_id, font_size, wrap_width, cx);
|
||||
let block_map = BlockMap::new(buffer.clone(), snapshot);
|
||||
|
@ -61,14 +61,15 @@ impl DisplayMap {
|
|||
tab_map,
|
||||
wrap_map,
|
||||
block_map,
|
||||
edits_since_sync: Default::default(),
|
||||
buffer_edits_since_sync: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn snapshot(&self, cx: &mut ModelContext<Self>) -> DisplayMapSnapshot {
|
||||
let buffer_snapshot = self.buffer.read(cx).snapshot();
|
||||
let (folds_snapshot, edits) = self.fold_map.read(
|
||||
mem::take(&mut *self.edits_since_sync.lock()).into_inner(),
|
||||
cx,
|
||||
buffer_snapshot,
|
||||
mem::take(&mut *self.buffer_edits_since_sync.lock()).into_inner(),
|
||||
);
|
||||
let (tabs_snapshot, edits) = self.tab_map.sync(folds_snapshot.clone(), edits);
|
||||
let (wraps_snapshot, edits) = self
|
||||
|
@ -90,16 +91,17 @@ impl DisplayMap {
|
|||
ranges: impl IntoIterator<Item = Range<T>>,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
let snapshot = self.buffer.read(cx).snapshot();
|
||||
let (mut fold_map, snapshot, edits) = self.fold_map.write(
|
||||
mem::take(&mut *self.edits_since_sync.lock()).into_inner(),
|
||||
cx,
|
||||
snapshot,
|
||||
mem::take(&mut *self.buffer_edits_since_sync.lock()).into_inner(),
|
||||
);
|
||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||
let (snapshot, edits) = self
|
||||
.wrap_map
|
||||
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
||||
self.block_map.read(snapshot, edits, cx);
|
||||
let (snapshot, edits) = fold_map.fold(ranges, cx);
|
||||
let (snapshot, edits) = fold_map.fold(ranges);
|
||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||
let (snapshot, edits) = self
|
||||
.wrap_map
|
||||
|
@ -112,16 +114,17 @@ impl DisplayMap {
|
|||
ranges: impl IntoIterator<Item = Range<T>>,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
let snapshot = self.buffer.read(cx).snapshot();
|
||||
let (mut fold_map, snapshot, edits) = self.fold_map.write(
|
||||
mem::take(&mut *self.edits_since_sync.lock()).into_inner(),
|
||||
cx,
|
||||
snapshot,
|
||||
mem::take(&mut *self.buffer_edits_since_sync.lock()).into_inner(),
|
||||
);
|
||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||
let (snapshot, edits) = self
|
||||
.wrap_map
|
||||
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
|
||||
self.block_map.read(snapshot, edits, cx);
|
||||
let (snapshot, edits) = fold_map.unfold(ranges, cx);
|
||||
let (snapshot, edits) = fold_map.unfold(ranges);
|
||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||
let (snapshot, edits) = self
|
||||
.wrap_map
|
||||
|
@ -138,9 +141,10 @@ impl DisplayMap {
|
|||
P: ToOffset + Clone,
|
||||
T: Into<Rope> + Clone,
|
||||
{
|
||||
let snapshot = self.buffer.read(cx).snapshot();
|
||||
let (snapshot, edits) = self.fold_map.read(
|
||||
mem::take(&mut *self.edits_since_sync.lock()).into_inner(),
|
||||
cx,
|
||||
snapshot,
|
||||
mem::take(&mut *self.buffer_edits_since_sync.lock()).into_inner(),
|
||||
);
|
||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||
let (snapshot, edits) = self
|
||||
|
@ -159,9 +163,10 @@ impl DisplayMap {
|
|||
}
|
||||
|
||||
pub fn remove_blocks(&mut self, ids: HashSet<BlockId>, cx: &mut ModelContext<Self>) {
|
||||
let snapshot = self.buffer.read(cx).snapshot();
|
||||
let (snapshot, edits) = self.fold_map.read(
|
||||
mem::take(&mut *self.edits_since_sync.lock()).into_inner(),
|
||||
cx,
|
||||
snapshot,
|
||||
mem::take(&mut *self.buffer_edits_since_sync.lock()).into_inner(),
|
||||
);
|
||||
let (snapshot, edits) = self.tab_map.sync(snapshot, edits);
|
||||
let (snapshot, edits) = self
|
||||
|
@ -194,13 +199,9 @@ impl DisplayMap {
|
|||
) {
|
||||
match event {
|
||||
language::Event::Edited(patch) => {
|
||||
self.fold_map.version += 1;
|
||||
let mut edits_since_sync = self.edits_since_sync.lock();
|
||||
let mut edits_since_sync = self.buffer_edits_since_sync.lock();
|
||||
*edits_since_sync = edits_since_sync.compose(patch);
|
||||
}
|
||||
language::Event::Reparsed | language::Event::DiagnosticsUpdated => {
|
||||
self.fold_map.version += 1;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
@ -563,7 +564,7 @@ mod tests {
|
|||
}
|
||||
}
|
||||
_ => {
|
||||
buffer.update(&mut cx, |buffer, _| buffer.randomly_edit(&mut rng, 5));
|
||||
buffer.update(&mut cx, |buffer, cx| buffer.randomly_edit(&mut rng, 5, cx));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue