Skip to content

Commit d4f5cab

Browse files
committed
Re-enable format_selections for a single selection range
1 parent dee5b2a commit d4f5cab

File tree

1 file changed

+25
-24
lines changed

1 file changed

+25
-24
lines changed

helix-term/src/commands.rs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

37933794
fn join_selections_inner(cx: &mut Context, select_space: bool) {

0 commit comments

Comments
 (0)