@@ -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 ) {
0 commit comments