feat: add a generator for shell completions
This commit is contained in:
parent
eac27eff41
commit
2cecb099d7
|
@ -59,6 +59,7 @@ dependencies = [
|
|||
"anyhow",
|
||||
"built",
|
||||
"clap",
|
||||
"clap_complete",
|
||||
"hex",
|
||||
"ignore",
|
||||
"indoc",
|
||||
|
@ -493,6 +494,15 @@ dependencies = [
|
|||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_complete"
|
||||
version = "4.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5fc443334c81a804575546c5a8a79b4913b50e28d69232903604cada1de817ce"
|
||||
dependencies = [
|
||||
"clap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_derive"
|
||||
version = "4.2.0"
|
||||
|
|
|
@ -31,6 +31,7 @@ aiken-lang = { path = "../aiken-lang", version = "1.0.13-alpha" }
|
|||
aiken-lsp = { path = "../aiken-lsp", version = "1.0.13-alpha" }
|
||||
aiken-project = { path = '../aiken-project', version = "1.0.13-alpha" }
|
||||
uplc = { path = '../uplc', version = "1.0.13-alpha" }
|
||||
clap_complete = "4.3.2"
|
||||
|
||||
[build-dependencies]
|
||||
built = { version = "0.6.0", features = ["git2"] }
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
use clap::{Subcommand, Command};
|
||||
use clap_complete::{Shell, generate};
|
||||
|
||||
use crate::cmd::Cmd as MainCmd;
|
||||
|
||||
/// Generates shell completion scripts
|
||||
#[derive(Subcommand)]
|
||||
pub enum Cmd {
|
||||
Bash,
|
||||
Zsh,
|
||||
Fish
|
||||
}
|
||||
|
||||
pub fn exec(sub_cmd: Cmd) -> miette::Result<()> {
|
||||
let shell = match sub_cmd {
|
||||
Cmd::Bash => Shell::Bash,
|
||||
Cmd::Zsh => Shell::Zsh,
|
||||
Cmd::Fish => Shell::Fish
|
||||
};
|
||||
|
||||
let cli = Command::new("aiken").disable_version_flag(true);
|
||||
|
||||
let mut main = MainCmd::augment_subcommands(cli);
|
||||
|
||||
generate(shell, &mut main, "aiken".to_string(), &mut std::io::stdout());
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -1,6 +1,9 @@
|
|||
use clap::Parser;
|
||||
|
||||
pub mod blueprint;
|
||||
pub mod build;
|
||||
pub mod check;
|
||||
pub mod completion;
|
||||
pub mod docs;
|
||||
pub mod fmt;
|
||||
pub mod lsp;
|
||||
|
@ -8,3 +11,51 @@ pub mod new;
|
|||
pub mod packages;
|
||||
pub mod tx;
|
||||
pub mod uplc;
|
||||
|
||||
use crate::built_info;
|
||||
|
||||
/// Aiken: a smart-contract language and toolchain for Cardano
|
||||
#[derive(Parser)]
|
||||
#[clap(version = version(), about, long_about = None)]
|
||||
#[clap(propagate_version = true)]
|
||||
pub enum Cmd {
|
||||
New(new::Args),
|
||||
Fmt(fmt::Args),
|
||||
Build(build::Args),
|
||||
Address(blueprint::address::Args),
|
||||
Check(check::Args),
|
||||
Docs(docs::Args),
|
||||
Add(packages::add::Args),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Blueprint(blueprint::Cmd),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Packages(packages::Cmd),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Tx(tx::Cmd),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Uplc(uplc::Cmd),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Completion(completion::Cmd),
|
||||
|
||||
#[clap(hide = true)]
|
||||
Lsp(lsp::Args),
|
||||
}
|
||||
|
||||
impl Default for Cmd {
|
||||
fn default() -> Self {
|
||||
Self::parse()
|
||||
}
|
||||
}
|
||||
|
||||
fn version() -> String {
|
||||
format!(
|
||||
"v{} {}",
|
||||
built_info::PKG_VERSION,
|
||||
built_info::GIT_COMMIT_HASH_SHORT.unwrap_or("unknown")
|
||||
)
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ pub struct Args {
|
|||
#[clap(long)]
|
||||
pub version: String,
|
||||
|
||||
#[clap(hide = true)]
|
||||
#[clap(hide = true, long)]
|
||||
pub overwrite: bool,
|
||||
}
|
||||
|
||||
|
|
|
@ -1,50 +1,15 @@
|
|||
use aiken::{
|
||||
built_info,
|
||||
cmd::{
|
||||
Cmd,
|
||||
blueprint::{self, address},
|
||||
build, check, docs, fmt, lsp, new,
|
||||
packages::{self, add},
|
||||
tx, uplc,
|
||||
tx, uplc, completion,
|
||||
},
|
||||
};
|
||||
use clap::Parser;
|
||||
|
||||
use owo_colors::OwoColorize;
|
||||
|
||||
/// Aiken: a smart-contract language and toolchain for Cardano
|
||||
#[derive(Parser)]
|
||||
#[clap(version = version(), about, long_about = None)]
|
||||
#[clap(propagate_version = true)]
|
||||
pub enum Cmd {
|
||||
New(new::Args),
|
||||
Fmt(fmt::Args),
|
||||
Build(build::Args),
|
||||
Address(address::Args),
|
||||
Check(check::Args),
|
||||
Docs(docs::Args),
|
||||
Add(add::Args),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Blueprint(blueprint::Cmd),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Packages(packages::Cmd),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Tx(tx::Cmd),
|
||||
|
||||
#[clap(subcommand)]
|
||||
Uplc(uplc::Cmd),
|
||||
|
||||
#[clap(hide = true)]
|
||||
Lsp(lsp::Args),
|
||||
}
|
||||
|
||||
impl Default for Cmd {
|
||||
fn default() -> Self {
|
||||
Self::parse()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> miette::Result<()> {
|
||||
panic_handler();
|
||||
|
||||
|
@ -61,17 +26,10 @@ fn main() -> miette::Result<()> {
|
|||
Cmd::Lsp(args) => lsp::exec(args),
|
||||
Cmd::Tx(sub_cmd) => tx::exec(sub_cmd),
|
||||
Cmd::Uplc(sub_cmd) => uplc::exec(sub_cmd),
|
||||
Cmd::Completion(sub_cmd) => completion::exec(sub_cmd)
|
||||
}
|
||||
}
|
||||
|
||||
fn version() -> String {
|
||||
format!(
|
||||
"v{} {}",
|
||||
built_info::PKG_VERSION,
|
||||
built_info::GIT_COMMIT_HASH_SHORT.unwrap_or("unknown")
|
||||
)
|
||||
}
|
||||
|
||||
fn panic_handler() {
|
||||
std::panic::set_hook(Box::new(move |info| {
|
||||
let message = info
|
||||
|
|
Loading…
Reference in New Issue