From bc0d2481c80393809f68209e26fee47bbeae33a5 Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 19 May 2022 13:56:09 +0200 Subject: [PATCH] Switch from structopt to clap --- Cargo.lock | 125 +++++++++++++++++++++++++++-------------------------- Cargo.toml | 2 +- src/cli.rs | 45 ++++++++++--------- 3 files changed, 86 insertions(+), 86 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a98d22d..47f1e1a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "atty" version = "0.2.14" @@ -100,17 +91,41 @@ dependencies = [ [[package]] name = "clap" -version = "2.34.0" +version = "3.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b" dependencies = [ - "ansi_term", "atty", "bitflags", + "clap_derive", + "clap_lex", + "indexmap", + "lazy_static", "strsim", + "termcolor", "textwrap", - "unicode-width", - "vec_map", +] + +[[package]] +name = "clap_derive" +version = "3.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213" +dependencies = [ + "os_str_bytes", ] [[package]] @@ -242,13 +257,16 @@ dependencies = [ ] [[package]] -name = "heck" -version = "0.3.3" +name = "hashbrown" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "hermit-abi" @@ -259,6 +277,16 @@ dependencies = [ "libc", ] +[[package]] +name = "indexmap" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "instant" version = "0.1.12" @@ -338,6 +366,12 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +[[package]] +name = "os_str_bytes" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d8d0b2f198229de29dca79676f2738ff952edf3fde542eb8bf94d8c21b435" + [[package]] name = "pest" version = "2.1.3" @@ -500,33 +534,9 @@ dependencies = [ [[package]] name = "strsim" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - -[[package]] -name = "structopt" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" -dependencies = [ - "clap", - "lazy_static", - "structopt-derive", -] - -[[package]] -name = "structopt-derive" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" @@ -564,27 +574,24 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.11.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] +checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -607,6 +614,7 @@ name = "today" version = "0.2.0" dependencies = [ "chrono", + "clap", "codespan-reporting", "colored", "computus", @@ -615,7 +623,6 @@ dependencies = [ "pest", "pest_derive", "promptly", - "structopt", "termcolor", "thiserror", "tzfile", @@ -666,12 +673,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version_check" version = "0.9.4" diff --git a/Cargo.toml b/Cargo.toml index a207198..31dd4b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" [dependencies] chrono = "0.4.19" +clap = { version = "3.1.18", features = ["derive"] } codespan-reporting = "0.11.1" colored = "2.0.0" computus = "1.0.0" @@ -13,7 +14,6 @@ edit = "0.1.3" pest = "2.1.3" pest_derive = "2.1.0" promptly = "0.3.0" -structopt = "0.3.26" termcolor = "1.1.3" thiserror = "1.0.30" tzfile = { git = "https://github.com/Garmelon/tzfile.git", branch = "tzdir" } diff --git a/src/cli.rs b/src/cli.rs index 401e3a3..1189420 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -3,9 +3,9 @@ use std::str::FromStr; use std::{process, result}; use chrono::{NaiveDate, NaiveDateTime}; +use clap::Parser; use codespan_reporting::files::SimpleFile; use directories::ProjectDirs; -use structopt::StructOpt; use crate::eval::{self, DateRange, Entry, EntryMode}; use crate::files::cli::{CliDate, CliIdent, CliRange}; @@ -24,77 +24,76 @@ mod print; mod show; mod util; -#[derive(Debug, StructOpt)] +#[derive(Debug, clap::Parser)] pub struct Opt { /// File to load - #[structopt(short, long, parse(from_os_str))] + #[clap(short, long)] file: Option, /// Overwrite the current date - #[structopt(short, long, default_value = "t")] + #[clap(short, long, default_value = "t")] date: String, /// Range of days to focus on - #[structopt(short, long, default_value = "t-2d--t+2w")] + #[clap(short, long, default_value = "t-2d--t+2w")] range: String, - #[structopt(subcommand)] + #[clap(subcommand)] command: Option, } -#[derive(Debug, StructOpt)] +#[derive(Debug, clap::Subcommand)] pub enum Command { /// Shows individual entries in detail - #[structopt(alias = "s")] + #[clap(alias = "s")] Show { /// Entries and days to show - #[structopt(required = true)] + #[clap(required = true)] identifiers: Vec, }, /// Create a new entry based on a template - #[structopt(alias = "n")] + #[clap(alias = "n")] New { - #[structopt(subcommand)] + #[clap(subcommand)] template: Template, }, /// Marks one or more entries as done - #[structopt(alias = "d")] + #[clap(alias = "d")] Done { /// Entries to mark as done - #[structopt(required = true)] + #[clap(required = true)] entries: Vec, }, /// Marks one or more entries as canceled - #[structopt(alias = "c")] + #[clap(alias = "c")] Cancel { /// Entries to mark as done - #[structopt(required = true)] + #[clap(required = true)] entries: Vec, }, /// Edits or creates a log entry - #[structopt(alias = "l")] + #[clap(alias = "l")] Log { - #[structopt(default_value = "t")] + #[clap(default_value = "t")] date: String, }, /// Reformats all loaded files Fmt, } -// TODO Add templates for tasks and notes -#[derive(Debug, StructOpt)] +#[derive(Debug, clap::Subcommand)] pub enum Template { /// Adds a task - #[structopt(alias = "t")] + #[clap(alias = "t")] Task { /// If specified, the task is dated to this date date: Option, }, /// Adds a note - #[structopt(alias = "n")] + #[clap(alias = "n")] Note { /// If specified, the note is dated to this date date: Option, }, /// Adds an undated task marked as done today - #[structopt(alias = "d")] + #[clap(alias = "d")] Done, } @@ -222,7 +221,7 @@ fn run_with_files(opt: Opt, files: &mut Files) -> Result<()> { } pub fn run() { - let opt = Opt::from_args(); + let opt = Opt::parse(); let mut files = Files::new(); if let Err(e) = load_files(&opt, &mut files) {