From a2fa3adfe9b7aeaa13b1ccddf6286e48b3fc9141 Mon Sep 17 00:00:00 2001 From: Stefan Ellmauthaler <71695780+ellmau@users.noreply.github.com> Date: Tue, 1 Mar 2022 15:32:57 +0100 Subject: [PATCH] UPD clap, FIX resulting issues (#26) Update clap to version 3.1.3, so - structopt gets obsolete - Errors are differently named, therefore tests needed to be adapted - updated Cargo.lock for the binary Fixed an issue with clippy warnings --- .gitignore | 1 + bin/Cargo.lock | 106 +++++++++++++++++++++++++++++++++++++++-------- bin/Cargo.toml | 3 +- bin/src/main.rs | 44 ++++++++++---------- bin/tests/cli.rs | 2 +- build.rs | 6 +-- src/adf.rs | 2 +- 7 files changed, 116 insertions(+), 48 deletions(-) diff --git a/.gitignore b/.gitignore index 3278015..0e650ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Generated by Cargo # will have compiled files and executables /target/ +/bin/target/ # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html diff --git a/bin/Cargo.lock b/bin/Cargo.lock index 71c6814..17e1531 100644 --- a/bin/Cargo.lock +++ b/bin/Cargo.lock @@ -4,12 +4,12 @@ version = 3 [[package]] name = "adf_bdd" -version = "0.2.0" +version = "0.2.1" dependencies = [ - "adf_bdd 0.2.0 (git+https://github.com/ellmau/adf-obdd?branch=main)", + "adf_bdd 0.2.1 (git+https://github.com/ellmau/adf-obdd?branch=main)", "assert_cmd", "assert_fs", - "clap", + "clap 3.1.3", "env_logger", "log", "predicates", @@ -20,19 +20,16 @@ dependencies = [ [[package]] name = "adf_bdd" -version = "0.2.0" -source = "git+https://github.com/ellmau/adf-obdd?branch=main#565fef99d127ffce7b966740a2b8a9b03ab67934" +version = "0.2.1" +source = "git+https://github.com/ellmau/adf-obdd?branch=main#b18bbe0ed4755f03e5878ecc7ef87ffc7fc71bce" dependencies = [ "biodivine-lib-bdd", - "clap", "derivative", - "env_logger", "lexical-sort", "log", "nom", "serde", "serde_json", - "structopt", ] [[package]] @@ -46,9 +43,9 @@ dependencies = [ [[package]] name = "ansi_term" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi", ] @@ -145,19 +142,49 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "2.33.4" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826bf7bc84f9435630275cb8e802a4a0ec792b615969934bd16d42ffed10f207" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", "bitflags", - "strsim", - "textwrap", + "strsim 0.8.0", + "textwrap 0.11.0", "unicode-width", "vec_map", ] +[[package]] +name = "clap" +version = "3.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f8c0e2a6b902acc18214e24a6935cdaf8a8e34231913d4404dcaee659f65a1" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "indexmap", + "lazy_static", + "os_str_bytes", + "strsim 0.10.0", + "termcolor", + "textwrap 0.14.2", +] + +[[package]] +name = "clap_derive" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d42c94ce7c2252681b5fed4d3627cc807b13dfc033246bd05d5b252399000e" +dependencies = [ + "heck 0.4.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "crossbeam-utils" version = "0.8.7" @@ -278,6 +305,12 @@ dependencies = [ "walkdir", ] +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + [[package]] name = "heck" version = "0.3.3" @@ -287,6 +320,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -320,6 +359,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "indexmap" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "instant" version = "0.1.12" @@ -418,6 +467,15 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +[[package]] +name = "os_str_bytes" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +dependencies = [ + "memchr", +] + [[package]] name = "ppv-lite86" version = "0.2.16" @@ -539,9 +597,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c" dependencies = [ "bitflags", ] @@ -630,13 +688,19 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "structopt" version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" dependencies = [ - "clap", + "clap 2.34.0", "lazy_static", "structopt-derive", ] @@ -647,7 +711,7 @@ version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ - "heck", + "heck 0.3.3", "proc-macro-error", "proc-macro2", "quote", @@ -703,6 +767,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "textwrap" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" + [[package]] name = "thread_local" version = "1.1.4" diff --git a/bin/Cargo.toml b/bin/Cargo.toml index 8e45101..d4e8297 100644 --- a/bin/Cargo.toml +++ b/bin/Cargo.toml @@ -11,8 +11,7 @@ description = "Solver for ADFs grounded, complete, and stable semantics by utili [dependencies] adf_bdd = { git = "https://github.com/ellmau/adf-obdd", branch = "main" } -clap = "2.33.*" -structopt = "0.3.25" +clap = {version = "3.1.3", features = [ "derive", "cargo", "env" ]} log = { version = "0.4", features = [ "max_level_trace", "release_max_level_info" ] } serde = { version = "1.0", features = ["derive","rc"] } serde_json = "1.0" diff --git a/bin/src/main.rs b/bin/src/main.rs index beaa56d..4e57616 100644 --- a/bin/src/main.rs +++ b/bin/src/main.rs @@ -69,60 +69,58 @@ use adf_bdd::adf::Adf; use adf_bdd::adfbiodivine::Adf as BdAdf; use adf_bdd::parser::AdfParser; -use clap::{crate_authors, crate_description, crate_name, crate_version}; +use clap::Parser; -use structopt::StructOpt; - -#[derive(StructOpt, Debug)] -#[structopt(name = crate_name!(), about = crate_description!(), author = crate_authors!(), version = crate_version!())] +#[derive(Parser, Debug)] +#[clap(author, version, about)] struct App { /// Input filename - #[structopt(parse(from_os_str))] + #[clap(parse(from_os_str))] input: PathBuf, /// Sets the verbosity to 'warn', 'info', 'debug' or 'trace' if -v and -q are not use - #[structopt(long = "rust_log", env)] + #[clap(long = "rust_log", env)] rust_log: Option, /// choose the bdd implementation of either 'biodivine', 'naive', or hybrid - #[structopt(long = "lib", default_value = "biodivine")] + #[clap(long = "lib", default_value = "biodivine")] implementation: String, /// Sets log verbosity (multiple times means more verbose) - #[structopt(short, parse(from_occurrences), group = "verbosity")] + #[clap(short, parse(from_occurrences), group = "verbosity")] verbose: u8, /// Sets log verbosity to only errors - #[structopt(short, group = "verbosity")] + #[clap(short, group = "verbosity")] quiet: bool, /// Sorts variables in an lexicographic manner - #[structopt(long = "lx", group = "sorting")] + #[clap(long = "lx", group = "sorting")] sort_lex: bool, /// Sorts variables in an alphanumeric manner - #[structopt(long = "an", group = "sorting")] + #[clap(long = "an", group = "sorting")] sort_alphan: bool, /// Compute the grounded model - #[structopt(long = "grd")] + #[clap(long = "grd")] grounded: bool, /// Compute the stable models - #[structopt(long = "stm")] + #[clap(long = "stm")] stable: bool, /// Compute the stable models with a pre-filter (only hybrid lib-mode) - #[structopt(long = "stmpre")] + #[clap(long = "stmpre")] stable_pre: bool, /// Compute the stable models with a single-formula rewriting (only hybrid lib-mode) - #[structopt(long = "stmrew")] + #[clap(long = "stmrew")] stable_rew: bool, /// Compute the stable models with a single-formula rewriting on internal representation(only hybrid lib-mode) - #[structopt(long = "stmrew2")] + #[clap(long = "stmrew2")] stable_rew2: bool, /// Compute the complete models - #[structopt(long = "com")] + #[clap(long = "com")] complete: bool, /// Import an adf- bdd state instead of an adf - #[structopt(long)] + #[clap(long)] import: bool, /// Export the adf-bdd state after parsing and BDD instantiation to the given filename - #[structopt(long)] + #[clap(long)] export: Option, /// Set if the (counter-)models shall be computed and printed, possible values are 'nai' and 'mem' for naive and memoization repectively (only works in hybrid and naive mode) - #[structopt(long)] + #[clap(long)] counter: Option, } @@ -149,7 +147,7 @@ impl App { } }; env_logger::builder().filter_level(filter_level).init(); - log::info!("Version: {}", crate_version!()); + log::info!("Version: {}", clap::crate_version!()); let input = std::fs::read_to_string(self.input.clone()).expect("Error Reading File"); match self.implementation.as_str() { "hybrid" => { @@ -344,6 +342,6 @@ impl App { } fn main() { - let app = App::from_args(); + let app = App::parse(); app.run(); } diff --git a/bin/tests/cli.rs b/bin/tests/cli.rs index 4fc7452..14a2a88 100644 --- a/bin/tests/cli.rs +++ b/bin/tests/cli.rs @@ -14,7 +14,7 @@ fn arguments() -> Result<(), Box> { cmd = Command::cargo_bin("adf_bdd")?; cmd.arg("-v").arg("--lx").arg("--an").arg("file.txt"); cmd.assert().failure().stderr(predicate::str::contains( - "cannot be used with one or more of the other specified arguments", + "The argument '--lx' cannot be used with '--an'", )); cmd = Command::cargo_bin("adf_bdd")?; diff --git a/build.rs b/build.rs index d408695..33174ea 100644 --- a/build.rs +++ b/build.rs @@ -31,9 +31,9 @@ fn write_test(test_file: &mut File, file: &DirEntry) { let file = file.path().canonicalize().unwrap(); let path = file.display(); let test_name = format!("{}", file.file_name().unwrap().to_string_lossy()) - .replace(".", "_") - .replace("-", "_") - .replace("@", "at") + .replace('.', "_") + .replace('-', "_") + .replace('@', "at") .to_lowercase(); let grounded_name = format!( "{}-grounded.txt", diff --git a/src/adf.rs b/src/adf.rs index e1c0ce5..d1bbd0f 100644 --- a/src/adf.rs +++ b/src/adf.rs @@ -450,7 +450,7 @@ mod test { let serialized = serde_json::to_string(&adf).unwrap(); log::debug!("Serialized to {}", serialized); let result = r#"{"ordering":{"names":["a","c","b","e","d"],"mapping":{"b":2,"a":0,"c":1,"e":3,"d":4}},"bdd":{"nodes":[{"var":18446744073709551614,"lo":0,"hi":0},{"var":18446744073709551615,"lo":1,"hi":1},{"var":0,"lo":0,"hi":1},{"var":1,"lo":0,"hi":1},{"var":2,"lo":0,"hi":1},{"var":3,"lo":0,"hi":1},{"var":4,"lo":0,"hi":1},{"var":0,"lo":1,"hi":0},{"var":0,"lo":1,"hi":4},{"var":1,"lo":1,"hi":0},{"var":2,"lo":1,"hi":0},{"var":1,"lo":10,"hi":4},{"var":0,"lo":3,"hi":11},{"var":3,"lo":1,"hi":0},{"var":4,"lo":1,"hi":0},{"var":3,"lo":6,"hi":14}],"cache":[[{"var":1,"lo":0,"hi":1},3],[{"var":3,"lo":6,"hi":14},15],[{"var":2,"lo":0,"hi":1},4],[{"var":0,"lo":1,"hi":0},7],[{"var":0,"lo":3,"hi":11},12],[{"var":3,"lo":1,"hi":0},13],[{"var":4,"lo":1,"hi":0},14],[{"var":0,"lo":0,"hi":1},2],[{"var":3,"lo":0,"hi":1},5],[{"var":0,"lo":1,"hi":4},8],[{"var":4,"lo":0,"hi":1},6],[{"var":1,"lo":1,"hi":0},9],[{"var":2,"lo":1,"hi":0},10],[{"var":1,"lo":10,"hi":4},11]],"count_cache":{}},"ac":[4,2,7,15,12]}"#; - let mut deserialized: Adf = serde_json::from_str(&result).unwrap(); + let mut deserialized: Adf = serde_json::from_str(result).unwrap(); assert_eq!(adf.ac, deserialized.ac); let grounded_import = deserialized.grounded();