diff options
Diffstat (limited to 'support/texlab/src/features/reference.rs')
-rw-r--r-- | support/texlab/src/features/reference.rs | 34 |
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, } |