Initial implementation of gencomp

i18n
Michal S 2 years ago
parent 719faf7124
commit cb531df84e
No known key found for this signature in database
GPG Key ID: A6A1A4DCB22279B9

43
Cargo.lock generated

@ -8,6 +8,7 @@ version = "3.6.0"
dependencies = [ dependencies = [
"chrono", "chrono",
"clap", "clap",
"clap_complete",
"colored", "colored",
"libc", "libc",
"mimalloc", "mimalloc",
@ -124,6 +125,21 @@ dependencies = [
"textwrap", "textwrap",
] ]
[[package]]
name = "clap_complete"
version = "3.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4179da71abd56c26b54dd0c248cc081c1f43b0a1a7e8448e28e57a29baa993d"
dependencies = [
"clap",
"clap_lex",
"is_executable",
"os_str_bytes",
"pathdiff",
"shlex",
"unicode-xid",
]
[[package]] [[package]]
name = "clap_derive" name = "clap_derive"
version = "3.2.17" version = "3.2.17"
@ -271,6 +287,15 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "is_executable"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa9acdc6d67b75e626ad644734e8bc6df893d9cd2a834129065d3dd6158ea9c8"
dependencies = [
"winapi",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.3" version = "1.0.3"
@ -437,6 +462,12 @@ version = "6.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
[[package]]
name = "pathdiff"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
[[package]] [[package]]
name = "percent-encoding" name = "percent-encoding"
version = "2.1.0" version = "2.1.0"
@ -620,6 +651,12 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "shlex"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
[[package]] [[package]]
name = "smawk" name = "smawk"
version = "0.3.1" version = "0.3.1"
@ -795,6 +832,12 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
[[package]]
name = "unicode-xid"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
[[package]] [[package]]
name = "ureq" name = "ureq"
version = "2.5.0" version = "2.5.0"

@ -23,6 +23,7 @@ codegen-units = 1
[dependencies] [dependencies]
mimalloc = { version = "0.1.29", default-features = false } mimalloc = { version = "0.1.29", default-features = false }
clap = { version = "3.2.8", features = [ "derive", "wrap_help" ] } clap = { version = "3.2.8", features = [ "derive", "wrap_help" ] }
clap_complete = { version = "3.2.4", features = [ "unstable-dynamic" ] }
regex = { version = "1.5.6", default-features = false, features = [ "std", "unicode-perl" ] } regex = { version = "1.5.6", default-features = false, features = [ "std", "unicode-perl" ] }
colored = "2.0.0" colored = "2.0.0"
ureq = { version = "2.4.0", default-features = false, features = [ "native-tls", "json" ] } ureq = { version = "2.4.0", default-features = false, features = [ "native-tls", "json" ] }

@ -1,9 +1,9 @@
#![allow(clippy::module_name_repetitions)] #![allow(clippy::module_name_repetitions)]
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand, ValueHint};
#[derive(Debug, Clone, Parser)] #[derive(Debug, Clone, Parser)]
#[clap(name = "Amethyst", version = env ! ("CARGO_PKG_VERSION"), about = env ! ("CARGO_PKG_DESCRIPTION"), infer_subcommands = true)] #[clap(bin_name = "ame", name = "Amethyst", version = env ! ("CARGO_PKG_VERSION"), about = env ! ("CARGO_PKG_DESCRIPTION"), infer_subcommands = true)]
pub struct Args { pub struct Args {
#[clap(subcommand)] #[clap(subcommand)]
pub subcommand: Option<Operation>, pub subcommand: Option<Operation>,
@ -21,7 +21,7 @@ pub struct Args {
pub sudoloop: bool, pub sudoloop: bool,
/// Sets a custom AUR clone and build directory for the specified operation /// Sets a custom AUR clone and build directory for the specified operation
#[clap(long, short, global = true)] #[clap(long, short, global = true, value_hint = ValueHint::DirPath)]
pub cachedir: Option<String>, pub cachedir: Option<String>,
} }
@ -51,6 +51,10 @@ pub enum Operation {
#[clap(name = "upgrade", visible_aliases = & ["-Syu"])] #[clap(name = "upgrade", visible_aliases = & ["-Syu"])]
Upgrade(UpgradeArgs), Upgrade(UpgradeArgs),
/// Generates shell completions for supported shells (bash, zsh, fish, elvish, pwsh)
#[clap(name = "gencomp", visible_aliases = & ["-g"])]
GenComp(GenCompArgs),
/// Removes all orphaned packages /// Removes all orphaned packages
#[clap(name = "clean", visible_aliases = & ["-Sc"])] #[clap(name = "clean", visible_aliases = & ["-Sc"])]
Clean, Clean,
@ -131,3 +135,10 @@ pub struct UpgradeArgs {
#[clap(long, short)] #[clap(long, short)]
pub aur: bool, pub aur: bool,
} }
#[derive(Default, Debug, Clone, Parser)]
pub struct GenCompArgs {
/// The shell to generate completions for
#[clap(required = true)]
pub shell: String,
}

@ -7,13 +7,16 @@ use internal::commands::ShellCommand;
use internal::error::SilentUnwrap; use internal::error::SilentUnwrap;
use std::fs; use std::fs;
use std::path::Path; use std::path::Path;
use std::str::FromStr;
use crate::args::{ use crate::args::{
InfoArgs, InstallArgs, Operation, QueryArgs, RemoveArgs, SearchArgs, UpgradeArgs, GenCompArgs, InfoArgs, InstallArgs, Operation, QueryArgs, RemoveArgs, SearchArgs, UpgradeArgs,
}; };
use crate::internal::exit_code::AppExitCode; use crate::internal::exit_code::AppExitCode;
use crate::internal::{detect, init, sort, start_sudoloop, structs::Options}; use crate::internal::{detect, init, sort, start_sudoloop, structs::Options};
use clap_complete::{Generator, Shell};
#[global_allocator] #[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
@ -86,6 +89,10 @@ fn main() {
info!("Running pacdiff"); info!("Running pacdiff");
detect(); detect();
} }
Operation::GenComp(gencomp_args) => {
info!("Generating shell completions for {}. Please pipe `stderr` to a file to get completions as a file, e.g. `ame gencomp fish 2> file.fish`", gencomp_args.shell);
cmd_gencomp(&gencomp_args);
}
} }
} }
@ -205,3 +212,14 @@ fn cmd_upgrade(args: UpgradeArgs, options: Options, cachedir: &str) {
info!("Performing system upgrade"); info!("Performing system upgrade");
operations::upgrade(options, args, cachedir); operations::upgrade(options, args, cachedir);
} }
fn cmd_gencomp(args: &GenCompArgs) {
let shell: Shell = Shell::from_str(&args.shell).unwrap_or_else(|e| {
crash!(AppExitCode::Other, "Invalid shell: {}", e);
});
shell.generate(
&<args::Args as clap::CommandFactory>::command(),
&mut std::io::stderr(),
);
}

Loading…
Cancel
Save