From 2c48d65b1565cf68a3efb5c9e91e9011526f43e7 Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Sun, 30 May 2021 00:00:15 +0900 Subject: Format document on save --- helix-view/src/document.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'helix-view') diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 814777f8..7d912ec0 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -116,6 +116,29 @@ impl Document { Ok(doc) } + // TODO: remove view_id dependency here + pub fn format(&mut self, view_id: ViewId) { + if let Some(language_server) = self.language_server() { + // TODO: await, no blocking + let transaction = helix_lsp::block_on( + language_server + .text_document_formatting(self.identifier(), lsp::FormattingOptions::default()), + ) + .map(|edits| { + helix_lsp::util::generate_transaction_from_edits( + self.text(), + edits, + language_server.offset_encoding(), + ) + }); + + if let Ok(transaction) = transaction { + self.apply(&transaction, view_id); + self.append_changes_to_history(view_id); + } + } + } + // TODO: do we need some way of ensuring two save operations on the same doc can't run at once? // or is that handled by the OS/async layer pub fn save(&mut self) -> impl Future> { -- cgit v1.2.3-70-g09d2