summaryrefslogtreecommitdiff
path: root/support/texlab/crates/texlab/src/features/reference.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/texlab/src/features/reference.rs')
-rw-r--r--support/texlab/crates/texlab/src/features/reference.rs29
1 files changed, 6 insertions, 23 deletions
diff --git a/support/texlab/crates/texlab/src/features/reference.rs b/support/texlab/crates/texlab/src/features/reference.rs
index 380471e6cf..823e794d08 100644
--- a/support/texlab/crates/texlab/src/features/reference.rs
+++ b/support/texlab/crates/texlab/src/features/reference.rs
@@ -1,34 +1,17 @@
-use base_db::{FeatureParams, Workspace};
-use references::{ReferenceKind, ReferenceParams};
+use base_db::Workspace;
-use crate::util::line_index_ext::LineIndexExt;
+use crate::util::{from_proto, to_proto};
pub fn find_all(
workspace: &Workspace,
params: lsp_types::ReferenceParams,
) -> Option<Vec<lsp_types::Location>> {
- let uri_and_pos = params.text_document_position;
- let include_declaration = params.context.include_declaration;
+ let params = from_proto::reference_params(workspace, params)?;
- let document = workspace.lookup(&uri_and_pos.text_document.uri)?;
- let offset = document.line_index.offset_lsp(uri_and_pos.position)?;
-
- let feature = FeatureParams::new(workspace, document);
- let mut results = Vec::new();
- for result in references::find_all(ReferenceParams { feature, offset })
+ let results = references::find_all(&params)
.into_iter()
- .filter(|result| result.kind == ReferenceKind::Reference || include_declaration)
- {
- let document = result.location.document;
- let uri = document.uri.clone();
- if let Some(range) = document
- .line_index
- .line_col_lsp_range(result.location.range)
- {
- let location = lsp_types::Location::new(uri, range);
- results.push(location);
- }
- }
+ .filter_map(to_proto::location)
+ .collect();
Some(results)
}