From 5998342bb2ea65d1983f65cfdec00053ac3b623d Mon Sep 17 00:00:00 2001 From: Ed Page Date: Wed, 28 Sep 2022 15:53:45 -0500 Subject: [PATCH] refactor: Upgrade to clap v4 --- Cargo.lock | 57 ++++++++++++++++++++++----- Cargo.toml | 6 +-- src/bin/typos-cli/args.rs | 82 +++++++++++++++++++-------------------- 3 files changed, 90 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e63af69..41784f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -157,8 +157,8 @@ checksum = "68d43934757334b5c0519ff882e1ab9647ac0258b47c24c4f490d78e42697fd5" dependencies = [ "atty", "bitflags", - "clap_derive", - "clap_lex", + "clap_derive 3.2.18", + "clap_lex 0.2.4", "indexmap", "once_cell", "strsim 0.10.0", @@ -167,12 +167,27 @@ dependencies = [ ] [[package]] -name = "clap-verbosity-flag" -version = "1.0.1" +name = "clap" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0636f9c040082f8e161555a305f8cec1a1c2828b3d981c812b8c39f4ac00c42c" +checksum = "dd03107d0f87139c1774a15f3db2165b0652b5460c58c27e561f89c20c599eaf" dependencies = [ - "clap 3.2.19", + "atty", + "bitflags", + "clap_derive 4.0.1", + "clap_lex 0.3.0", + "once_cell", + "strsim 0.10.0", + "termcolor", +] + +[[package]] +name = "clap-verbosity-flag" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e2b6c3dcdb73299f48ae05b294da14e2f560b3ed2c09e742269eb1b22af231" +dependencies = [ + "clap 4.0.1", "log", ] @@ -189,6 +204,19 @@ dependencies = [ "syn", ] +[[package]] +name = "clap_derive" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca689d7434ce44517a12a89456b2be4d1ea1cafcd8f581978c03d45f5a5c12a7" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "clap_lex" version = "0.2.4" @@ -198,6 +226,15 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "clap_lex" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" +dependencies = [ + "os_str_bytes", +] + [[package]] name = "codegenrs" version = "2.0.0" @@ -244,11 +281,11 @@ dependencies = [ [[package]] name = "concolor-clap" -version = "0.0.10" +version = "0.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35b55e880d42d4626e6a1aa5b4e63a4df61cf024472a31495ecbbb712402985" +checksum = "95a363283eeb30dc209fca344607b1b40135bfcca5172aa90fb72d912b992bbf" dependencies = [ - "clap 3.2.19", + "clap 4.0.1", "concolor", ] @@ -1491,7 +1528,7 @@ dependencies = [ "assert_fs", "atty", "bstr", - "clap 3.2.19", + "clap 4.0.1", "clap-verbosity-flag", "concolor", "concolor-clap", diff --git a/Cargo.toml b/Cargo.toml index 37d9334..a716614 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,8 +58,8 @@ typos-dict = { version = "^0.9", path = "crates/typos-dict", optional = true } typos-vars = { version = "^0.8", path = "crates/typos-vars", optional = true } unicase = "2.6" anyhow = "1.0" -clap = "3.2" -clap-verbosity-flag = "1.0" +clap = { version = "4.0.0", features = ["derive"] } +clap-verbosity-flag = "2.0" ignore = "0.4" serde = { version = "1.0", features = ["derive"] } toml_edit = { version = "0.14.4", features = ["easy"] } @@ -68,7 +68,7 @@ env_logger = { version = "0.9", default-features = false, features = ["termcolor atty = "0.2.14" yansi = "0.5.1" concolor = { version = "0.0.8" } -concolor-clap = { version = "0.0.10", features = ["api_unstable"] } +concolor-clap = { version = "0.0.11", features = ["api_unstable"] } bstr = "0.2" once_cell = "1.13.1" ahash = "0.8" diff --git a/src/bin/typos-cli/args.rs b/src/bin/typos-cli/args.rs index a180644..5c5a713 100644 --- a/src/bin/typos-cli/args.rs +++ b/src/bin/typos-cli/args.rs @@ -2,7 +2,7 @@ use clap::Parser; use typos_cli::config; -#[derive(Debug, Copy, Clone, PartialEq, Eq, clap::ArgEnum)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, clap::ValueEnum)] pub enum Format { Silent, Brief, @@ -38,100 +38,98 @@ impl Default for Format { } #[derive(Debug, Parser)] -#[clap(rename_all = "kebab-case")] -#[clap(about, author, version)] -#[clap( - setting = clap::AppSettings::DeriveDisplayOrder, - dont_collapse_args_in_usage = true, +#[command(rename_all = "kebab-case")] +#[command(about, author, version)] +#[command( color = concolor_clap::color_choice(), )] -#[clap(group = clap::ArgGroup::new("mode").multiple(false))] +#[command(group = clap::ArgGroup::new("mode").multiple(false))] pub(crate) struct Args { - #[clap(parse(from_os_str), default_value = ".")] + #[arg(default_value = ".")] /// Paths to check with `-` for stdin pub(crate) path: Vec, - #[clap(short = 'c', long = "config", parse(from_os_str))] + #[arg(short = 'c', long = "config")] /// Custom config file pub(crate) custom_config: Option, - #[clap(long)] + #[arg(long)] /// Ignore implicit configuration files. pub(crate) isolated: bool, - #[clap(long, group = "mode")] + #[arg(long, group = "mode")] /// Print a diff of what would change pub(crate) diff: bool, - #[clap(long, short = 'w', group = "mode")] + #[arg(long, short = 'w', group = "mode")] /// Write fixes out pub(crate) write_changes: bool, - #[clap(long, group = "mode")] + #[arg(long, group = "mode")] /// Debug: Print each file that would be spellchecked. pub(crate) files: bool, - #[clap(long, group = "mode")] + #[arg(long, group = "mode")] /// Debug: Print each identifier that would be spellchecked. pub(crate) identifiers: bool, - #[clap(long, group = "mode")] + #[arg(long, group = "mode")] /// Debug: Print each word that would be spellchecked. pub(crate) words: bool, - #[clap(long, parse(from_os_str), group = "mode")] + #[arg(long, group = "mode")] /// Write the current configuration to file with `-` for stdout pub(crate) dump_config: Option, - #[clap(long, group = "mode")] + #[arg(long, group = "mode")] /// Show all supported file types. pub(crate) type_list: bool, - #[clap(long, arg_enum, ignore_case = true, default_value("long"))] + #[arg(long, value_enum, ignore_case = true, default_value("long"))] pub(crate) format: Format, - #[clap(short = 'j', long = "threads", default_value = "0")] + #[arg(short = 'j', long = "threads", default_value = "0")] /// The approximate number of threads to use. pub(crate) threads: usize, - #[clap(flatten)] + #[command(flatten)] pub(crate) config: ConfigArgs, - #[clap(flatten)] + #[command(flatten)] pub(crate) color: concolor_clap::Color, - #[clap(flatten)] + #[command(flatten)] pub(crate) verbose: clap_verbosity_flag::Verbosity, } #[derive(Debug, Clone, clap::Args)] -#[clap(rename_all = "kebab-case")] +#[command(rename_all = "kebab-case")] pub(crate) struct FileArgs { - #[clap(long, overrides_with("no-binary"))] + #[arg(long, overrides_with("no_binary"))] /// Search binary files. binary: bool, - #[clap(long, overrides_with("binary"), hide = true)] + #[arg(long, overrides_with("binary"), hide = true)] no_binary: bool, - #[clap(long, overrides_with("check-filenames"))] + #[arg(long, overrides_with("check_filenames"))] /// Skip verifying spelling in file names. no_check_filenames: bool, - #[clap(long, overrides_with("no-check-filenames"), hide = true)] + #[arg(long, overrides_with("no_check_filenames"), hide = true)] check_filenames: bool, - #[clap(long, overrides_with("check-files"))] + #[arg(long, overrides_with("check_files"))] /// Skip verifying spelling in files. no_check_files: bool, - #[clap(long, overrides_with("no-check-files"), hide = true)] + #[arg(long, overrides_with("no_check_files"), hide = true)] check_files: bool, - #[clap(long, overrides_with("no-unicode"), hide = true)] + #[arg(long, overrides_with("no_unicode"), hide = true)] unicode: bool, - #[clap(long, overrides_with("unicode"))] + #[arg(long, overrides_with("unicode"))] /// Only allow ASCII characters in identifiers no_unicode: bool, - #[clap(long, possible_values(config::Locale::variants()))] + #[arg(long, value_parser = clap::builder::PossibleValuesParser::new(config::Locale::variants()))] pub(crate) locale: Option, } @@ -195,7 +193,7 @@ pub(crate) struct WalkArgs { /// Ignore files & directories matching the glob. exclude: Vec, - #[clap(long, overrides_with("no-hidden"))] + #[clap(long, overrides_with("no_hidden"))] /// Search hidden files and directories. hidden: bool, #[clap(long, overrides_with("hidden"), hide = true)] @@ -204,31 +202,31 @@ pub(crate) struct WalkArgs { #[clap(long, overrides_with("ignore"))] /// Don't respect ignore files. no_ignore: bool, - #[clap(long, overrides_with("no-ignore"), hide = true)] + #[clap(long, overrides_with("no_ignore"), hide = true)] ignore: bool, - #[clap(long, overrides_with("ignore-dot"))] + #[clap(long, overrides_with("ignore_dot"))] /// Don't respect .ignore files. no_ignore_dot: bool, - #[clap(long, overrides_with("no-ignore-dot"), hide = true)] + #[clap(long, overrides_with("no_ignore_dot"), hide = true)] ignore_dot: bool, - #[clap(long, overrides_with("ignore-global"))] + #[clap(long, overrides_with("ignore_global"))] /// Don't respect global ignore files. no_ignore_global: bool, - #[clap(long, overrides_with("no-ignore-global"), hide = true)] + #[clap(long, overrides_with("no_ignore_global"), hide = true)] ignore_global: bool, - #[clap(long, overrides_with("ignore-parent"))] + #[clap(long, overrides_with("ignore_parent"))] /// Don't respect ignore files in parent directories. no_ignore_parent: bool, - #[clap(long, overrides_with("no-ignore-parent"), hide = true)] + #[clap(long, overrides_with("no_ignore_parent"), hide = true)] ignore_parent: bool, - #[clap(long, overrides_with("ignore-vcs"))] + #[clap(long, overrides_with("ignore_vcs"))] /// Don't respect ignore files in vcs directories. no_ignore_vcs: bool, - #[clap(long, overrides_with("no-ignore-vcs"), hide = true)] + #[clap(long, overrides_with("no_ignore_vcs"), hide = true)] ignore_vcs: bool, }