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) => {
let InlaySplice {
if let Some(InlaySplice {
to_remove,
to_insert,
} = self.inlay_hint_cache.remove_excerpts(excerpts_removed);
self.splice_inlay_hints(to_remove, to_insert, cx);
}) = self.inlay_hint_cache.remove_excerpts(excerpts_removed)
{
self.splice_inlay_hints(to_remove, to_insert, cx);
}
return;
}
InlayHintRefreshReason::NewLinesShown => (InvalidationStrategy::None, None),

View File

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