Add :fmt (formats the whole file).

This commit is contained in:
Blaž Hrastnik 2021-05-12 17:24:55 +09:00
parent 4eabb8d054
commit e4ff75b4d4
2 changed files with 33 additions and 0 deletions

View File

@ -20,6 +20,8 @@ use serde::{Deserialize, Serialize};
use tokio_stream::wrappers::UnboundedReceiverStream;
pub use futures_executor::block_on;
#[derive(Error, Debug)]
pub enum Error {
#[error("protocol error: {0}")]

View File

@ -888,10 +888,34 @@ mod cmd {
}
tokio::spawn(doc.save());
}
fn new_file(editor: &mut Editor, args: &[&str], event: PromptEvent) {
editor.new_file(Action::Replace);
}
fn format(editor: &mut Editor, args: &[&str], event: PromptEvent) {
let (view, doc) = editor.current();
if let Some(language_server) = doc.language_server() {
// TODO: await, no blocking
let transaction = helix_lsp::block_on(
language_server
.text_document_formatting(doc.identifier(), lsp::FormattingOptions::default()),
)
.map(|edits| {
helix_lsp::util::generate_transaction_from_edits(
doc.text(),
edits,
language_server.offset_encoding(),
)
});
if let Ok(transaction) = transaction {
doc.apply(&transaction, view.id);
}
}
}
pub const COMMAND_LIST: &[Command] = &[
Command {
name: "quit",
@ -928,6 +952,13 @@ mod cmd {
fun: new_file,
completer: Some(completers::filename),
},
Command {
name: "format",
alias: Some("fmt"),
doc: "Format the file using a formatter.",
fun: format,
completer: None,
},
];
pub static COMMANDS: Lazy<HashMap<&'static str, &'static Command>> = Lazy::new(|| {