Apply hints setings on startup

This commit is contained in:
Kirill Bulatov 2023-06-14 13:51:23 +03:00
parent c898298c5c
commit b231fa47af
2 changed files with 12 additions and 25 deletions

View file

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

View file

@ -70,25 +70,10 @@ struct BufferInlays {
pub struct InlayId(pub usize); pub struct InlayId(pub usize);
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct InlaysUpdate { pub struct InlaySplice {
pub to_remove: Vec<InlayId>, pub to_remove: Vec<InlayId>,
pub to_insert: Vec<(InlayId, Anchor, InlayHint)>, 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 struct QueryInlaysRange {
pub buffer_id: u64, pub buffer_id: u64,
@ -112,7 +97,7 @@ impl InlayCache {
multi_buffer: ModelHandle<MultiBuffer>, multi_buffer: ModelHandle<MultiBuffer>,
inlay_fetch_ranges: impl Iterator<Item = QueryInlaysRange>, inlay_fetch_ranges: impl Iterator<Item = QueryInlaysRange>,
cx: &mut ViewContext<Editor>, cx: &mut ViewContext<Editor>,
) -> Task<anyhow::Result<InlaysUpdate>> { ) -> Task<anyhow::Result<InlaySplice>> {
let mut inlay_fetch_tasks = Vec::new(); let mut inlay_fetch_tasks = Vec::new();
for inlay_fetch_range in inlay_fetch_ranges { for inlay_fetch_range in inlay_fetch_ranges {
let inlays_up_to_date = self.inlays_up_to_date( let inlays_up_to_date = self.inlays_up_to_date(
@ -203,7 +188,7 @@ impl InlayCache {
})?; })?;
inlays_update inlays_update
} else { } else {
InlaysUpdate::default() InlaySplice::default()
}; };
anyhow::Ok(updates) anyhow::Ok(updates)
@ -233,7 +218,7 @@ impl InlayCache {
HashMap<ExcerptId, Option<(Range<usize>, OrderedByAnchorOffset<InlayHint>)>>, HashMap<ExcerptId, Option<(Range<usize>, OrderedByAnchorOffset<InlayHint>)>>,
), ),
>, >,
) -> InlaysUpdate { ) -> InlaySplice {
let mut old_inlays = self.inlays_per_buffer.clone(); let mut old_inlays = self.inlays_per_buffer.clone();
let mut to_remove = Vec::new(); let mut to_remove = Vec::new();
let mut to_insert = 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_remove,
to_insert, to_insert,
} }
@ -386,7 +373,7 @@ impl InlayCache {
pub fn apply_settings( pub fn apply_settings(
&mut self, &mut self,
inlay_hint_settings: editor_settings::InlayHints, inlay_hint_settings: editor_settings::InlayHints,
) -> InlaysUpdate { ) -> InlaySplice {
let new_allowed_inlay_hint_types = allowed_inlay_hint_types(inlay_hint_settings); let new_allowed_inlay_hint_types = allowed_inlay_hint_types(inlay_hint_settings);
let new_allowed_hint_kinds = new_allowed_inlay_hint_types let new_allowed_hint_kinds = new_allowed_inlay_hint_types
@ -420,7 +407,7 @@ impl InlayCache {
self.allowed_hint_kinds = new_allowed_hint_kinds; self.allowed_hint_kinds = new_allowed_hint_kinds;
InlaysUpdate { InlaySplice {
to_remove, to_remove,
to_insert, to_insert,
} }