|
|
|
@ -3748,7 +3748,7 @@ fn format_selections(cx: &mut Context) {
|
|
|
|
|
let (view, doc) = current!(cx.editor);
|
|
|
|
|
|
|
|
|
|
// via lsp if available
|
|
|
|
|
// else via tree-sitter indentation calculations
|
|
|
|
|
// TODO: else via tree-sitter indentation calculations
|
|
|
|
|
|
|
|
|
|
let language_server = match doc.language_server() {
|
|
|
|
|
Some(language_server) => language_server,
|
|
|
|
@ -3761,33 +3761,34 @@ fn format_selections(cx: &mut Context) {
|
|
|
|
|
.map(|range| range_to_lsp_range(doc.text(), *range, language_server.offset_encoding()))
|
|
|
|
|
.collect();
|
|
|
|
|
|
|
|
|
|
// TODO: all of the TODO's and commented code inside the loop,
|
|
|
|
|
// to make this actually work.
|
|
|
|
|
for _range in ranges {
|
|
|
|
|
let _language_server = match doc.language_server() {
|
|
|
|
|
Some(language_server) => language_server,
|
|
|
|
|
None => return,
|
|
|
|
|
};
|
|
|
|
|
// TODO: handle fails
|
|
|
|
|
// TODO: concurrent map
|
|
|
|
|
if ranges.len() != 1 {
|
|
|
|
|
cx.editor
|
|
|
|
|
.set_error("format_selections only supports a single selection for now");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO: need to block to get the formatting
|
|
|
|
|
// TODO: handle fails
|
|
|
|
|
// TODO: concurrent map over all ranges
|
|
|
|
|
|
|
|
|
|
// let edits = block_on(language_server.text_document_range_formatting(
|
|
|
|
|
// doc.identifier(),
|
|
|
|
|
// range,
|
|
|
|
|
// lsp::FormattingOptions::default(),
|
|
|
|
|
// ))
|
|
|
|
|
// .unwrap_or_default();
|
|
|
|
|
let range = ranges[0];
|
|
|
|
|
|
|
|
|
|
// let transaction = helix_lsp::util::generate_transaction_from_edits(
|
|
|
|
|
// doc.text(),
|
|
|
|
|
// edits,
|
|
|
|
|
// language_server.offset_encoding(),
|
|
|
|
|
// );
|
|
|
|
|
let edits = tokio::task::block_in_place(|| {
|
|
|
|
|
helix_lsp::block_on(language_server.text_document_range_formatting(
|
|
|
|
|
doc.identifier(),
|
|
|
|
|
range,
|
|
|
|
|
lsp::FormattingOptions::default(),
|
|
|
|
|
None,
|
|
|
|
|
))
|
|
|
|
|
})
|
|
|
|
|
.unwrap_or_default();
|
|
|
|
|
|
|
|
|
|
// apply_transaction(&transaction, doc, view);
|
|
|
|
|
}
|
|
|
|
|
let transaction = helix_lsp::util::generate_transaction_from_edits(
|
|
|
|
|
doc.text(),
|
|
|
|
|
edits,
|
|
|
|
|
language_server.offset_encoding(),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
apply_transaction(&transaction, doc, view);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn join_selections_inner(cx: &mut Context, select_space: bool) {
|
|
|
|
|