blob: 2ae66d5c477e124e84a3a7d2e5e4b2587104504b (
plain)
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
|
use lsp_types::{DocumentHighlight, DocumentHighlightKind};
use crate::{
db::analysis::label,
util::{cursor::CursorContext, line_index_ext::LineIndexExt},
};
pub fn find_highlights(context: &CursorContext) -> Option<Vec<DocumentHighlight>> {
let db = context.db;
let (name_text, _) = context.find_label_name_key()?;
let data = context.document.parse(db).as_tex()?;
let mut highlights = Vec::new();
let line_index = context.document.contents(db).line_index(db);
for label in data
.analyze(db)
.labels(db)
.iter()
.filter(|label| label.name(db).text(db) == &name_text)
{
let range = line_index.line_col_lsp_range(label.range(db));
let kind = Some(match label.origin(db) {
label::Origin::Definition(_) => DocumentHighlightKind::WRITE,
label::Origin::Reference(_) => DocumentHighlightKind::READ,
label::Origin::ReferenceRange(_) => DocumentHighlightKind::READ,
});
highlights.push(DocumentHighlight { range, kind });
}
Some(highlights)
}
|