From fb48854e5a2dede8202fd8e696d9efa2cc19dc42 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 20 Mar 2023 14:00:14 +0100 Subject: [PATCH] Simplify signature of `SuggestionMap::replace` --- .../editor/src/display_map/suggestion_map.rs | 61 +++++++++++-------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/crates/editor/src/display_map/suggestion_map.rs b/crates/editor/src/display_map/suggestion_map.rs index 95eca9f9e97af1291bdb6409f3d3b2f2cd0155ae..6e438234be4ffbeef588db387c5dda6b8af22690 100644 --- a/crates/editor/src/display_map/suggestion_map.rs +++ b/crates/editor/src/display_map/suggestion_map.rs @@ -35,45 +35,56 @@ impl AddAssign for SuggestionOffset { } #[derive(Clone)] -pub struct Suggestion { - offset: FoldOffset, +pub struct Suggestion { + position: T, text: Rope, } pub struct SuggestionMap(Mutex); impl SuggestionMap { - pub fn replace( + pub fn replace( &mut self, - position: P, - text: T, + new_suggestion: Option>, fold_snapshot: FoldSnapshot, fold_edits: Vec, ) -> (SuggestionSnapshot, Vec) where - P: ToPoint, - T: Into, + T: ToPoint, { - let buffer_point = position.to_point(fold_snapshot.buffer_snapshot()); - let fold_point = fold_snapshot.to_fold_point(buffer_point, Bias::Left); - let fold_offset = fold_point.to_offset(&fold_snapshot); - let new_suggestion = Suggestion { - offset: fold_offset, - text: text.into(), - }; + let new_suggestion = new_suggestion.map(|new_suggestion| { + let buffer_point = new_suggestion + .position + .to_point(fold_snapshot.buffer_snapshot()); + let fold_point = fold_snapshot.to_fold_point(buffer_point, Bias::Left); + let fold_offset = fold_point.to_offset(&fold_snapshot); + Suggestion { + position: fold_offset, + text: new_suggestion.text, + } + }); let (_, edits) = self.sync(fold_snapshot, fold_edits); let mut snapshot = self.0.lock(); + let old = if let Some(suggestion) = snapshot.suggestion.take() { - SuggestionOffset(suggestion.offset.0) - ..SuggestionOffset(suggestion.offset.0 + suggestion.text.len()) + SuggestionOffset(suggestion.position.0) + ..SuggestionOffset(suggestion.position.0 + suggestion.text.len()) + } else if let Some(new_suggestion) = new_suggestion.as_ref() { + SuggestionOffset(new_suggestion.position.0)..SuggestionOffset(new_suggestion.position.0) } else { - SuggestionOffset(new_suggestion.offset.0)..SuggestionOffset(new_suggestion.offset.0) + return (snapshot.clone(), edits); }; - let new = SuggestionOffset(new_suggestion.offset.0) - ..SuggestionOffset(new_suggestion.offset.0 + new_suggestion.text.len()); + + let new = if let Some(suggestion) = new_suggestion.as_ref() { + SuggestionOffset(suggestion.position.0) + ..SuggestionOffset(suggestion.position.0 + suggestion.text.len()) + } else { + old.start..old.start + }; + let patch = Patch::new(edits).compose([SuggestionEdit { old, new }]); - snapshot.suggestion = Some(new_suggestion); + snapshot.suggestion = new_suggestion; (snapshot.clone(), patch.into_inner()) } @@ -91,10 +102,10 @@ impl SuggestionMap { let start = fold_edit.new.start; let end = FoldOffset(start.0 + fold_edit.old_len().0); if let Some(suggestion) = snapshot.suggestion.as_mut() { - if end < suggestion.offset { - suggestion.offset.0 += fold_edit.new_len().0; - suggestion.offset.0 -= fold_edit.old_len().0; - } else if start > suggestion.offset { + if end < suggestion.position { + suggestion.position.0 += fold_edit.new_len().0; + suggestion.position.0 -= fold_edit.old_len().0; + } else if start > suggestion.position { suggestion_old_len = suggestion.text.len(); suggestion_new_len = suggestion_old_len; } else { @@ -126,5 +137,5 @@ impl SuggestionMap { #[derive(Clone)] pub struct SuggestionSnapshot { folds_snapshot: FoldSnapshot, - suggestion: Option, + suggestion: Option>, }