Calculate anchors for new hints
This commit is contained in:
parent
5fadbf77d4
commit
daa2ebb57f
4 changed files with 25 additions and 29 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue