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.rs45
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,
}