From b4bc7906d251254aa18384b0ed5854e0854b588d Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 15 Nov 2021 14:17:48 -0800 Subject: [PATCH] Propagate wrap edits to block map when folding / unfolding Co-Authored-By: Nathan Sobo --- crates/editor/src/display_map.rs | 16 ++++++++++++---- crates/editor/src/display_map/block_map.rs | 8 ++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/crates/editor/src/display_map.rs b/crates/editor/src/display_map.rs index 67dbb34d5d..64ee9b9cc1 100644 --- a/crates/editor/src/display_map.rs +++ b/crates/editor/src/display_map.rs @@ -80,12 +80,16 @@ impl DisplayMap { ) { let (mut fold_map, snapshot, edits) = self.fold_map.write(cx); let (snapshot, edits) = self.tab_map.sync(snapshot, edits); - self.wrap_map + let (snapshot, edits) = self + .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); + self.block_map.sync(&snapshot, edits, cx); let (snapshot, edits) = fold_map.fold(ranges, cx); let (snapshot, edits) = self.tab_map.sync(snapshot, edits); - self.wrap_map + let (snapshot, edits) = self + .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); + self.block_map.sync(&snapshot, edits, cx); } pub fn unfold( @@ -95,12 +99,16 @@ impl DisplayMap { ) { let (mut fold_map, snapshot, edits) = self.fold_map.write(cx); let (snapshot, edits) = self.tab_map.sync(snapshot, edits); - self.wrap_map + let (snapshot, edits) = self + .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); + self.block_map.sync(&snapshot, edits, cx); let (snapshot, edits) = fold_map.unfold(ranges, cx); let (snapshot, edits) = self.tab_map.sync(snapshot, edits); - self.wrap_map + let (snapshot, edits) = self + .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); + self.block_map.sync(&snapshot, edits, cx); } pub fn insert_blocks( diff --git a/crates/editor/src/display_map/block_map.rs b/crates/editor/src/display_map/block_map.rs index 68f0117192..3317625525 100644 --- a/crates/editor/src/display_map/block_map.rs +++ b/crates/editor/src/display_map/block_map.rs @@ -113,7 +113,7 @@ impl BlockMap { edits: Vec, cx: &AppContext, ) -> BlockSnapshot { - self.apply_edits(&wrap_snapshot, edits, cx); + self.sync(&wrap_snapshot, edits, cx); *self.wrap_snapshot.lock() = wrap_snapshot.clone(); BlockSnapshot { wrap_snapshot, @@ -127,12 +127,12 @@ impl BlockMap { edits: Vec, cx: &AppContext, ) -> BlockMapWriter { - self.apply_edits(&wrap_snapshot, edits, cx); + self.sync(&wrap_snapshot, edits, cx); *self.wrap_snapshot.lock() = wrap_snapshot; BlockMapWriter(self) } - fn apply_edits(&self, wrap_snapshot: &WrapSnapshot, edits: Vec, cx: &AppContext) { + pub fn sync(&self, wrap_snapshot: &WrapSnapshot, edits: Vec, cx: &AppContext) { if edits.is_empty() { return; } @@ -356,7 +356,7 @@ impl<'a> BlockMapWriter<'a> { } } - self.0.apply_edits(&*self.0.wrap_snapshot.lock(), edits, cx); + self.0.sync(&*self.0.wrap_snapshot.lock(), edits, cx); ids }