Properly binary search cached inlay hints

This commit is contained in:
Kirill Bulatov 2023-08-24 16:50:53 +03:00
parent 3c55c933d4
commit abd2d012b1

View File

@ -714,14 +714,22 @@ fn calculate_hint_updates(
probe.1.position.cmp(&new_hint.position, buffer_snapshot) probe.1.position.cmp(&new_hint.position, buffer_snapshot)
}) { }) {
Ok(ix) => { Ok(ix) => {
let (cached_inlay_id, cached_hint) = &cached_excerpt_hints.hints[ix]; let mut missing_from_cache = true;
for (cached_inlay_id, cached_hint) in &cached_excerpt_hints.hints[ix..] {
if new_hint
.position
.cmp(&cached_hint.position, buffer_snapshot)
.is_gt()
{
break;
}
if cached_hint == &new_hint { if cached_hint == &new_hint {
excerpt_hints_to_persist.insert(*cached_inlay_id, cached_hint.kind); excerpt_hints_to_persist.insert(*cached_inlay_id, cached_hint.kind);
false missing_from_cache = false;
} else {
true
} }
} }
missing_from_cache
}
Err(_) => true, Err(_) => true,
} }
} }
@ -820,11 +828,21 @@ fn apply_hint_update(
.binary_search_by(|probe| probe.1.position.cmp(&new_hint.position, &buffer_snapshot)) .binary_search_by(|probe| probe.1.position.cmp(&new_hint.position, &buffer_snapshot))
{ {
Ok(i) => { Ok(i) => {
if cached_hints[i].1.text() == new_hint.text() { let mut insert_position = Some(i);
None for (_, cached_hint) in &cached_hints[i..] {
} else { if new_hint
Some(i) .position
.cmp(&cached_hint.position, &buffer_snapshot)
.is_gt()
{
break;
} }
if cached_hint.text() == new_hint.text() {
insert_position = None;
break;
}
}
insert_position
} }
Err(i) => Some(i), Err(i) => Some(i),
}; };