Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-lsp/src/client.rs')
| -rw-r--r-- | helix-lsp/src/client.rs | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs index dc58b420..7003ca6f 100644 --- a/helix-lsp/src/client.rs +++ b/helix-lsp/src/client.rs @@ -393,6 +393,13 @@ impl Client { | ColorProviderCapability::Options(_) ) ), + LanguageServerFeature::CallHierarchy => matches!( + capabilities.call_hierarchy_provider, + Some( + CallHierarchyServerCapability::Simple(true) + | CallHierarchyServerCapability::Options(_) + ) + ), } } @@ -706,6 +713,9 @@ impl Client { dynamic_registration: Some(false), resolve_support: None, }), + call_hierarchy: Some(lsp::DynamicRegistrationClientCapabilities { + dynamic_registration: Some(false), + }), ..Default::default() }), window: Some(lsp::WindowClientCapabilities { @@ -1473,6 +1483,78 @@ impl Client { Some(self.call::<lsp::request::DocumentSymbolRequest>(params)) } + pub fn prepare_call_hierarchy( + &self, + text_document: lsp::TextDocumentIdentifier, + position: lsp::Position, + ) -> Option<impl Future<Output = Result<Option<Vec<lsp::CallHierarchyItem>>>>> { + let capabilities = self.capabilities.get().unwrap(); + + match capabilities.call_hierarchy_provider { + Some( + lsp::CallHierarchyServerCapability::Simple(true) + | lsp::CallHierarchyServerCapability::Options(_), + ) => (), + _ => return None, + } + + let params = lsp::CallHierarchyPrepareParams { + text_document_position_params: lsp::TextDocumentPositionParams { + text_document, + position, + }, + work_done_progress_params: lsp::WorkDoneProgressParams::default(), + }; + + Some(self.call::<lsp::request::CallHierarchyPrepare>(params)) + } + + pub fn call_hierarchy_incoming( + &self, + item: lsp::CallHierarchyItem, + ) -> Option<impl Future<Output = Result<Option<Vec<lsp::CallHierarchyIncomingCall>>>>> { + let capabilities = self.capabilities.get().unwrap(); + + match capabilities.call_hierarchy_provider { + Some( + lsp::CallHierarchyServerCapability::Simple(true) + | lsp::CallHierarchyServerCapability::Options(_), + ) => (), + _ => return None, + } + + let params = lsp::CallHierarchyIncomingCallsParams { + item, + work_done_progress_params: lsp::WorkDoneProgressParams::default(), + partial_result_params: lsp::PartialResultParams::default(), + }; + + Some(self.call::<lsp::request::CallHierarchyIncomingCalls>(params)) + } + + pub fn call_hierarchy_outgoing( + &self, + item: lsp::CallHierarchyItem, + ) -> Option<impl Future<Output = Result<Option<Vec<lsp::CallHierarchyOutgoingCall>>>>> { + let capabilities = self.capabilities.get().unwrap(); + + match capabilities.call_hierarchy_provider { + Some( + lsp::CallHierarchyServerCapability::Simple(true) + | lsp::CallHierarchyServerCapability::Options(_), + ) => (), + _ => return None, + } + + let params = lsp::CallHierarchyOutgoingCallsParams { + item, + work_done_progress_params: lsp::WorkDoneProgressParams::default(), + partial_result_params: lsp::PartialResultParams::default(), + }; + + Some(self.call::<lsp::request::CallHierarchyOutgoingCalls>(params)) + } + pub fn prepare_rename( &self, text_document: lsp::TextDocumentIdentifier, |