Calculate anchors for new hints

This commit is contained in:
Kirill Bulatov 2023-06-09 09:53:10 +03:00
parent 5fadbf77d4
commit daa2ebb57f
4 changed files with 25 additions and 29 deletions

View file

@ -6,7 +6,8 @@ mod tab_map;
mod wrap_map; mod wrap_map;
use crate::{ use crate::{
Anchor, AnchorRangeExt, InlayHintLocation, MultiBuffer, MultiBufferSnapshot, ToOffset, ToPoint, display_map::inlay_map::InlayProperties, Anchor, AnchorRangeExt, InlayHintLocation,
MultiBuffer, MultiBufferSnapshot, ToOffset, ToPoint,
}; };
pub use block_map::{BlockMap, BlockPoint}; pub use block_map::{BlockMap, BlockPoint};
use collections::{HashMap, HashSet}; use collections::{HashMap, HashSet};
@ -284,37 +285,34 @@ impl DisplayMap {
.update(cx, |map, cx| map.set_wrap_width(width, cx)) .update(cx, |map, cx| map.set_wrap_width(width, cx))
} }
pub fn set_inlay_hints( pub fn splice_inlay_hints(
&mut self, &mut self,
new_hints: &HashMap<InlayHintLocation, Vec<project::InlayHint>>, new_hints: &HashMap<InlayHintLocation, Vec<project::InlayHint>>,
cx: &mut ModelContext<Self>, cx: &mut ModelContext<Self>,
) { ) {
// TODO kb map this to Anchor and set to the map
let multi_buffer = self.buffer.read(cx); let multi_buffer = self.buffer.read(cx);
let multi_snapshot = multi_buffer.snapshot(cx);
// multi_buffer.anchor_in_excerpt(excerpt_id, hint.position); let mut hints_to_add = Vec::new();
// TODO kb !!! rework things from buffer_id to excerpt_id for (&location, hints) in new_hints {
// let hint_anchor = multi_buffer for hint in hints {
// .snapshot(cx) let hint_anchor =
// .anchor_in_excerpt(excerpt_id, hint.position); multi_snapshot.anchor_in_excerpt(location.excerpt_id, hint.position);
hints_to_add.push((
location,
InlayProperties {
position: hint_anchor,
text: hint.text().trim_end().into(),
},
))
}
}
// self.inlay_map.splice( self.inlay_map.splice(
// vec![], // TODO kb this is wrong, calc diffs in the editor instead.
// new_hints self.inlay_map.inlays.keys().copied().collect(),
// .into_iter() hints_to_add,
// .filter_map(|hint| { );
// let snapshot = buffers_to_local_id
// .get(&hint.buffer_id)?
// .read(cx)
// .snapshot();
// Some(Inlay {
// position: hint.position,
// text: hint.text().trim_end().into(),
// })
// })
// .collect(),
// )
todo!("TODO kb")
} }
fn tab_size(buffer: &ModelHandle<MultiBuffer>, cx: &mut ModelContext<Self>) -> NonZeroU32 { fn tab_size(buffer: &ModelHandle<MultiBuffer>, cx: &mut ModelContext<Self>) -> NonZeroU32 {

View file

@ -31,7 +31,7 @@ pub struct InlayId(usize);
pub struct InlayMap { pub struct InlayMap {
snapshot: Mutex<InlaySnapshot>, snapshot: Mutex<InlaySnapshot>,
next_inlay_id: usize, next_inlay_id: usize,
inlays: HashMap<InlayId, (InlayHintLocation, Inlay)>, pub(super) inlays: HashMap<InlayId, (InlayHintLocation, Inlay)>,
} }
#[derive(Clone)] #[derive(Clone)]

View file

@ -2698,12 +2698,11 @@ impl Editor {
} }
} }
// TODO kb wrong, need a splice here instead
if !new_hints.is_empty() { if !new_hints.is_empty() {
editor editor
.update(&mut cx, |editor, cx| { .update(&mut cx, |editor, cx| {
editor.display_map.update(cx, |display_map, cx| { editor.display_map.update(cx, |display_map, cx| {
display_map.set_inlay_hints(&new_hints, cx); display_map.splice_inlay_hints(&new_hints, cx);
}); });
}) })
.log_err() .log_err()

View file

@ -2825,7 +2825,6 @@ impl Project {
language_server language_server
.on_request::<lsp::request::InlayHintRefreshRequest, _, _>({ .on_request::<lsp::request::InlayHintRefreshRequest, _, _>({
let this = this.downgrade();
move |(), mut cx| async move { move |(), mut cx| async move {
let this = this let this = this
.upgrade(&cx) .upgrade(&cx)