diff options
Diffstat (limited to 'support/texlab/src/features/reference.rs')
-rw-r--r-- | support/texlab/src/features/reference.rs | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/support/texlab/src/features/reference.rs b/support/texlab/src/features/reference.rs index f84a3f67d5..54a5fefb27 100644 --- a/support/texlab/src/features/reference.rs +++ b/support/texlab/src/features/reference.rs @@ -2,40 +2,45 @@ mod entry; mod label; mod string; -use std::sync::Arc; - -use lsp_types::{Location, ReferenceParams, Url}; +use lsp_types::{Location, Position, ReferenceContext, Url}; use rowan::TextRange; -use crate::LineIndexExt; - -use self::{ - entry::find_entry_references, label::find_label_references, string::find_string_references, +use crate::{ + db::Document, + util::{cursor::CursorContext, line_index_ext::LineIndexExt}, + Db, }; -use super::{cursor::CursorContext, FeatureRequest}; - -pub fn find_all_references(request: FeatureRequest<ReferenceParams>) -> Vec<Location> { +pub fn find_all( + db: &dyn Db, + uri: &Url, + position: Position, + params: &ReferenceContext, +) -> Option<Vec<Location>> { let mut results = Vec::new(); - let context = CursorContext::new(request); + let context = CursorContext::new(db, uri, position, params)?; log::debug!("[References] Cursor: {:?}", context.cursor); - find_label_references(&context, &mut results); - find_entry_references(&context, &mut results); - find_string_references(&context, &mut results); + label::find_all_references(&context, &mut results); + entry::find_all_references(&context, &mut results); + string::find_all_references(&context, &mut results); - results + let locations = results .into_iter() .map(|result| Location { - uri: result.uri.as_ref().clone(), - range: context.request.workspace.documents_by_uri[&result.uri] - .line_index + uri: result.document.location(db).uri(db).clone(), + range: result + .document + .contents(db) + .line_index(db) .line_col_lsp_range(result.range), }) - .collect() + .collect(); + + Some(locations) } #[derive(Debug, Clone)] struct ReferenceResult { - uri: Arc<Url>, + document: Document, range: TextRange, } |