Use better names, simplify
This commit is contained in:
parent
73937876b6
commit
5cf51211b6
2 changed files with 58 additions and 69 deletions
|
@ -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),
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue