aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands.rs49
1 files changed, 25 insertions, 24 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 4e3c321c..7e4969c1 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -3748,7 +3748,7 @@ fn format_selections(cx: &mut Context) {
let (view, doc) = current!(cx.editor);
// via lsp if available
- // else via tree-sitter indentation calculations
+ // TODO: else via tree-sitter indentation calculations
let language_server = match doc.language_server() {
Some(language_server) => language_server,
@@ -3761,33 +3761,34 @@ fn format_selections(cx: &mut Context) {
.map(|range| range_to_lsp_range(doc.text(), *range, language_server.offset_encoding()))
.collect();
- // TODO: all of the TODO's and commented code inside the loop,
- // to make this actually work.
- for _range in ranges {
- let _language_server = match doc.language_server() {
- Some(language_server) => language_server,
- None => return,
- };
- // TODO: handle fails
- // TODO: concurrent map
+ if ranges.len() != 1 {
+ cx.editor
+ .set_error("format_selections only supports a single selection for now");
+ return;
+ }
- // TODO: need to block to get the formatting
+ // TODO: handle fails
+ // TODO: concurrent map over all ranges
- // let edits = block_on(language_server.text_document_range_formatting(
- // doc.identifier(),
- // range,
- // lsp::FormattingOptions::default(),
- // ))
- // .unwrap_or_default();
+ let range = ranges[0];
- // let transaction = helix_lsp::util::generate_transaction_from_edits(
- // doc.text(),
- // edits,
- // language_server.offset_encoding(),
- // );
+ let edits = tokio::task::block_in_place(|| {
+ helix_lsp::block_on(language_server.text_document_range_formatting(
+ doc.identifier(),
+ range,
+ lsp::FormattingOptions::default(),
+ None,
+ ))
+ })
+ .unwrap_or_default();
- // apply_transaction(&transaction, doc, view);
- }
+ let transaction = helix_lsp::util::generate_transaction_from_edits(
+ doc.text(),
+ edits,
+ language_server.offset_encoding(),
+ );
+
+ apply_transaction(&transaction, doc, view);
}
fn join_selections_inner(cx: &mut Context, select_space: bool) {