@@ -3748,7 +3748,7 @@ fn format_selections(cx: &mut Context) {
3748
3748
let ( view, doc) = current ! ( cx. editor) ;
3749
3749
3750
3750
// via lsp if available
3751
- // else via tree-sitter indentation calculations
3751
+ // TODO: else via tree-sitter indentation calculations
3752
3752
3753
3753
let language_server = match doc. language_server ( ) {
3754
3754
Some ( language_server) => language_server,
@@ -3761,33 +3761,34 @@ fn format_selections(cx: &mut Context) {
3761
3761
. map ( |range| range_to_lsp_range ( doc. text ( ) , * range, language_server. offset_encoding ( ) ) )
3762
3762
. collect ( ) ;
3763
3763
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
+ }
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,
3779
- // lsp::FormattingOptions::default(),
3780
- // ))
3781
- // .unwrap_or_default();
3773
+ let range = ranges[ 0 ] ;
3782
3774
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 ( ) ;
3788
3784
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) ;
3791
3792
}
3792
3793
3793
3794
fn join_selections_inner ( cx : & mut Context , select_space : bool ) {
0 commit comments