summaryrefslogtreecommitdiff
path: root/helix-lsp
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-09-01 05:49:48 +0000
committerBlaž Hrastnik2021-09-06 06:25:46 +0000
commit184637c55acca49380372ca118f13b3390bcb003 (patch)
tree0d726bccb3121f641e41a0df6aa547e22ed79032 /helix-lsp
parentc00cf238afe3dbd43327fd74bd8a9ff2dd9c21db (diff)
lsp: refactor format so we stop cloning the language_server
Diffstat (limited to 'helix-lsp')
-rw-r--r--helix-lsp/src/client.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index ac6ae70a..fdff553f 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -583,19 +583,19 @@ impl Client {
// formatting
- pub async fn text_document_formatting(
+ pub fn text_document_formatting(
&self,
text_document: lsp::TextDocumentIdentifier,
options: lsp::FormattingOptions,
work_done_token: Option<lsp::ProgressToken>,
- ) -> anyhow::Result<Vec<lsp::TextEdit>> {
+ ) -> Option<impl Future<Output = Result<Vec<lsp::TextEdit>>>> {
let capabilities = self.capabilities.get().unwrap();
// check if we're able to format
match capabilities.document_formatting_provider {
Some(lsp::OneOf::Left(true)) | Some(lsp::OneOf::Right(_)) => (),
// None | Some(false)
- _ => return Ok(Vec::new()),
+ _ => return None,
};
// TODO: return err::unavailable so we can fall back to tree sitter formatting
@@ -605,9 +605,13 @@ impl Client {
work_done_progress_params: lsp::WorkDoneProgressParams { work_done_token },
};
- let response = self.request::<lsp::request::Formatting>(params).await?;
+ let request = self.call::<lsp::request::Formatting>(params);
- Ok(response.unwrap_or_default())
+ Some(async move {
+ let json = request.await?;
+ let response: Vec<lsp::TextEdit> = serde_json::from_value(json)?;
+ Ok(response)
+ })
}
pub async fn text_document_range_formatting(