Use better names, simplify

This commit is contained in:
Kirill Bulatov 2023-08-26 21:37:34 +03:00
parent 73937876b6
commit 5cf51211b6
2 changed files with 58 additions and 69 deletions

View file

@ -2792,11 +2792,13 @@ impl Editor {
} }
} }
InlayHintRefreshReason::ExcerptsRemoved(excerpts_removed) => { InlayHintRefreshReason::ExcerptsRemoved(excerpts_removed) => {
let InlaySplice { if let Some(InlaySplice {
to_remove, to_remove,
to_insert, to_insert,
} = self.inlay_hint_cache.remove_excerpts(excerpts_removed); }) = self.inlay_hint_cache.remove_excerpts(excerpts_removed)
self.splice_inlay_hints(to_remove, to_insert, cx); {
self.splice_inlay_hints(to_remove, to_insert, cx);
}
return; return;
} }
InlayHintRefreshReason::NewLinesShown => (InvalidationStrategy::None, None), InlayHintRefreshReason::NewLinesShown => (InvalidationStrategy::None, None),

View file

@ -104,37 +104,34 @@ impl TasksForRanges {
invalidate: InvalidationStrategy, invalidate: InvalidationStrategy,
spawn_task: impl FnOnce(QueryRanges) -> Task<()>, spawn_task: impl FnOnce(QueryRanges) -> Task<()>,
) { ) {
let query_ranges = match invalidate { let query_ranges = if invalidate.should_invalidate() {
InvalidationStrategy::None => { self.tasks.clear();
let mut updated_ranges = query_ranges; self.sorted_ranges.clear();
updated_ranges.before_visible = updated_ranges query_ranges
.before_visible } else {
.into_iter() let mut non_cached_query_ranges = query_ranges;
.flat_map(|query_range| { non_cached_query_ranges.before_visible = non_cached_query_ranges
self.remove_cached_ranges_from_query(buffer_snapshot, query_range) .before_visible
}) .into_iter()
.collect(); .flat_map(|query_range| {
updated_ranges.visible = updated_ranges self.remove_cached_ranges_from_query(buffer_snapshot, query_range)
.visible })
.into_iter() .collect();
.flat_map(|query_range| { non_cached_query_ranges.visible = non_cached_query_ranges
self.remove_cached_ranges_from_query(buffer_snapshot, query_range) .visible
}) .into_iter()
.collect(); .flat_map(|query_range| {
updated_ranges.after_visible = updated_ranges self.remove_cached_ranges_from_query(buffer_snapshot, query_range)
.after_visible })
.into_iter() .collect();
.flat_map(|query_range| { non_cached_query_ranges.after_visible = non_cached_query_ranges
self.remove_cached_ranges_from_query(buffer_snapshot, query_range) .after_visible
}) .into_iter()
.collect(); .flat_map(|query_range| {
updated_ranges self.remove_cached_ranges_from_query(buffer_snapshot, query_range)
} })
InvalidationStrategy::RefreshRequested | InvalidationStrategy::BufferEdited => { .collect();
self.tasks.clear(); non_cached_query_ranges
self.sorted_ranges.clear();
query_ranges
}
}; };
if !query_ranges.is_empty() { if !query_ranges.is_empty() {
@ -205,45 +202,31 @@ impl TasksForRanges {
ranges_to_query ranges_to_query
} }
fn remove_from_cached_ranges( fn invalidate_range(&mut self, buffer: &BufferSnapshot, range: &Range<language::Anchor>) {
&mut self,
buffer: &BufferSnapshot,
range_to_remove: &Range<language::Anchor>,
) {
self.sorted_ranges = self self.sorted_ranges = self
.sorted_ranges .sorted_ranges
.drain(..) .drain(..)
.filter_map(|mut cached_range| { .filter_map(|mut cached_range| {
if cached_range.start.cmp(&range_to_remove.end, buffer).is_gt() if cached_range.start.cmp(&range.end, buffer).is_gt()
|| cached_range.end.cmp(&range_to_remove.start, buffer).is_lt() || cached_range.end.cmp(&range.start, buffer).is_lt()
{ {
Some(vec![cached_range]) Some(vec![cached_range])
} else if cached_range } else if cached_range.start.cmp(&range.start, buffer).is_ge()
.start && cached_range.end.cmp(&range.end, buffer).is_le()
.cmp(&range_to_remove.start, buffer)
.is_ge()
&& cached_range.end.cmp(&range_to_remove.end, buffer).is_le()
{ {
None None
} else if range_to_remove } else if range.start.cmp(&cached_range.start, buffer).is_ge()
.start && range.end.cmp(&cached_range.end, buffer).is_le()
.cmp(&cached_range.start, buffer)
.is_ge()
&& range_to_remove.end.cmp(&cached_range.end, buffer).is_le()
{ {
Some(vec![ Some(vec![
cached_range.start..range_to_remove.start, cached_range.start..range.start,
range_to_remove.end..cached_range.end, range.end..cached_range.end,
]) ])
} else if cached_range } else if cached_range.start.cmp(&range.start, buffer).is_ge() {
.start cached_range.start = range.end;
.cmp(&range_to_remove.start, buffer)
.is_ge()
{
cached_range.start = range_to_remove.end;
Some(vec![cached_range]) Some(vec![cached_range])
} else { } else {
cached_range.end = range_to_remove.start; cached_range.end = range.start;
Some(vec![cached_range]) Some(vec![cached_range])
} }
}) })
@ -474,7 +457,7 @@ impl InlayHintCache {
} }
} }
pub fn remove_excerpts(&mut self, excerpts_removed: Vec<ExcerptId>) -> InlaySplice { pub fn remove_excerpts(&mut self, excerpts_removed: Vec<ExcerptId>) -> Option<InlaySplice> {
let mut to_remove = Vec::new(); let mut to_remove = Vec::new();
for excerpt_to_remove in excerpts_removed { for excerpt_to_remove in excerpts_removed {
self.update_tasks.remove(&excerpt_to_remove); self.update_tasks.remove(&excerpt_to_remove);
@ -483,17 +466,21 @@ impl InlayHintCache {
to_remove.extend(cached_hints.hints.iter().map(|(id, _)| *id)); to_remove.extend(cached_hints.hints.iter().map(|(id, _)| *id));
} }
} }
if !to_remove.is_empty() { if to_remove.is_empty() {
None
} else {
self.version += 1; self.version += 1;
} Some(InlaySplice {
InlaySplice { to_remove,
to_remove, to_insert: Vec::new(),
to_insert: Vec::new(), })
} }
} }
pub fn clear(&mut self) { pub fn clear(&mut self) {
self.version += 1; if !self.update_tasks.is_empty() || !self.hints.is_empty() {
self.version += 1;
}
self.update_tasks.clear(); self.update_tasks.clear();
self.hints.clear(); self.hints.clear();
} }
@ -818,7 +805,7 @@ fn new_update_task(
.update_tasks .update_tasks
.get_mut(&query.excerpt_id) .get_mut(&query.excerpt_id)
{ {
task_ranges.remove_from_cached_ranges(&buffer_snapshot, &range); task_ranges.invalidate_range(&buffer_snapshot, &range);
} }
}) })
.ok() .ok()
@ -901,7 +888,7 @@ async fn fetch_and_update_hints(
.update_tasks .update_tasks
.get_mut(&query.excerpt_id) .get_mut(&query.excerpt_id)
{ {
task_ranges.remove_from_cached_ranges(&buffer_snapshot, &fetch_range); task_ranges.invalidate_range(&buffer_snapshot, &fetch_range);
} }
return None; return None;
} }