Add :fmt (formats the whole file).
This commit is contained in:
parent
4eabb8d054
commit
e4ff75b4d4
2 changed files with 33 additions and 0 deletions
|
@ -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}")]
|
||||
|
|
|
@ -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(|| {
|
||||
|
|
Loading…
Add table
Reference in a new issue