on master help sign in
Re-enable format_selections for a single selection range
d4f5cabBlaž Hrastnik
helix-term/src/commands.rs+25−24
@@ -3748,7 +3748,7 @@ fn format_selections(cx: &mut Context) {
3748 let (view, doc) = current!(cx.editor);
3748 let (view, doc) = current!(cx.editor);
3749
3749
3750 // via lsp if available
3750 // via lsp if available
3751− // else via tree-sitter indentation calculations
3751+ // TODO: else via tree-sitter indentation calculations
3752
3752
3753 let language_server = match doc.language_server() {
3753 let language_server = match doc.language_server() {
3754 Some(language_server) => language_server,
3754 Some(language_server) => language_server,
@@ -3761,33 +3761,34 @@ fn format_selections(cx: &mut Context) {
3761 .map(|range| range_to_lsp_range(doc.text(), *range, language_server.offset_encoding()))
3761 .map(|range| range_to_lsp_range(doc.text(), *range, language_server.offset_encoding()))
3762 .collect();
3762 .collect();
3763
3763
3764− // TODO: all of the TODO's and commented code inside the loop,
3764+ if ranges.len() != 1 {
3765− // to make this actually work.
3765+ cx.editor
3766− for _range in ranges {
3766+ .set_error("format_selections only supports a single selection for now");
3767− let _language_server = match doc.language_server() {
3768− Some(language_server) => language_server,
3769− None => return,
3767+ return;
3770− };
3768+ }
3771− // TODO: handle fails
3772− // TODO: concurrent map
3773
3769
3774− // TODO: need to block to get the formatting
3770+ // TODO: handle fails
3771+ // TODO: concurrent map over all ranges
3775
3772
3776− // let edits = block_on(language_server.text_document_range_formatting(
3777− // doc.identifier(),
3778− // range,
3773+ let range = ranges[0];
3779− // lsp::FormattingOptions::default(),
3780− // ))
3781− // .unwrap_or_default();
3782
3774
3783− // let transaction = helix_lsp::util::generate_transaction_from_edits(
3775+ let edits = tokio::task::block_in_place(|| {
3784− // doc.text(),
3776+ helix_lsp::block_on(language_server.text_document_range_formatting(
3785− // edits,
3777+ doc.identifier(),
3786− // language_server.offset_encoding(),
3778+ range,
3787− // );
3779+ lsp::FormattingOptions::default(),
3780+ None,
3781+ ))
3782+ })
3783+ .unwrap_or_default();
3788
3784
3785+ let transaction = helix_lsp::util::generate_transaction_from_edits(
3786+ doc.text(),
3787+ edits,
3788+ language_server.offset_encoding(),
3789+ );
3790+
3789− // apply_transaction(&transaction, doc, view);
3791+ apply_transaction(&transaction, doc, view);
3790− }
3791}
3792}
3792
3793
3793fn join_selections_inner(cx: &mut Context, select_space: bool) {
3794fn join_selections_inner(cx: &mut Context, select_space: bool) {