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 | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs index 79d8adb3..254625a3 100644 --- a/helix-lsp/src/client.rs +++ b/helix-lsp/src/client.rs @@ -400,12 +400,22 @@ impl Client { where R::Params: serde::Serialize, { + self.call_with_ref::<R>(¶ms) + } + + fn call_with_ref<R: lsp::request::Request>( + &self, + params: &R::Params, + ) -> impl Future<Output = Result<Value>> + where + R::Params: serde::Serialize, + { self.call_with_timeout::<R>(params, self.req_timeout) } fn call_with_timeout<R: lsp::request::Request>( &self, - params: R::Params, + params: &R::Params, timeout_secs: u64, ) -> impl Future<Output = Result<Value>> where @@ -414,17 +424,16 @@ impl Client { let server_tx = self.server_tx.clone(); let id = self.next_request_id(); + let params = serde_json::to_value(params); async move { use std::time::Duration; use tokio::time::timeout; - let params = serde_json::to_value(params)?; - let request = jsonrpc::MethodCall { jsonrpc: Some(jsonrpc::Version::V2), id: id.clone(), method: R::METHOD.to_string(), - params: Self::value_into_params(params), + params: Self::value_into_params(params?), }; let (tx, mut rx) = channel::<Result<Value>>(1); @@ -741,7 +750,7 @@ impl Client { new_uri: url_from_path(new_path)?, }]; let request = self.call_with_timeout::<lsp::request::WillRenameFiles>( - lsp::RenameFilesParams { files }, + &lsp::RenameFilesParams { files }, 5, ); @@ -1026,21 +1035,10 @@ impl Client { pub fn resolve_completion_item( &self, - completion_item: lsp::CompletionItem, - ) -> Option<impl Future<Output = Result<lsp::CompletionItem>>> { - let capabilities = self.capabilities.get().unwrap(); - - // Return early if the server does not support resolving completion items. - match capabilities.completion_provider { - Some(lsp::CompletionOptions { - resolve_provider: Some(true), - .. - }) => (), - _ => return None, - } - - let res = self.call::<lsp::request::ResolveCompletionItem>(completion_item); - Some(async move { Ok(serde_json::from_value(res.await?)?) }) + completion_item: &lsp::CompletionItem, + ) -> impl Future<Output = Result<lsp::CompletionItem>> { + let res = self.call_with_ref::<lsp::request::ResolveCompletionItem>(completion_item); + async move { Ok(serde_json::from_value(res.await?)?) } } pub fn resolve_code_action( |