diff options
Diffstat (limited to 'support/texlab/crates/texlab/src/features/definition.rs')
-rw-r--r-- | support/texlab/crates/texlab/src/features/definition.rs | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/support/texlab/crates/texlab/src/features/definition.rs b/support/texlab/crates/texlab/src/features/definition.rs index d450831e1f..ec7f08c296 100644 --- a/support/texlab/crates/texlab/src/features/definition.rs +++ b/support/texlab/crates/texlab/src/features/definition.rs @@ -1,4 +1,4 @@ -use base_db::Workspace; +use base_db::{FeatureParams, Workspace}; use definition::DefinitionParams; use lsp_types::{GotoDefinitionResponse, LocationLink, Position, Url}; @@ -10,35 +10,40 @@ pub fn goto_definition( position: Position, ) -> Option<GotoDefinitionResponse> { let document = workspace.lookup(uri)?; - let offset = document.line_index.offset_lsp(position); - let params = DefinitionParams { - workspace, - document, - offset, - }; + let offset = document.line_index.offset_lsp(position)?; + let feature = FeatureParams::new(workspace, document); + let params = DefinitionParams { feature, offset }; let mut links = Vec::new(); for result in definition::goto_definition(params) { - let origin_selection_range = Some( - document - .line_index - .line_col_lsp_range(result.origin_selection_range), - ); - - let target_line_index = &result.target.line_index; - let target_uri = result.target.uri.clone(); - let target_range = target_line_index.line_col_lsp_range(result.target_range); - - let target_selection_range = - target_line_index.line_col_lsp_range(result.target_selection_range); - - links.push(LocationLink { - origin_selection_range, - target_uri, - target_range, - target_selection_range, - }); + if let Some(link) = convert_link(document, result) { + links.push(link); + } } Some(GotoDefinitionResponse::Link(links)) } + +fn convert_link( + document: &base_db::Document, + result: definition::DefinitionResult<'_>, +) -> Option<LocationLink> { + let origin_selection_range = Some( + document + .line_index + .line_col_lsp_range(result.origin_selection_range)?, + ); + + let target_line_index = &result.target.line_index; + let target_uri = result.target.uri.clone(); + let target_range = target_line_index.line_col_lsp_range(result.target_range)?; + let target_selection_range = + target_line_index.line_col_lsp_range(result.target_selection_range)?; + let value = LocationLink { + origin_selection_range, + target_uri, + target_range, + target_selection_range, + }; + Some(value) +} |