summaryrefslogtreecommitdiff
path: root/support/texlab/crates/references/src/label.rs
blob: 5ed8096c5c79034cedd6338eee701467a90d0570 (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
use base_db::{
    semantics::tex,
    util::queries::{self, Object},
};

use crate::{Reference, ReferenceContext, ReferenceKind};

pub(super) fn find_all(context: &mut ReferenceContext) -> Option<()> {
    let data = context.params.document.data.as_tex()?;
    let mode = queries::SearchMode::Full;
    let name = queries::object_at_cursor(&data.semantics.labels, context.params.offset, mode)?
        .object
        .name_text();

    for (document, label) in queries::objects_with_name::<tex::Label>(&context.project, name) {
        let kind = match label.kind {
            tex::LabelKind::Definition => ReferenceKind::Definition,
            tex::LabelKind::Reference | tex::LabelKind::ReferenceRange => ReferenceKind::Reference,
        };

        context.results.push(Reference {
            document,
            range: label.name.range,
            kind,
        });
    }

    Some(())
}