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.rs82
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,