summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/reference/label.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/reference/label.rs')
-rw-r--r--support/texlab/src/features/reference/label.rs31
1 files changed, 15 insertions, 16 deletions
diff --git a/support/texlab/src/features/reference/label.rs b/support/texlab/src/features/reference/label.rs
index 3dadada08b..394542320c 100644
--- a/support/texlab/src/features/reference/label.rs
+++ b/support/texlab/src/features/reference/label.rs
@@ -1,33 +1,32 @@
-use std::sync::Arc;
+use lsp_types::ReferenceContext;
-use lsp_types::ReferenceParams;
-
-use crate::features::cursor::CursorContext;
+use crate::util::cursor::CursorContext;
use super::ReferenceResult;
-pub(super) fn find_label_references(
- context: &CursorContext<ReferenceParams>,
+pub(super) fn find_all_references(
+ context: &CursorContext<&ReferenceContext>,
results: &mut Vec<ReferenceResult>,
) -> Option<()> {
+ let db = context.db;
let (name_text, _) = context
.find_label_name_key()
.or_else(|| context.find_label_name_command())?;
- for document in context.request.workspace.documents_by_uri.values() {
- if let Some(data) = document.data.as_latex() {
- for name in data
- .extras
- .label_names
+ for document in context.related() {
+ if let Some(data) = document.parse(db).as_tex() {
+ for label in data
+ .analyze(db)
+ .labels(db)
.iter()
- .filter(|name| name.text == name_text)
- .filter(|name| {
- !name.is_definition || context.request.params.context.include_declaration
+ .filter(|label| label.name(db).text(db) == &name_text)
+ .filter(|label| {
+ label.origin(db).as_definition().is_none() || context.params.include_declaration
})
{
results.push(ReferenceResult {
- uri: Arc::clone(&document.uri),
- range: name.range,
+ document,
+ range: label.range(db),
});
}
}