summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/reference.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/reference.rs')
-rw-r--r--support/texlab/src/features/reference.rs34
1 files changed, 27 insertions, 7 deletions
diff --git a/support/texlab/src/features/reference.rs b/support/texlab/src/features/reference.rs
index db48453b4e..f84a3f67d5 100644
--- a/support/texlab/src/features/reference.rs
+++ b/support/texlab/src/features/reference.rs
@@ -2,7 +2,12 @@ mod entry;
mod label;
mod string;
-use lsp_types::{Location, ReferenceParams};
+use std::sync::Arc;
+
+use lsp_types::{Location, ReferenceParams, Url};
+use rowan::TextRange;
+
+use crate::LineIndexExt;
use self::{
entry::find_entry_references, label::find_label_references, string::find_string_references,
@@ -10,12 +15,27 @@ use self::{
use super::{cursor::CursorContext, FeatureRequest};
-pub fn find_all_references(request: FeatureRequest<ReferenceParams>) -> Option<Vec<Location>> {
- let mut references = Vec::new();
+pub fn find_all_references(request: FeatureRequest<ReferenceParams>) -> Vec<Location> {
+ let mut results = Vec::new();
let context = CursorContext::new(request);
log::debug!("[References] Cursor: {:?}", context.cursor);
- find_label_references(&context, &mut references);
- find_entry_references(&context, &mut references);
- find_string_references(&context, &mut references);
- Some(references)
+ find_label_references(&context, &mut results);
+ find_entry_references(&context, &mut results);
+ find_string_references(&context, &mut results);
+
+ results
+ .into_iter()
+ .map(|result| Location {
+ uri: result.uri.as_ref().clone(),
+ range: context.request.workspace.documents_by_uri[&result.uri]
+ .line_index
+ .line_col_lsp_range(result.range),
+ })
+ .collect()
+}
+
+#[derive(Debug, Clone)]
+struct ReferenceResult {
+ uri: Arc<Url>,
+ range: TextRange,
}