diff --git a/crates/editor/src/display_map.rs b/crates/editor/src/display_map.rs index 329205859ba29ae561355a7028d5da910e039f5c..696c1aed868047a110ec290332e298e9c801db45 100644 --- a/crates/editor/src/display_map.rs +++ b/crates/editor/src/display_map.rs @@ -81,8 +81,8 @@ mod wrap_map; pub use crate::display_map::{fold_map::FoldMap, inlay_map::InlayMap, tab_map::TabMap}; pub use block_map::{ Block, BlockChunks as DisplayChunks, BlockContext, BlockId, BlockMap, BlockPlacement, - BlockPoint, BlockProperties, BlockRows, BlockStyle, CustomBlockId, EditorMargins, RenderBlock, - StickyHeaderExcerpt, + BlockPoint, BlockProperties, BlockRows, BlockStyle, CompanionView, CustomBlockId, + EditorMargins, RenderBlock, StickyHeaderExcerpt, }; pub use crease_map::*; pub use fold_map::{ @@ -357,7 +357,7 @@ impl DisplayMap { old: WrapRow(0)..snapshot.max_point().row(), new: WrapRow(0)..snapshot.max_point().row(), }]); - self.block_map.read(snapshot, edits, None, None); + self.block_map.read(snapshot, edits, None); return; }; @@ -381,11 +381,14 @@ impl DisplayMap { let companion_wrap_data = companion_display_map .update(cx, |dm, cx| dm.sync_through_wrap(cx)) .ok(); - - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = + companion_wrap_data + .as_ref() + .zip(companion) + .map(|((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }); let edits = Patch::new( [text::Edit { @@ -395,12 +398,8 @@ impl DisplayMap { .into_iter() .collect(), ); - self.block_map.read( - snapshot.clone(), - edits.clone(), - companion_wrap_edits, - companion.map(|c| (c, self.entity_id)), - ); + self.block_map + .read(snapshot.clone(), edits.clone(), companion_view); if let Some((companion_dm, _)) = &self.companion { let _ = companion_dm.update(cx, |dm, _cx| { @@ -409,8 +408,8 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&snapshot, &edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref + .map(|c| CompanionView::new(dm.entity_id, &snapshot, &edits, c)), ); } }); @@ -453,19 +452,19 @@ impl DisplayMap { .update(cx, |dm, cx| dm.sync_through_wrap(cx)) .ok() }); - - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); let block_snapshot = self .block_map .read( self_wrap_snapshot.clone(), self_wrap_edits.clone(), - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), + companion_view, ) .snapshot; @@ -476,8 +475,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -508,7 +513,7 @@ impl DisplayMap { let block_snapshot = self .block_map - .read(wrap_snapshot, wrap_edits, None, None) + .read(wrap_snapshot, wrap_edits, None) .snapshot; DisplaySnapshot { @@ -558,10 +563,6 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let (snapshot, edits) = self.inlay_map.sync(buffer_snapshot.clone(), edits); let (mut fold_map, snapshot, edits) = self.fold_map.write(snapshot, edits); let (snapshot, edits) = self.tab_map.sync(snapshot, edits, tab_size); @@ -569,13 +570,15 @@ impl DisplayMap { .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - self.block_map.read( - snapshot, - edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map.read(snapshot, edits, companion_view); + } let inline = creases.iter().filter_map(|crease| { if let Crease::Inline { @@ -597,17 +600,16 @@ impl DisplayMap { let (self_wrap_snapshot, self_wrap_edits) = (self_new_wrap_snapshot.clone(), self_new_wrap_edits.clone()); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - - let mut block_map = self.block_map.write( - self_new_wrap_snapshot, - self_new_wrap_edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + let mut block_map = { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map + .write(self_new_wrap_snapshot, self_new_wrap_edits, companion_view) + }; let blocks = creases.into_iter().filter_map(|crease| { if let Crease::Block { range, @@ -652,8 +654,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -678,10 +686,6 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let (snapshot, edits) = self.inlay_map.sync(snapshot, edits); let (mut fold_map, snapshot, edits) = self.fold_map.write(snapshot, edits); let (snapshot, edits) = self.tab_map.sync(snapshot, edits, tab_size); @@ -689,13 +693,15 @@ impl DisplayMap { .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - self.block_map.read( - snapshot, - edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map.read(snapshot, edits, companion_view); + } let (snapshot, edits) = fold_map.remove_folds(ranges, type_id); let (snapshot, edits) = self.tab_map.sync(snapshot, edits, tab_size); @@ -706,17 +712,16 @@ impl DisplayMap { let (self_wrap_snapshot, self_wrap_edits) = (self_new_wrap_snapshot.clone(), self_new_wrap_edits.clone()); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - - self.block_map.write( - self_new_wrap_snapshot, - self_new_wrap_edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map + .write(self_new_wrap_snapshot, self_new_wrap_edits, companion_view); + } if let Some((companion_dm, _)) = &self.companion { let _ = companion_dm.update(cx, |dm, cx| { @@ -725,8 +730,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -755,10 +766,6 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let (snapshot, edits) = self.inlay_map.sync(snapshot, edits); let (mut fold_map, snapshot, edits) = self.fold_map.write(snapshot, edits); let (snapshot, edits) = self.tab_map.sync(snapshot, edits, tab_size); @@ -766,13 +773,15 @@ impl DisplayMap { .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - self.block_map.read( - snapshot, - edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map.read(snapshot, edits, companion_view); + } let (snapshot, edits) = fold_map.unfold_intersecting(offset_ranges.iter().cloned(), inclusive); @@ -784,17 +793,19 @@ impl DisplayMap { let (self_wrap_snapshot, self_wrap_edits) = (self_new_wrap_snapshot.clone(), self_new_wrap_edits.clone()); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - - let mut block_map = self.block_map.write( - self_new_wrap_snapshot.clone(), - self_new_wrap_edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + let mut block_map = { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map.write( + self_new_wrap_snapshot.clone(), + self_new_wrap_edits, + companion_view, + ) + }; block_map.remove_intersecting_replace_blocks(offset_ranges, inclusive); if let Some((companion_dm, _)) = &self.companion { @@ -804,8 +815,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -824,16 +841,17 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); let mut block_map = self.block_map.write( self_wrap_snapshot.clone(), self_wrap_edits.clone(), - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), + companion_view, ); block_map.disable_header_for_buffer(buffer_id); @@ -844,8 +862,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -883,16 +907,17 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); let mut block_map = self.block_map.write( self_wrap_snapshot.clone(), self_wrap_edits.clone(), - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), + companion_view, ); block_map.fold_buffers(buffer_ids.iter().copied(), self.buffer.read(cx), cx); @@ -911,8 +936,14 @@ impl DisplayMap { let mut block_map = dm.block_map.write( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); if !their_buffer_ids.is_empty() { block_map.fold_buffers(their_buffer_ids, dm.buffer.read(cx), cx); @@ -954,16 +985,17 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); let mut block_map = self.block_map.write( self_wrap_snapshot.clone(), self_wrap_edits.clone(), - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), + companion_view, ); block_map.unfold_buffers(buffer_ids.iter().copied(), self.buffer.read(cx), cx); @@ -982,8 +1014,14 @@ impl DisplayMap { let mut block_map = dm.block_map.write( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); if !their_buffer_ids.is_empty() { block_map.unfold_buffers(their_buffer_ids, dm.buffer.read(cx), cx); @@ -1037,16 +1075,17 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); let mut block_map = self.block_map.write( self_wrap_snapshot.clone(), self_wrap_edits.clone(), - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), + companion_view, ); let result = block_map.insert(blocks); @@ -1057,8 +1096,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -1077,16 +1122,17 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); let mut block_map = self.block_map.write( self_wrap_snapshot.clone(), self_wrap_edits.clone(), - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), + companion_view, ); block_map.resize(heights); @@ -1097,8 +1143,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -1120,16 +1172,17 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); let mut block_map = self.block_map.write( self_wrap_snapshot.clone(), self_wrap_edits.clone(), - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), + companion_view, ); block_map.remove(ids); @@ -1140,8 +1193,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -1162,16 +1221,17 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); let block_map = self.block_map.read( self_wrap_snapshot.clone(), self_wrap_edits.clone(), - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), + companion_view, ); let block_row = block_map.row_for_block(block_id)?; @@ -1182,8 +1242,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -1298,10 +1364,6 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let (snapshot, edits) = self.inlay_map.sync(snapshot, edits); let (mut fold_map, snapshot, edits) = self.fold_map.write(snapshot, edits); let (snapshot, edits) = self.tab_map.sync(snapshot, edits, tab_size); @@ -1309,13 +1371,15 @@ impl DisplayMap { .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - self.block_map.read( - snapshot, - edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map.read(snapshot, edits, companion_view); + } let (snapshot, edits) = fold_map.update_fold_widths(widths); let widths_changed = !edits.is_empty(); @@ -1327,17 +1391,16 @@ impl DisplayMap { let (self_wrap_snapshot, self_wrap_edits) = (self_new_wrap_snapshot.clone(), self_new_wrap_edits.clone()); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - - self.block_map.read( - self_new_wrap_snapshot, - self_new_wrap_edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map + .read(self_new_wrap_snapshot, self_new_wrap_edits, companion_view); + } if let Some((companion_dm, _)) = &self.companion { let _ = companion_dm.update(cx, |dm, cx| { @@ -1346,8 +1409,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); @@ -1380,10 +1449,6 @@ impl DisplayMap { .ok() }); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let (snapshot, edits) = self.inlay_map.sync(buffer_snapshot, edits); let (snapshot, edits) = self.fold_map.read(snapshot, edits); let (snapshot, edits) = self.tab_map.sync(snapshot, edits, tab_size); @@ -1391,13 +1456,15 @@ impl DisplayMap { .wrap_map .update(cx, |map, cx| map.sync(snapshot, edits, cx)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - self.block_map.read( - snapshot, - edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map.read(snapshot, edits, companion_view); + } let (snapshot, edits) = self.inlay_map.splice(to_remove, to_insert); let (snapshot, edits) = self.fold_map.read(snapshot, edits); @@ -1409,17 +1476,16 @@ impl DisplayMap { let (self_wrap_snapshot, self_wrap_edits) = (self_new_wrap_snapshot.clone(), self_new_wrap_edits.clone()); - let companion_wrap_edits = companion_wrap_data - .as_ref() - .map(|(snapshot, edits)| (snapshot, edits)); - let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); - - self.block_map.read( - self_new_wrap_snapshot, - self_new_wrap_edits, - companion_wrap_edits, - companion_ref.map(|c| (c, self.entity_id)), - ); + { + let companion_ref = self.companion.as_ref().map(|(_, c)| c.read(cx)); + let companion_view = companion_wrap_data.as_ref().zip(companion_ref).map( + |((snapshot, edits), companion)| { + CompanionView::new(self.entity_id, snapshot, edits, companion) + }, + ); + self.block_map + .read(self_new_wrap_snapshot, self_new_wrap_edits, companion_view); + } if let Some((companion_dm, _)) = &self.companion { let _ = companion_dm.update(cx, |dm, cx| { @@ -1428,8 +1494,14 @@ impl DisplayMap { dm.block_map.read( companion_snapshot, companion_edits, - Some((&self_wrap_snapshot, &self_wrap_edits)), - their_companion_ref.map(|c| (c, dm.entity_id)), + their_companion_ref.map(|c| { + CompanionView::new( + dm.entity_id, + &self_wrap_snapshot, + &self_wrap_edits, + c, + ) + }), ); } }); diff --git a/crates/editor/src/display_map/block_map.rs b/crates/editor/src/display_map/block_map.rs index a7cd0c88e8c48599989669f9ece9fecc8b9b5f60..4a4d6881e538a650d98cbc2b25385640b1617935 100644 --- a/crates/editor/src/display_map/block_map.rs +++ b/crates/editor/src/display_map/block_map.rs @@ -57,10 +57,14 @@ pub struct BlockMapWriter<'a> { companion: Option>, } -struct BlockMapWriterCompanion<'a> { - companion: &'a Companion, - snapshot: &'a WrapSnapshot, - entity: EntityId, +struct BlockMapWriterCompanion<'a>(CompanionView<'a>); + +impl<'a> Deref for BlockMapWriterCompanion<'a> { + type Target = CompanionView<'a>; + + fn deref(&self) -> &Self::Target { + &self.0 + } } #[derive(Clone)] @@ -514,6 +518,30 @@ pub struct BlockRows<'a> { started: bool, } +#[derive(Clone, Copy)] +pub struct CompanionView<'a> { + entity_id: EntityId, + wrap_snapshot: &'a WrapSnapshot, + wrap_edits: &'a WrapPatch, + companion: &'a Companion, +} + +impl<'a> CompanionView<'a> { + pub(crate) fn new( + entity_id: EntityId, + wrap_snapshot: &'a WrapSnapshot, + wrap_edits: &'a WrapPatch, + companion: &'a Companion, + ) -> Self { + Self { + entity_id, + wrap_snapshot, + wrap_edits, + companion, + } + } +} + impl BlockMap { #[ztracing::instrument(skip_all)] pub fn new( @@ -542,7 +570,6 @@ impl BlockMap { new: WrapRow(0)..row_count, }]), None, - None, ); map } @@ -552,10 +579,9 @@ impl BlockMap { &self, wrap_snapshot: WrapSnapshot, edits: WrapPatch, - companion_wrap_edits: Option<(&WrapSnapshot, &WrapPatch)>, - companion: Option<(&Companion, EntityId)>, + companion_view: Option, ) -> BlockMapReader<'_> { - self.sync(&wrap_snapshot, edits, companion_wrap_edits, companion); + self.sync(&wrap_snapshot, edits, companion_view); *self.wrap_snapshot.borrow_mut() = wrap_snapshot.clone(); BlockMapReader { blocks: &self.custom_blocks, @@ -574,23 +600,13 @@ impl BlockMap { &'a mut self, wrap_snapshot: WrapSnapshot, edits: WrapPatch, - companion_wrap_edits: Option<(&'a WrapSnapshot, &'a WrapPatch)>, - companion: Option<(&'a Companion, EntityId)>, + companion_view: Option>, ) -> BlockMapWriter<'a> { - self.sync(&wrap_snapshot, edits, companion_wrap_edits, companion); + self.sync(&wrap_snapshot, edits, companion_view); *self.wrap_snapshot.borrow_mut() = wrap_snapshot; - let companion = match (companion_wrap_edits, companion) { - (Some(_), None) | (None, Some(_)) => unreachable!(), - (None, None) => None, - (Some(companion_wrap_edits), Some(companion)) => Some(BlockMapWriterCompanion { - companion: companion.0, - snapshot: companion_wrap_edits.0, - entity: companion.1, - }), - }; BlockMapWriter { block_map: self, - companion, + companion: companion_view.map(BlockMapWriterCompanion), } } @@ -599,8 +615,7 @@ impl BlockMap { &self, wrap_snapshot: &WrapSnapshot, mut edits: WrapPatch, - companion_wrap_edits: Option<(&WrapSnapshot, &WrapPatch)>, - companion: Option<(&Companion, EntityId)>, + companion_view: Option, ) { let buffer = wrap_snapshot.buffer_snapshot(); @@ -622,8 +637,13 @@ impl BlockMap { } // Pull in companion edits to ensure we recompute spacers in ranges that have changed in the companion. - if let Some((companion_new_snapshot, companion_edits)) = companion_wrap_edits - && let Some((companion, display_map_id)) = companion + if let Some(CompanionView { + wrap_snapshot: companion_new_snapshot, + wrap_edits: companion_edits, + companion, + entity_id: display_map_id, + .. + }) = companion_view { let mut companion_edits_in_my_space: Vec = companion_edits .clone() @@ -893,8 +913,12 @@ impl BlockMap { }, )); - if let Some((companion_snapshot, _)) = companion_wrap_edits - && let Some((companion, display_map_id)) = companion + if let Some(CompanionView { + wrap_snapshot: companion_snapshot, + companion, + entity_id: display_map_id, + .. + }) = companion_view { blocks_in_edit.extend(self.spacer_blocks( (start_bound, end_bound), @@ -1495,18 +1519,20 @@ impl BlockMapWriter<'_> { } let default_patch = Patch::default(); - let (companion_snapshot, companion) = self - .companion - .as_ref() - .map(|companion| { - ( - (companion.snapshot, &default_patch), - (companion.companion, companion.entity), - ) - }) - .unzip(); - self.block_map - .sync(wrap_snapshot, edits, companion_snapshot, companion); + self.block_map.sync( + wrap_snapshot, + edits, + self.companion.as_deref().map( + |&CompanionView { + entity_id, + wrap_snapshot, + companion, + .. + }| { + CompanionView::new(entity_id, wrap_snapshot, &default_patch, companion) + }, + ), + ); ids } @@ -1563,18 +1589,20 @@ impl BlockMapWriter<'_> { } let default_patch = Patch::default(); - let (companion_snapshot, companion) = self - .companion - .as_ref() - .map(|companion| { - ( - (companion.snapshot, &default_patch), - (companion.companion, companion.entity), - ) - }) - .unzip(); - self.block_map - .sync(wrap_snapshot, edits, companion_snapshot, companion); + self.block_map.sync( + wrap_snapshot, + edits, + self.companion.as_deref().map( + |&CompanionView { + entity_id, + wrap_snapshot, + companion, + .. + }| { + CompanionView::new(entity_id, wrap_snapshot, &default_patch, companion) + }, + ), + ); } #[ztracing::instrument(skip_all)] @@ -1621,19 +1649,20 @@ impl BlockMapWriter<'_> { .custom_blocks_by_id .retain(|id, _| !block_ids.contains(id)); let default_patch = Patch::default(); - let (companion_snapshot, companion) = self - .companion - .as_ref() - .map(|companion| { - ( - (companion.snapshot, &default_patch), - (companion.companion, companion.entity), - ) - }) - .unzip(); - - self.block_map - .sync(wrap_snapshot, edits, companion_snapshot, companion); + self.block_map.sync( + wrap_snapshot, + edits, + self.companion.as_deref().map( + |&CompanionView { + entity_id, + wrap_snapshot, + companion, + .. + }| { + CompanionView::new(entity_id, wrap_snapshot, &default_patch, companion) + }, + ), + ); } #[ztracing::instrument(skip_all)] @@ -1715,18 +1744,20 @@ impl BlockMapWriter<'_> { } let default_patch = Patch::default(); - let (companion_snapshot, companion) = self - .companion - .as_ref() - .map(|companion| { - ( - (companion.snapshot, &default_patch), - (companion.companion, companion.entity), - ) - }) - .unzip(); - self.block_map - .sync(&wrap_snapshot, edits, companion_snapshot, companion); + self.block_map.sync( + &wrap_snapshot, + edits, + self.companion.as_deref().map( + |&CompanionView { + entity_id, + wrap_snapshot, + companion, + .. + }| { + CompanionView::new(entity_id, wrap_snapshot, &default_patch, companion) + }, + ), + ); } #[ztracing::instrument(skip_all)] @@ -2531,7 +2562,7 @@ mod tests { cx.update(|cx| WrapMap::new(tab_snapshot, font("Helvetica"), px(14.0), None, cx)); let mut block_map = BlockMap::new(wraps_snapshot.clone(), 1, 1); - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); let block_ids = writer.insert(vec![ BlockProperties { style: BlockStyle::Fixed, @@ -2556,7 +2587,7 @@ mod tests { }, ]); - let snapshot = block_map.read(wraps_snapshot, Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot, Default::default(), None); assert_eq!(snapshot.text(), "aaa\n\n\n\nbbb\nccc\nddd\n\n\n"); let blocks = snapshot @@ -2681,7 +2712,7 @@ mod tests { let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| { wrap_map.sync(tab_snapshot, tab_edits, cx) }); - let snapshot = block_map.read(wraps_snapshot, wrap_edits, None, None); + let snapshot = block_map.read(wraps_snapshot, wrap_edits, None); assert_eq!(snapshot.text(), "aaa\n\nb!!!\n\n\nbb\nccc\nddd\n\n\n"); } @@ -2734,7 +2765,7 @@ mod tests { let (_, wraps_snapshot) = WrapMap::new(tab_snapshot, font, font_size, Some(wrap_width), cx); let block_map = BlockMap::new(wraps_snapshot.clone(), 1, 1); - let snapshot = block_map.read(wraps_snapshot, Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot, Default::default(), None); // Each excerpt has a header above and footer below. Excerpts are also *separated* by a newline. assert_eq!(snapshot.text(), "\nBuff\ner 1\n\nBuff\ner 2\n\nBuff\ner 3"); @@ -2769,7 +2800,7 @@ mod tests { cx.update(|cx| WrapMap::new(tab_snapshot, font("Helvetica"), px(14.0), None, cx)); let mut block_map = BlockMap::new(wraps_snapshot.clone(), 1, 1); - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); let block_ids = writer.insert(vec![ BlockProperties { style: BlockStyle::Fixed, @@ -2795,64 +2826,64 @@ mod tests { ]); { - let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None); assert_eq!(snapshot.text(), "aaa\n\n\n\nbbb\nccc\nddd\n\n\n"); let mut block_map_writer = - block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + block_map.write(wraps_snapshot.clone(), Default::default(), None); let mut new_heights = HashMap::default(); new_heights.insert(block_ids[0], 2); block_map_writer.resize(new_heights); - let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None); assert_eq!(snapshot.text(), "aaa\n\n\n\n\nbbb\nccc\nddd\n\n\n"); } { let mut block_map_writer = - block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + block_map.write(wraps_snapshot.clone(), Default::default(), None); let mut new_heights = HashMap::default(); new_heights.insert(block_ids[0], 1); block_map_writer.resize(new_heights); - let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None); assert_eq!(snapshot.text(), "aaa\n\n\n\nbbb\nccc\nddd\n\n\n"); } { let mut block_map_writer = - block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + block_map.write(wraps_snapshot.clone(), Default::default(), None); let mut new_heights = HashMap::default(); new_heights.insert(block_ids[0], 0); block_map_writer.resize(new_heights); - let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None); assert_eq!(snapshot.text(), "aaa\n\n\nbbb\nccc\nddd\n\n\n"); } { let mut block_map_writer = - block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + block_map.write(wraps_snapshot.clone(), Default::default(), None); let mut new_heights = HashMap::default(); new_heights.insert(block_ids[0], 3); block_map_writer.resize(new_heights); - let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None); assert_eq!(snapshot.text(), "aaa\n\n\n\n\n\nbbb\nccc\nddd\n\n\n"); } { let mut block_map_writer = - block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + block_map.write(wraps_snapshot.clone(), Default::default(), None); let mut new_heights = HashMap::default(); new_heights.insert(block_ids[0], 3); block_map_writer.resize(new_heights); - let snapshot = block_map.read(wraps_snapshot, Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot, Default::default(), None); // Same height as before, should remain the same assert_eq!(snapshot.text(), "aaa\n\n\n\n\n\nbbb\nccc\nddd\n\n\n"); } @@ -2874,7 +2905,7 @@ mod tests { }); let mut block_map = BlockMap::new(wraps_snapshot.clone(), 1, 1); - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); writer.insert(vec![ BlockProperties { style: BlockStyle::Fixed, @@ -2894,7 +2925,7 @@ mod tests { // Blocks with an 'above' disposition go above their corresponding buffer line. // Blocks with a 'below' disposition go below their corresponding buffer line. - let snapshot = block_map.read(wraps_snapshot, Default::default(), None, None); + let snapshot = block_map.read(wraps_snapshot, Default::default(), None); assert_eq!( snapshot.text(), "one two \nthree\n\nfour five \nsix\n\nseven \neight" @@ -2918,7 +2949,7 @@ mod tests { cx.update(|cx| WrapMap::new(tab_snapshot, font("Helvetica"), px(14.0), None, cx)); let mut block_map = BlockMap::new(wraps_snapshot.clone(), 1, 1); - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); let replace_block_id = writer.insert(vec![BlockProperties { style: BlockStyle::Fixed, placement: BlockPlacement::Replace( @@ -2930,7 +2961,7 @@ mod tests { priority: 0, }])[0]; - let blocks_snapshot = block_map.read(wraps_snapshot, Default::default(), None, None); + let blocks_snapshot = block_map.read(wraps_snapshot, Default::default(), None); assert_eq!(blocks_snapshot.text(), "line1\n\n\n\n\nline5"); let buffer_snapshot = buffer.update(cx, |buffer, cx| { @@ -2944,7 +2975,7 @@ mod tests { let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| { wrap_map.sync(tab_snapshot, tab_edits, cx) }); - let blocks_snapshot = block_map.read(wraps_snapshot, wrap_edits, None, None); + let blocks_snapshot = block_map.read(wraps_snapshot, wrap_edits, None); assert_eq!(blocks_snapshot.text(), "line1\n\n\n\n\nline5"); let buffer_snapshot = buffer.update(cx, |buffer, cx| { @@ -2967,11 +2998,11 @@ mod tests { let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| { wrap_map.sync(tab_snapshot, tab_edits, cx) }); - let blocks_snapshot = block_map.read(wraps_snapshot.clone(), wrap_edits, None, None); + let blocks_snapshot = block_map.read(wraps_snapshot.clone(), wrap_edits, None); assert_eq!(blocks_snapshot.text(), "line1\n\n\n\n\nline5"); // Blocks inserted right above the start or right below the end of the replaced region are hidden. - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); writer.insert(vec![ BlockProperties { style: BlockStyle::Fixed, @@ -2995,12 +3026,11 @@ mod tests { priority: 0, }, ]); - let blocks_snapshot = - block_map.read(wraps_snapshot.clone(), Default::default(), None, None); + let blocks_snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None); assert_eq!(blocks_snapshot.text(), "\nline1\n\n\n\n\nline5"); // Ensure blocks inserted *inside* replaced region are hidden. - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); writer.insert(vec![ BlockProperties { style: BlockStyle::Fixed, @@ -3024,14 +3054,13 @@ mod tests { priority: 0, }, ]); - let blocks_snapshot = - block_map.read(wraps_snapshot.clone(), Default::default(), None, None); + let blocks_snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None); assert_eq!(blocks_snapshot.text(), "\nline1\n\n\n\n\nline5"); // Removing the replace block shows all the hidden blocks again. - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); writer.remove(HashSet::from_iter([replace_block_id])); - let blocks_snapshot = block_map.read(wraps_snapshot, Default::default(), None, None); + let blocks_snapshot = block_map.read(wraps_snapshot, Default::default(), None); assert_eq!( blocks_snapshot.text(), "\nline1\n\nline2\n\n\nline 2.1\nline2.2\nline 2.3\nline 2.4\n\nline4\n\nline5" @@ -3084,7 +3113,7 @@ mod tests { let (_, wrap_snapshot) = cx.update(|cx| WrapMap::new(tab_snapshot, font("Helvetica"), px(14.0), None, cx)); let mut block_map = BlockMap::new(wrap_snapshot.clone(), 2, 1); - let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None); assert_eq!( blocks_snapshot.text(), @@ -3114,7 +3143,7 @@ mod tests { ] ); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); let excerpt_blocks_2 = writer.insert(vec![ BlockProperties { style: BlockStyle::Fixed, @@ -3155,7 +3184,7 @@ mod tests { }, ]); - let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None); assert_eq!( blocks_snapshot.text(), "\n\n111\n\n\n\n222\n\n\n333\n\n444\n\n\n\n\n555\n\n666\n" @@ -3189,7 +3218,7 @@ mod tests { ] ); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); buffer.read_with(cx, |buffer, cx| { writer.fold_buffers([buffer_id_1], buffer, cx); }); @@ -3200,7 +3229,7 @@ mod tests { render: Arc::new(|_| div().into_any()), priority: 0, }]); - let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None); let blocks = blocks_snapshot .blocks_in_range(BlockRow(0)..BlockRow(u32::MAX)) .collect::>(); @@ -3257,11 +3286,11 @@ mod tests { ] ); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); buffer.read_with(cx, |buffer, cx| { writer.fold_buffers([buffer_id_2], buffer, cx); }); - let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None); let blocks = blocks_snapshot .blocks_in_range(BlockRow(0)..BlockRow(u32::MAX)) .collect::>(); @@ -3310,11 +3339,11 @@ mod tests { ] ); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); buffer.read_with(cx, |buffer, cx| { writer.unfold_buffers([buffer_id_1], buffer, cx); }); - let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None); let blocks = blocks_snapshot .blocks_in_range(BlockRow(0)..BlockRow(u32::MAX)) .collect::>(); @@ -3366,11 +3395,11 @@ mod tests { ] ); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); buffer.read_with(cx, |buffer, cx| { writer.fold_buffers([buffer_id_3], buffer, cx); }); - let blocks_snapshot = block_map.read(wrap_snapshot, Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot, Patch::default(), None); let blocks = blocks_snapshot .blocks_in_range(BlockRow(0)..BlockRow(u32::MAX)) .collect::>(); @@ -3429,15 +3458,15 @@ mod tests { let (_, wrap_snapshot) = cx.update(|cx| WrapMap::new(tab_snapshot, font("Helvetica"), px(14.0), None, cx)); let mut block_map = BlockMap::new(wrap_snapshot.clone(), 2, 1); - let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None); assert_eq!(blocks_snapshot.text(), "\n\n111"); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); buffer.read_with(cx, |buffer, cx| { writer.fold_buffers([buffer_id], buffer, cx); }); - let blocks_snapshot = block_map.read(wrap_snapshot, Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot, Patch::default(), None); let blocks = blocks_snapshot .blocks_in_range(BlockRow(0)..BlockRow(u32::MAX)) .collect::>(); @@ -3565,7 +3594,7 @@ mod tests { let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| { wrap_map.sync(tab_snapshot, tab_edits, cx) }); - let mut block_map = block_map.write(wraps_snapshot, wrap_edits, None, None); + let mut block_map = block_map.write(wraps_snapshot, wrap_edits, None); let block_ids = block_map.insert(block_properties.iter().map(|props| BlockProperties { placement: props.placement.clone(), @@ -3603,7 +3632,7 @@ mod tests { let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| { wrap_map.sync(tab_snapshot, tab_edits, cx) }); - let mut block_map = block_map.write(wraps_snapshot, wrap_edits, None, None); + let mut block_map = block_map.write(wraps_snapshot, wrap_edits, None); log::info!( "removing {} blocks: {:?}", block_ids_to_remove.len(), @@ -3624,7 +3653,7 @@ mod tests { let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| { wrap_map.sync(tab_snapshot, tab_edits, cx) }); - let mut block_map = block_map.write(wraps_snapshot, wrap_edits, None, None); + let mut block_map = block_map.write(wraps_snapshot, wrap_edits, None); let (unfolded_buffers, folded_buffers) = buffer.read_with(cx, |buffer, _| { let folded_buffers: Vec<_> = block_map.block_map.folded_buffers.iter().cloned().collect(); @@ -3708,7 +3737,7 @@ mod tests { let (wraps_snapshot, wrap_edits) = wrap_map.update(cx, |wrap_map, cx| { wrap_map.sync(tab_snapshot, tab_edits, cx) }); - let blocks_snapshot = block_map.read(wraps_snapshot.clone(), wrap_edits, None, None); + let blocks_snapshot = block_map.read(wraps_snapshot.clone(), wrap_edits, None); assert_eq!( blocks_snapshot.transforms.summary().input_rows, wraps_snapshot.max_point().row() + RowDelta(1) @@ -4097,7 +4126,7 @@ mod tests { cx.update(|cx| WrapMap::new(tab_snapshot, font("Helvetica"), px(14.0), None, cx)); let mut block_map = BlockMap::new(wraps_snapshot.clone(), 1, 1); - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); let _block_id = writer.insert(vec![BlockProperties { style: BlockStyle::Fixed, placement: BlockPlacement::Above(buffer_snapshot.anchor_after(Point::new(1, 0))), @@ -4106,11 +4135,10 @@ mod tests { priority: 0, }])[0]; - let blocks_snapshot = - block_map.read(wraps_snapshot.clone(), Default::default(), None, None); + let blocks_snapshot = block_map.read(wraps_snapshot.clone(), Default::default(), None); assert_eq!(blocks_snapshot.text(), "abc\n\ndef\nghi\njkl\nmno"); - let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None, None); + let mut writer = block_map.write(wraps_snapshot.clone(), Default::default(), None); writer.remove_intersecting_replace_blocks( [buffer_snapshot .anchor_after(Point::new(1, 0)) @@ -4120,7 +4148,7 @@ mod tests { .to_offset(&buffer_snapshot)], false, ); - let blocks_snapshot = block_map.read(wraps_snapshot, Default::default(), None, None); + let blocks_snapshot = block_map.read(wraps_snapshot, Default::default(), None); assert_eq!(blocks_snapshot.text(), "abc\n\ndef\nghi\njkl\nmno"); } @@ -4148,7 +4176,7 @@ mod tests { cx.update(|cx| WrapMap::new(tab_snapshot, font("Helvetica"), px(14.0), None, cx)); let mut block_map = BlockMap::new(wrap_snapshot.clone(), 1, 1); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); writer.insert(vec![BlockProperties { style: BlockStyle::Fixed, placement: BlockPlacement::Near(buffer_snapshot.anchor_after(Point::new(0, 0))), @@ -4157,15 +4185,15 @@ mod tests { priority: 0, }]); - let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None); assert_eq!(blocks_snapshot.text(), "\nline 1\n\nline 2\nline 3"); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); buffer.read_with(cx, |buffer, cx| { writer.fold_buffers([buffer_id], buffer, cx); }); - let blocks_snapshot = block_map.read(wrap_snapshot, Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot, Patch::default(), None); assert_eq!(blocks_snapshot.text(), ""); } @@ -4193,7 +4221,7 @@ mod tests { cx.update(|cx| WrapMap::new(tab_snapshot, font("Helvetica"), px(14.0), None, cx)); let mut block_map = BlockMap::new(wrap_snapshot.clone(), 1, 1); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); writer.insert(vec![BlockProperties { style: BlockStyle::Fixed, placement: BlockPlacement::Near(buffer_snapshot.anchor_after(Point::new(3, 6))), @@ -4202,15 +4230,15 @@ mod tests { priority: 0, }]); - let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot.clone(), Patch::default(), None); assert_eq!(blocks_snapshot.text(), "\nline 1\nline 2\nline 3\nline 4\n"); - let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None, None); + let mut writer = block_map.write(wrap_snapshot.clone(), Patch::default(), None); buffer.read_with(cx, |buffer, cx| { writer.fold_buffers([buffer_id], buffer, cx); }); - let blocks_snapshot = block_map.read(wrap_snapshot, Patch::default(), None, None); + let blocks_snapshot = block_map.read(wrap_snapshot, Patch::default(), None); assert_eq!(blocks_snapshot.text(), ""); } @@ -4299,8 +4327,12 @@ mod tests { rhs_block_map.read( rhs_wrap_snapshot.clone(), rhs_edits.clone(), - Some((&lhs_wrap_snapshot, &lhs_edits)), - Some((companion, rhs_entity_id)), + Some(CompanionView::new( + rhs_entity_id, + &lhs_wrap_snapshot, + &lhs_edits, + companion, + )), ) }); @@ -4309,8 +4341,12 @@ mod tests { lhs_block_map.read( lhs_wrap_snapshot.clone(), lhs_edits.clone(), - Some((&rhs_wrap_snapshot, &rhs_edits)), - Some((companion, lhs_entity_id)), + Some(CompanionView::new( + lhs_entity_id, + &rhs_wrap_snapshot, + &rhs_edits, + companion, + )), ) }); @@ -4400,8 +4436,12 @@ mod tests { rhs_block_map.read( rhs_wrap_snapshot.clone(), rhs_wrap_edits.clone(), - Some((&lhs_wrap_snapshot, &Default::default())), - Some((companion, rhs_entity_id)), + Some(CompanionView::new( + rhs_entity_id, + &lhs_wrap_snapshot, + &Default::default(), + companion, + )), ) }); @@ -4409,8 +4449,12 @@ mod tests { lhs_block_map.read( lhs_wrap_snapshot.clone(), Default::default(), - Some((&rhs_wrap_snapshot, &rhs_wrap_edits)), - Some((companion, lhs_entity_id)), + Some(CompanionView::new( + lhs_entity_id, + &rhs_wrap_snapshot, + &rhs_wrap_edits, + companion, + )), ) });