@@ -7,7 +7,7 @@ mod wrap_map;
use crate::{Anchor, AnchorRangeExt, MultiBuffer, MultiBufferSnapshot, ToOffset, ToPoint};
pub use block_map::{BlockMap, BlockPoint};
use collections::{HashMap, HashSet};
-use fold_map::FoldMap;
+use fold_map::{FoldMap, FoldOffset};
use gpui::{
color::Color,
fonts::{FontId, HighlightStyle},
@@ -238,19 +238,22 @@ impl DisplayMap {
&self,
new_suggestion: Option<Suggestion<T>>,
cx: &mut ModelContext<Self>,
- ) where
+ ) -> Option<Suggestion<FoldOffset>>
+ where
T: ToPoint,
{
let snapshot = self.buffer.read(cx).snapshot(cx);
let edits = self.buffer_subscription.consume().into_inner();
let tab_size = Self::tab_size(&self.buffer, cx);
let (snapshot, edits) = self.fold_map.read(snapshot, edits);
- let (snapshot, edits) = self.suggestion_map.replace(new_suggestion, snapshot, edits);
+ let (snapshot, edits, old_suggestion) =
+ self.suggestion_map.replace(new_suggestion, snapshot, edits);
let (snapshot, edits) = self.tab_map.sync(snapshot, edits, tab_size);
let (snapshot, edits) = self
.wrap_map
.update(cx, |map, cx| map.sync(snapshot, edits, cx));
self.block_map.read(snapshot, edits);
+ old_suggestion
}
pub fn set_font(&self, font_id: FontId, font_size: f32, cx: &mut ModelContext<Self>) -> bool {
@@ -79,7 +79,11 @@ impl SuggestionMap {
new_suggestion: Option<Suggestion<T>>,
fold_snapshot: FoldSnapshot,
fold_edits: Vec<FoldEdit>,
- ) -> (SuggestionSnapshot, Vec<SuggestionEdit>)
+ ) -> (
+ SuggestionSnapshot,
+ Vec<SuggestionEdit>,
+ Option<Suggestion<FoldOffset>>,
+ )
where
T: ToPoint,
{
@@ -99,7 +103,8 @@ impl SuggestionMap {
let mut snapshot = self.0.lock();
let mut patch = Patch::new(edits);
- if let Some(suggestion) = snapshot.suggestion.take() {
+ let old_suggestion = snapshot.suggestion.take();
+ if let Some(suggestion) = &old_suggestion {
patch = patch.compose([SuggestionEdit {
old: SuggestionOffset(suggestion.position.0)
..SuggestionOffset(suggestion.position.0 + suggestion.text.len()),
@@ -119,7 +124,7 @@ impl SuggestionMap {
snapshot.suggestion = new_suggestion;
snapshot.version += 1;
- (snapshot.clone(), patch.into_inner())
+ (snapshot.clone(), patch.into_inner(), old_suggestion)
}
pub fn sync(
@@ -589,7 +594,7 @@ mod tests {
let (suggestion_map, suggestion_snapshot) = SuggestionMap::new(fold_snapshot.clone());
assert_eq!(suggestion_snapshot.text(), "abcdefghi");
- let (suggestion_snapshot, _) = suggestion_map.replace(
+ let (suggestion_snapshot, _, _) = suggestion_map.replace(
Some(Suggestion {
position: 3,
text: "123\n456".into(),
@@ -854,7 +859,9 @@ mod tests {
};
log::info!("replacing suggestion with {:?}", new_suggestion);
- self.replace(new_suggestion, fold_snapshot, Default::default())
+ let (snapshot, edits, _) =
+ self.replace(new_suggestion, fold_snapshot, Default::default());
+ (snapshot, edits)
}
}
}