1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
use base_db::{
semantics::tex::LabelKind,
util::{render_label, RenderedObject},
DocumentData,
};
use super::InlayHintBuilder;
pub(super) fn find_hints(builder: &mut InlayHintBuilder) -> Option<()> {
let DocumentData::Tex(data) = &builder.document.data else { return None };
let range = builder.range;
for label in data
.semantics
.labels
.iter()
.filter(|label| label.kind == LabelKind::Definition)
.filter(|label| label.name.range.intersect(range).is_some())
{
let Some(rendered) = render_label(builder.workspace, &builder.project, label) else { continue };
let Some(number) = &rendered.number else { continue };
let text = match &rendered.object {
RenderedObject::Section { prefix, .. } => {
format!("{} {}", prefix, number)
}
RenderedObject::Float { kind, .. } => {
format!("{} {}", kind.as_str(), number)
}
RenderedObject::Theorem { kind, .. } => {
format!("{} {}", kind, number)
}
RenderedObject::Equation => format!("Equation ({})", number),
RenderedObject::EnumItem => format!("Item {}", number),
};
builder.push(label.name.range.end(), text);
}
Some(())
}
|