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