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
	
	 Cainã Costa
						Cainã Costa