blob: 1c09bbc88dfe91d03d5b88c53627f366b28427f3 (
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
33
34
35
36
37
38
39
40
|
use std::sync::Arc;
use lsp_types::GotoDefinitionParams;
use rowan::TextRange;
use crate::features::cursor::CursorContext;
use super::DefinitionResult;
pub(super) fn goto_document_definition(
context: &CursorContext<GotoDefinitionParams>,
) -> Option<Vec<DefinitionResult>> {
let data = context.request.main_document().data.as_latex()?;
for include in data
.extras
.explicit_links
.iter()
.filter(|link| link.stem_range.contains_inclusive(context.offset))
{
for target in &include.targets {
if context
.request
.workspace
.documents_by_uri
.values()
.any(|document| document.uri.as_ref() == target.as_ref())
{
return Some(vec![DefinitionResult {
origin_selection_range: include.stem_range,
target_uri: Arc::clone(target),
target_range: TextRange::default(),
target_selection_range: TextRange::default(),
}]);
}
}
}
None
}
|