@@ -3748,7 +3748,7 @@ fn format_selections(cx: &mut Context) {
37483748 let (view, doc) = current!(cx.editor);
37493749
37503750 // via lsp if available
3751− // else via tree-sitter indentation calculations
3751+ // TODO: else via tree-sitter indentation calculations
37523752
37533753 let language_server = match doc.language_server() {
37543754 Some(language_server) => language_server,
@@ -3761,33 +3761,34 @@ fn format_selections(cx: &mut Context) {
37613761 .map(|range| range_to_lsp_range(doc.text(), *range, language_server.offset_encoding()))
37623762 .collect();
37633763
3764− // TODO: all of the TODO's and commented code inside the loop,
3765− // to make this actually work.
3766− for _range in ranges {
3767− let _language_server = match doc.language_server() {
3768− Some(language_server) => language_server,
3769− None => return,
3770− };
3771− // TODO: handle fails
3772− // TODO: concurrent map
3764+ if ranges.len() != 1 {
3765+ cx.editor
3766+ .set_error("format_selections only supports a single selection for now");
3767+ return;
3768+ }
37733769
3774− // TODO: need to block to get the formatting
3770+ // TODO: handle fails
3771+ // TODO: concurrent map over all ranges
37753772
3776− // let edits = block_on(language_server.text_document_range_formatting(
3777− // doc.identifier(),
3778− // range,
3779− // lsp::FormattingOptions::default(),
3780− // ))
3781− // .unwrap_or_default();
3773+ let range = ranges[0];
37823774
3783− // let transaction = helix_lsp::util::generate_transaction_from_edits(
3784− // doc.text(),
3785− // edits,
3786− // language_server.offset_encoding(),
3787− // );
3775+ let edits = tokio::task::block_in_place(|| {
3776+ helix_lsp::block_on(language_server.text_document_range_formatting(
3777+ doc.identifier(),
3778+ range,
3779+ lsp::FormattingOptions::default(),
3780+ None,
3781+ ))
3782+ })
3783+ .unwrap_or_default();
37883784
3789− // apply_transaction(&transaction, doc, view);
3790− }
3785+ let transaction = helix_lsp::util::generate_transaction_from_edits(
3786+ doc.text(),
3787+ edits,
3788+ language_server.offset_encoding(),
3789+ );
3790+
3791+ apply_transaction(&transaction, doc, view);
37913792}
37923793
37933794fn join_selections_inner(cx: &mut Context, select_space: bool) {