Apply hints setings on startup

Kirill Bulatov created

Change summary

crates/editor/src/editor.rs      |  6 +++---
crates/editor/src/inlay_cache.rs | 31 +++++++++----------------------
2 files changed, 12 insertions(+), 25 deletions(-)

Detailed changes

crates/editor/src/editor.rs 🔗

@@ -54,7 +54,7 @@ use gpui::{
 };
 use highlight_matching_bracket::refresh_matching_bracket_highlights;
 use hover_popover::{hide_hover, HoverState};
-use inlay_cache::{InlayCache, InlayRefreshReason, InlaysUpdate, QueryInlaysRange};
+use inlay_cache::{InlayCache, InlayRefreshReason, InlaySplice, QueryInlaysRange};
 pub use items::MAX_TAB_TITLE_LEN;
 use itertools::Itertools;
 pub use language::{char_kind, CharKind};
@@ -2605,7 +2605,7 @@ impl Editor {
 
         match reason {
             InlayRefreshReason::Settings(new_settings) => {
-                let InlaysUpdate {
+                let InlaySplice {
                     to_remove,
                     to_insert,
                 } = self.inlay_cache.apply_settings(new_settings);
@@ -2637,7 +2637,7 @@ impl Editor {
                     .collect::<Vec<_>>();
 
                 cx.spawn(|editor, mut cx| async move {
-                    let InlaysUpdate {
+                    let InlaySplice {
                         to_remove,
                         to_insert,
                     } = editor

crates/editor/src/inlay_cache.rs 🔗

@@ -70,25 +70,10 @@ struct BufferInlays {
 pub struct InlayId(pub usize);
 
 #[derive(Debug, Default)]
-pub struct InlaysUpdate {
+pub struct InlaySplice {
     pub to_remove: Vec<InlayId>,
     pub to_insert: Vec<(InlayId, Anchor, InlayHint)>,
 }
-impl InlaysUpdate {
-    fn merge(&mut self, other: Self) {
-        let mut new_to_remove = other.to_remove.iter().copied().collect::<HashSet<_>>();
-        self.to_insert
-            .retain(|(inlay_id, _, _)| !new_to_remove.remove(&inlay_id));
-        self.to_remove.extend(new_to_remove);
-        self.to_insert
-            .extend(other.to_insert.into_iter().filter(|(inlay_id, _, _)| {
-                !self
-                    .to_remove
-                    .iter()
-                    .any(|removed_inlay_id| removed_inlay_id == inlay_id)
-            }));
-    }
-}
 
 pub struct QueryInlaysRange {
     pub buffer_id: u64,
@@ -112,7 +97,7 @@ impl InlayCache {
         multi_buffer: ModelHandle<MultiBuffer>,
         inlay_fetch_ranges: impl Iterator<Item = QueryInlaysRange>,
         cx: &mut ViewContext<Editor>,
-    ) -> Task<anyhow::Result<InlaysUpdate>> {
+    ) -> Task<anyhow::Result<InlaySplice>> {
         let mut inlay_fetch_tasks = Vec::new();
         for inlay_fetch_range in inlay_fetch_ranges {
             let inlays_up_to_date = self.inlays_up_to_date(
@@ -203,7 +188,7 @@ impl InlayCache {
                 })?;
                 inlays_update
             } else {
-                InlaysUpdate::default()
+                InlaySplice::default()
             };
 
             anyhow::Ok(updates)
@@ -233,7 +218,7 @@ impl InlayCache {
                 HashMap<ExcerptId, Option<(Range<usize>, OrderedByAnchorOffset<InlayHint>)>>,
             ),
         >,
-    ) -> InlaysUpdate {
+    ) -> InlaySplice {
         let mut old_inlays = self.inlays_per_buffer.clone();
         let mut to_remove = Vec::new();
         let mut to_insert = Vec::new();
@@ -377,7 +362,9 @@ impl InlayCache {
             }
         }
 
-        InlaysUpdate {
+        to_insert.retain(|(_, _, new_hint)| self.allowed_hint_kinds.contains(&new_hint.kind));
+
+        InlaySplice {
             to_remove,
             to_insert,
         }
@@ -386,7 +373,7 @@ impl InlayCache {
     pub fn apply_settings(
         &mut self,
         inlay_hint_settings: editor_settings::InlayHints,
-    ) -> InlaysUpdate {
+    ) -> InlaySplice {
         let new_allowed_inlay_hint_types = allowed_inlay_hint_types(inlay_hint_settings);
 
         let new_allowed_hint_kinds = new_allowed_inlay_hint_types
@@ -420,7 +407,7 @@ impl InlayCache {
 
         self.allowed_hint_kinds = new_allowed_hint_kinds;
 
-        InlaysUpdate {
+        InlaySplice {
             to_remove,
             to_insert,
         }