[INFO] crate clap 2.32.0 is already in cache [INFO] extracting crate clap 2.32.0 into work/ex/clippy-test-run/sources/stable/reg/clap/2.32.0 [INFO] extracting crate clap 2.32.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/clap/2.32.0 [INFO] validating manifest of clap-2.32.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of clap-2.32.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing clap-2.32.0 [INFO] finished frobbing clap-2.32.0 [INFO] frobbed toml for clap-2.32.0 written to work/ex/clippy-test-run/sources/stable/reg/clap/2.32.0/Cargo.toml [INFO] started frobbing clap-2.32.0 [INFO] finished frobbing clap-2.32.0 [INFO] frobbed toml for clap-2.32.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/clap/2.32.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting clap-2.32.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/clap/2.32.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 83c3ea4e4b782850a4fd0c26acc46798437dbfc5f7354f571c9915958b6a9ad7 [INFO] running `"docker" "start" "-a" "83c3ea4e4b782850a4fd0c26acc46798437dbfc5f7354f571c9915958b6a9ad7"` [INFO] [stderr] warning: profile `doc` is deprecated and has no effect [INFO] [stderr] Checking void v1.0.2 [INFO] [stderr] Compiling libc v0.2.48 [INFO] [stderr] Compiling serde v1.0.85 [INFO] [stderr] Compiling memchr v2.1.3 [INFO] [stderr] Checking matches v0.1.8 [INFO] [stderr] Checking cfg-if v0.1.6 [INFO] [stderr] Compiling pulldown-cmark v0.1.2 [INFO] [stderr] Checking unicode-xid v0.0.4 [INFO] [stderr] Checking ucd-util v0.1.3 [INFO] [stderr] Checking lazy_static v1.2.0 [INFO] [stderr] Checking percent-encoding v1.0.1 [INFO] [stderr] Compiling regex v1.1.0 [INFO] [stderr] Checking bitflags v0.9.1 [INFO] [stderr] Checking quote v0.3.15 [INFO] [stderr] Checking either v1.5.0 [INFO] [stderr] Checking semver-parser v0.7.0 [INFO] [stderr] Checking unicode-width v0.1.5 [INFO] [stderr] Checking utf8-ranges v1.0.2 [INFO] [stderr] Checking bitflags v1.0.4 [INFO] [stderr] Checking ansi_term v0.11.0 [INFO] [stderr] Checking strsim v0.7.0 [INFO] [stderr] Checking vec_map v0.8.1 [INFO] [stderr] Checking unreachable v1.0.0 [INFO] [stderr] Checking synom v0.11.3 [INFO] [stderr] Checking thread_local v0.3.6 [INFO] [stderr] Checking unicode-bidi v0.3.4 [INFO] [stderr] Checking regex-syntax v0.6.5 [INFO] [stderr] Checking textwrap v0.10.0 [INFO] [stderr] Checking itertools v0.7.11 [INFO] [stderr] Checking smallvec v0.6.8 [INFO] [stderr] Checking syn v0.11.11 [INFO] [stderr] Checking unicode-normalization v0.1.8 [INFO] [stderr] Checking atty v0.2.11 [INFO] [stderr] Checking clap v2.32.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:117:13 [INFO] [stderr] | [INFO] [stderr] 117 | next_line_help: next_line_help, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `next_line_help` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:118:13 [INFO] [stderr] | [INFO] [stderr] 118 | hide_pv: hide_pv, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `hide_pv` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:133:13 [INFO] [stderr] | [INFO] [stderr] 133 | color: color, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `color` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:134:13 [INFO] [stderr] | [INFO] [stderr] 134 | cizer: cizer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `cizer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:137:13 [INFO] [stderr] | [INFO] [stderr] 137 | use_long: use_long, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `use_long` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/app/help.rs:493:13 [INFO] [stderr] | [INFO] [stderr] 493 | write!(self.writer, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/app/help.rs:504:13 [INFO] [stderr] | [INFO] [stderr] 504 | write!(self.writer, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/args/arg_builder/base.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/usage_parser.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | usage: usage, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `usage` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/errors.rs:889:13 [INFO] [stderr] | [INFO] [stderr] 889 | kind: kind, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/bash.rs:17:59 [INFO] [stderr] | [INFO] [stderr] 17 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { BashGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/fish.rs:15:59 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { FishGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/zsh.rs:23:18 [INFO] [stderr] | [INFO] [stderr] 23 | ZshGen { p: p } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/powershell.rs:16:65 [INFO] [stderr] | [INFO] [stderr] 16 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { PowerShellGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/elvish.rs:16:61 [INFO] [stderr] | [INFO] [stderr] 16 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { ElvishGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/mod.rs:30:60 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { ComplGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] Checking aho-corasick v0.6.9 [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/app/parser.rs:971:24 [INFO] [stderr] | [INFO] [stderr] 971 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 972 | | if let ParseResult::Opt(name) = needs_val_of { [INFO] [stderr] 973 | | // Check to see if parsing a value from a previous arg [INFO] [stderr] 974 | | let arg = self.opts [INFO] [stderr] ... | [INFO] [stderr] 982 | | } [INFO] [stderr] 983 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 971 | } else if let ParseResult::Opt(name) = needs_val_of { [INFO] [stderr] 972 | // Check to see if parsing a value from a previous arg [INFO] [stderr] 973 | let arg = self.opts [INFO] [stderr] 974 | .iter() [INFO] [stderr] 975 | .find(|o| o.b.name == name) [INFO] [stderr] 976 | .expect(INTERNAL_ERROR_MSG); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/app/help.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | const TAB: &'static str = " "; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: lint name `too_many_arguments` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/app/help.rs:103:48 [INFO] [stderr] | [INFO] [stderr] 103 | #[cfg_attr(feature = "cargo-clippy", allow(too_many_arguments))] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change it to: `clippy::too_many_arguments` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(renamed_and_removed_lints)] on by default [INFO] [stderr] [INFO] [stderr] warning: lint name `useless_let_if_seq` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/app/help.rs:592:48 [INFO] [stderr] | [INFO] [stderr] 592 | #[cfg_attr(feature = "cargo-clippy", allow(useless_let_if_seq))] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change it to: `clippy::useless_let_if_seq` [INFO] [stderr] [INFO] [stderr] warning: Creating a reference that is immediately dereferenced. [INFO] [stderr] --> src/app/mod.rs:1637:41 [INFO] [stderr] | [INFO] [stderr] 1637 | let global_arg_vec: Vec<&str> = (&self).p.global_args.iter().map(|ga| ga.b.name).collect(); [INFO] [stderr] | ^^^^^^^ help: try this: `self.p` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ref_in_deref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ref_in_deref [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:569:28 [INFO] [stderr] | [INFO] [stderr] 569 | const INTERNAL_ERROR_MSG: &'static str = "Fatal internal error. Please consider filing a bug \ [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:571:22 [INFO] [stderr] | [INFO] [stderr] 571 | const INVALID_UTF8: &'static str = "unexpected invalid UTF-8 code point"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: lint name `too_many_arguments` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/app/help.rs:103:48 [INFO] [stderr] | [INFO] [stderr] 103 | #[cfg_attr(feature = "cargo-clippy", allow(too_many_arguments))] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change it to: `clippy::too_many_arguments` [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/app/parser.rs:534:46 [INFO] [stderr] | [INFO] [stderr] 534 | if self.positionals.values().any(|a| { [INFO] [stderr] | ______________________________________________^ [INFO] [stderr] 535 | | a.b.is_set(ArgSettings::Multiple) && (a.index as usize != self.positionals.len()) [INFO] [stderr] 536 | | }) { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/app/parser.rs:782:19 [INFO] [stderr] | [INFO] [stderr] 782 | fn is_new_arg(&mut self, arg_os: &OsStr, needs_val_of: ParseResult) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/app/parser.rs:829:13 [INFO] [stderr] | [INFO] [stderr] 829 | !(arg_os.len() == 1) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `arg_os.len() != 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/app/parser.rs:986:16 [INFO] [stderr] | [INFO] [stderr] 986 | if !(self.is_set(AS::ArgsNegateSubcommands) && self.is_set(AS::ValidArgFound)) [INFO] [stderr] | ________________^ [INFO] [stderr] 987 | | && !self.is_set(AS::InferSubcommands) && !self.is_set(AS::AllowExternalSubcommands) [INFO] [stderr] | |___________________________________________________________________________________________________^ help: try: `!(self.is_set(AS::ArgsNegateSubcommands) && self.is_set(AS::ValidArgFound) || self.is_set(AS::AllowExternalSubcommands) || self.is_set(AS::InferSubcommands))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 30 [INFO] [stderr] --> src/app/parser.rs:843:5 [INFO] [stderr] | [INFO] [stderr] 843 | / pub fn get_matches_with( [INFO] [stderr] 844 | | &mut self, [INFO] [stderr] 845 | | matcher: &mut ArgMatcher<'a>, [INFO] [stderr] 846 | | it: &mut Peekable, [INFO] [stderr] ... | [INFO] [stderr] 1199 | | Validator::new(self).validate(needs_val_of, subcmd_name, matcher) [INFO] [stderr] 1200 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/app/parser.rs:855:46 [INFO] [stderr] | [INFO] [stderr] 855 | if self.positionals.values().any(|a| { [INFO] [stderr] | ______________________________________________^ [INFO] [stderr] 856 | | a.b.is_set(ArgSettings::Multiple) && (a.index as usize != self.positionals.len()) [INFO] [stderr] 857 | | }) [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1078:42 [INFO] [stderr] | [INFO] [stderr] 1078 | .and_then(|vec| Some(matcher.inc_occurrences_of(&*vec))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1078 | .and_then(|vec| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/app/parser.rs:1410:9 [INFO] [stderr] | [INFO] [stderr] 1410 | args.iter().map(|s| *s).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `args.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/app/parser.rs:1671:30 [INFO] [stderr] | [INFO] [stderr] 1671 | let val = if p[1].as_bytes().len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!p[1].as_bytes().is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/app/parser.rs:1735:32 [INFO] [stderr] | [INFO] [stderr] 1735 | if !empty_vals && (v.len() == 0 || (needs_eq && !has_eq)) { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1764:34 [INFO] [stderr] | [INFO] [stderr] 1764 | .and_then(|vec| Some(matcher.inc_occurrences_of(&*vec))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1764 | .and_then(|vec| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1870:34 [INFO] [stderr] | [INFO] [stderr] 1870 | .and_then(|vec| Some(matcher.inc_occurrences_of(&*vec))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1870 | .and_then(|vec| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1883:43 [INFO] [stderr] | [INFO] [stderr] 1883 | .and_then(|grps| Some(matcher.inc_occurrences_of(&*grps))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1883 | .and_then(|grps| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1887:43 [INFO] [stderr] | [INFO] [stderr] 1887 | .and_then(|grps| Some(matcher.inc_occurrences_of(&*grps))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1887 | .and_then(|grps| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 29 [INFO] [stderr] --> src/app/parser.rs:1947:5 [INFO] [stderr] | [INFO] [stderr] 1947 | / pub fn add_defaults(&mut self, matcher: &mut ArgMatcher<'a>) -> ClapResult<()> { [INFO] [stderr] 1948 | | debugln!("Parser::add_defaults;"); [INFO] [stderr] 1949 | | macro_rules! add_val { [INFO] [stderr] 1950 | | (@default $_self:ident, $a:ident, $m:ident) => { [INFO] [stderr] ... | [INFO] [stderr] 2019 | | Ok(()) [INFO] [stderr] 2020 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/app/help.rs:326:5 [INFO] [stderr] | [INFO] [stderr] 326 | / fn val<'b, 'c>(&mut self, arg: &ArgWithDisplay<'b, 'c>) -> Result { [INFO] [stderr] 327 | | debugln!("Help::val: arg={}", arg); [INFO] [stderr] 328 | | if arg.takes_value() { [INFO] [stderr] 329 | | let delim = if arg.is_set(ArgSettings::RequireDelimiter) { [INFO] [stderr] ... | [INFO] [stderr] 418 | | Ok(spec_vals) [INFO] [stderr] 419 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/app/validator.rs:74:12 [INFO] [stderr] | [INFO] [stderr] 74 | if !(self.0.is_set(AS::SubcommandsNegateReqs) && subcmd_name.is_some()) && !reqs_validated { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(self.0.is_set(AS::SubcommandsNegateReqs) && subcmd_name.is_some() || reqs_validated)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: use of `or` followed by a function call [INFO] [stderr] --> src/app/validator.rs:161:25 [INFO] [stderr] | [INFO] [stderr] 161 | c_with = c_with.or( [INFO] [stderr] | _________________________^ [INFO] [stderr] 162 | | self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | | .map_or(None, [INFO] [stderr] 164 | | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 165 | | .map_or(None, |an| self.0.find_any_arg(an)) [INFO] [stderr] 166 | | .map_or(None, |aa| Some(format!("{}", aa))) [INFO] [stderr] 167 | | ); [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 161 | c_with = c_with.or_else(|| self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 162 | .map_or(None, [INFO] [stderr] 163 | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 164 | .map_or(None, |an| self.0.find_any_arg(an)) [INFO] [stderr] 165 | .map_or(None, |aa| Some(format!("{}", aa)))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/app/validator.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | / self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | | .map_or(None, [INFO] [stderr] 164 | | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 165 | | .map_or(None, |an| self.0.find_any_arg(an)) [INFO] [stderr] 166 | | .map_or(None, |aa| Some(format!("{}", aa))) [INFO] [stderr] | |_______________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_or_none)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] help: try using and_then instead [INFO] [stderr] | [INFO] [stderr] 162 | self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | .map_or(None, [INFO] [stderr] 164 | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 165 | .map_or(None, |an| self.0.find_any_arg(an)).and_then(|aa| Some(format!("{}", aa))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/app/validator.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | / self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | | .map_or(None, [INFO] [stderr] 164 | | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 165 | | .map_or(None, |an| self.0.find_any_arg(an)) [INFO] [stderr] | |_______________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] help: try using and_then instead [INFO] [stderr] | [INFO] [stderr] 162 | self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | .map_or(None, [INFO] [stderr] 164 | |bl| bl.iter().find(|arg| matcher.contains(arg))).and_then(|an| self.0.find_any_arg(an)) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/app/validator.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | / self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | | .map_or(None, [INFO] [stderr] 164 | | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] | |_____________________________________________________________________^ help: try using and_then instead: `self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()).and_then(|bl| bl.iter().find(|arg| matcher.contains(arg)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] [INFO] [stderr] warning: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/app/validator.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try using and_then instead: `self.0.find_any_arg(name).and_then(|aa| aa.blacklist())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/app/usage.rs:27:28 [INFO] [stderr] | [INFO] [stderr] 27 | let mut args: Vec<_> = matcher [INFO] [stderr] | ____________________________^ [INFO] [stderr] 28 | | .arg_names() [INFO] [stderr] 29 | | .iter() [INFO] [stderr] 30 | | .filter(|n| { [INFO] [stderr] ... | [INFO] [stderr] 38 | | }) [INFO] [stderr] 39 | | .map(|&n| n) [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 27 | let mut args: Vec<_> = matcher [INFO] [stderr] 28 | .arg_names() [INFO] [stderr] 29 | .iter() [INFO] [stderr] 30 | .filter(|n| { [INFO] [stderr] 31 | if let Some(o) = find_by_name!(p, **n, opts, iter) { [INFO] [stderr] 32 | !o.b.is_set(ArgSettings::Required) && !o.b.is_set(ArgSettings::Hidden) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/app/usage.rs:84:67 [INFO] [stderr] | [INFO] [stderr] 84 | if !p.is_set(AS::UnifiedHelpMessage) && p.opts.iter().any(|o| { [INFO] [stderr] | ___________________________________________________________________^ [INFO] [stderr] 85 | | !o.is_set(ArgSettings::Required) && !o.is_set(ArgSettings::Hidden) [INFO] [stderr] 86 | | }) { [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 35 [INFO] [stderr] --> src/app/usage.rs:318:1 [INFO] [stderr] | [INFO] [stderr] 318 | / pub fn get_required_usage_from<'a, 'b>( [INFO] [stderr] 319 | | p: &Parser<'a, 'b>, [INFO] [stderr] 320 | | reqs: &[&'a str], [INFO] [stderr] 321 | | matcher: Option<&ArgMatcher<'a>>, [INFO] [stderr] ... | [INFO] [stderr] 478 | | ret_val [INFO] [stderr] 479 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/app/mod.rs:1808:28 [INFO] [stderr] | [INFO] [stderr] 1808 | fn validator(&self) -> Option<&Rc StdResult<(), String>>> { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/app/mod.rs:1809:31 [INFO] [stderr] | [INFO] [stderr] 1809 | fn validator_os(&self) -> Option<&Rc StdResult<(), OsString>>> { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:1020:36 [INFO] [stderr] | [INFO] [stderr] 1020 | self.b.r_unless = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:1096:36 [INFO] [stderr] | [INFO] [stderr] 1096 | self.b.r_unless = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:1194:37 [INFO] [stderr] | [INFO] [stderr] 1194 | self.b.blacklist = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:1339:37 [INFO] [stderr] | [INFO] [stderr] 1339 | self.b.overrides = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:2404:41 [INFO] [stderr] | [INFO] [stderr] 2404 | self.v.possible_vals = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:2600:34 [INFO] [stderr] | [INFO] [stderr] 2600 | self.b.groups = Some(names.into_iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.into_iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/args/arg.rs:2600:40 [INFO] [stderr] | [INFO] [stderr] 2600 | self.b.groups = Some(names.into_iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/any_arg.rs:26:28 [INFO] [stderr] | [INFO] [stderr] 26 | fn validator(&self) -> Option<&Rc Result<(), String>>>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/any_arg.rs:27:31 [INFO] [stderr] | [INFO] [stderr] 27 | fn validator_os(&self) -> Option<&Rc Result<(), OsString>>>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/any_arg.rs:60:28 [INFO] [stderr] | [INFO] [stderr] 60 | fn validator(&self) -> Option<&Rc Result<(), String>>> { (*self).validator() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/any_arg.rs:61:31 [INFO] [stderr] | [INFO] [stderr] 61 | fn validator_os(&self) -> Option<&Rc Result<(), OsString>>> { (*self).validator_os() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/args/arg_matches.rs:581:28 [INFO] [stderr] | [INFO] [stderr] 581 | fn to_usize(i: &usize) -> usize { *i } [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `usize` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/args/arg_matches.rs:917:24 [INFO] [stderr] | [INFO] [stderr] 917 | fn to_usize(_: &usize) -> usize { unreachable!() }; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter_mut() and will not move the HashMap [INFO] [stderr] --> src/args/arg_matcher.rs:120:45 [INFO] [stderr] | [INFO] [stderr] 120 | for (name, matched_arg) in vals_map.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter_mut` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/args/arg_matcher.rs:205:24 [INFO] [stderr] | [INFO] [stderr] 205 | return !((ma.vals.len() as u64) > num); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(ma.vals.len() as u64) <= num` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/flag.rs:79:28 [INFO] [stderr] | [INFO] [stderr] 79 | fn validator(&self) -> Option<&Rc StdResult<(), String>>> { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/flag.rs:80:31 [INFO] [stderr] | [INFO] [stderr] 80 | fn validator_os(&self) -> Option<&Rc StdResult<(), OsString>>> { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/positional.rs:150:28 [INFO] [stderr] | [INFO] [stderr] 150 | fn validator(&self) -> Option<&Rc StdResult<(), String>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/positional.rs:153:31 [INFO] [stderr] | [INFO] [stderr] 153 | fn validator_os(&self) -> Option<&Rc StdResult<(), OsString>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/option.rs:132:28 [INFO] [stderr] | [INFO] [stderr] 132 | fn validator(&self) -> Option<&Rc StdResult<(), String>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/option.rs:135:31 [INFO] [stderr] | [INFO] [stderr] 135 | fn validator_os(&self) -> Option<&Rc StdResult<(), OsString>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/valued.rs:19:20 [INFO] [stderr] | [INFO] [stderr] 19 | pub validator: Option Result<(), String>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/valued.rs:20:23 [INFO] [stderr] | [INFO] [stderr] 20 | pub validator_os: Option Result<(), OsString>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/completions/bash.rs:123:50 [INFO] [stderr] | [INFO] [stderr] 123 | level = sc.split("__").map(|_| 1).fold(0, |acc, n| acc + n), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] Checking toml v0.4.10 [INFO] [stderr] Checking idna v0.1.5 [INFO] [stderr] Checking url v1.7.2 [INFO] [stderr] Checking version-sync v0.5.0 [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:117:13 [INFO] [stderr] | [INFO] [stderr] 117 | next_line_help: next_line_help, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `next_line_help` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:118:13 [INFO] [stderr] | [INFO] [stderr] 118 | hide_pv: hide_pv, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `hide_pv` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:133:13 [INFO] [stderr] | [INFO] [stderr] 133 | color: color, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `color` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:134:13 [INFO] [stderr] | [INFO] [stderr] 134 | cizer: cizer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `cizer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/app/help.rs:137:13 [INFO] [stderr] | [INFO] [stderr] 137 | use_long: use_long, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `use_long` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/app/help.rs:493:13 [INFO] [stderr] | [INFO] [stderr] 493 | write!(self.writer, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/app/help.rs:504:13 [INFO] [stderr] | [INFO] [stderr] 504 | write!(self.writer, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/args/arg_builder/base.rs:22:13 [INFO] [stderr] | [INFO] [stderr] 22 | name: name, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `name` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/usage_parser.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | usage: usage, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `usage` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/errors.rs:889:13 [INFO] [stderr] | [INFO] [stderr] 889 | kind: kind, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `kind` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/bash.rs:17:59 [INFO] [stderr] | [INFO] [stderr] 17 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { BashGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/fish.rs:15:59 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { FishGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/zsh.rs:23:18 [INFO] [stderr] | [INFO] [stderr] 23 | ZshGen { p: p } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/powershell.rs:16:65 [INFO] [stderr] | [INFO] [stderr] 16 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { PowerShellGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/elvish.rs:16:61 [INFO] [stderr] | [INFO] [stderr] 16 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { ElvishGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/completions/mod.rs:30:60 [INFO] [stderr] | [INFO] [stderr] 30 | pub fn new(p: &'b Parser<'a, 'b>) -> Self { ComplGen { p: p } } [INFO] [stderr] | ^^^^ help: replace it with: `p` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/app/parser.rs:971:24 [INFO] [stderr] | [INFO] [stderr] 971 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 972 | | if let ParseResult::Opt(name) = needs_val_of { [INFO] [stderr] 973 | | // Check to see if parsing a value from a previous arg [INFO] [stderr] 974 | | let arg = self.opts [INFO] [stderr] ... | [INFO] [stderr] 982 | | } [INFO] [stderr] 983 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 971 | } else if let ParseResult::Opt(name) = needs_val_of { [INFO] [stderr] 972 | // Check to see if parsing a value from a previous arg [INFO] [stderr] 973 | let arg = self.opts [INFO] [stderr] 974 | .iter() [INFO] [stderr] 975 | .find(|o| o.b.name == name) [INFO] [stderr] 976 | .expect(INTERNAL_ERROR_MSG); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/app/help.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | const TAB: &'static str = " "; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: lint name `too_many_arguments` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/app/help.rs:103:48 [INFO] [stderr] | [INFO] [stderr] 103 | #[cfg_attr(feature = "cargo-clippy", allow(too_many_arguments))] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change it to: `clippy::too_many_arguments` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(renamed_and_removed_lints)] on by default [INFO] [stderr] [INFO] [stderr] warning: lint name `useless_let_if_seq` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/app/help.rs:592:48 [INFO] [stderr] | [INFO] [stderr] 592 | #[cfg_attr(feature = "cargo-clippy", allow(useless_let_if_seq))] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change it to: `clippy::useless_let_if_seq` [INFO] [stderr] [INFO] [stderr] warning: Creating a reference that is immediately dereferenced. [INFO] [stderr] --> src/app/mod.rs:1637:41 [INFO] [stderr] | [INFO] [stderr] 1637 | let global_arg_vec: Vec<&str> = (&self).p.global_args.iter().map(|ga| ga.b.name).collect(); [INFO] [stderr] | ^^^^^^^ help: try this: `self.p` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ref_in_deref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ref_in_deref [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:569:28 [INFO] [stderr] | [INFO] [stderr] 569 | const INTERNAL_ERROR_MSG: &'static str = "Fatal internal error. Please consider filing a bug \ [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/lib.rs:571:22 [INFO] [stderr] | [INFO] [stderr] 571 | const INVALID_UTF8: &'static str = "unexpected invalid UTF-8 code point"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: lint name `too_many_arguments` is deprecated and may not have an effect in the future. Also `cfg_attr(cargo-clippy)` won't be necessary anymore [INFO] [stderr] --> src/app/help.rs:103:48 [INFO] [stderr] | [INFO] [stderr] 103 | #[cfg_attr(feature = "cargo-clippy", allow(too_many_arguments))] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: change it to: `clippy::too_many_arguments` [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 36 [INFO] [stderr] --> src/app/settings.rs:995:5 [INFO] [stderr] | [INFO] [stderr] 995 | / fn app_settings_fromstr() { [INFO] [stderr] 996 | | assert_eq!( [INFO] [stderr] 997 | | "argsnegatesubcommands".parse::().unwrap(), [INFO] [stderr] 998 | | AppSettings::ArgsNegateSubcommands [INFO] [stderr] ... | [INFO] [stderr] 1132 | | assert!("hahahaha".parse::().is_err()); [INFO] [stderr] 1133 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/app/parser.rs:534:46 [INFO] [stderr] | [INFO] [stderr] 534 | if self.positionals.values().any(|a| { [INFO] [stderr] | ______________________________________________^ [INFO] [stderr] 535 | | a.b.is_set(ArgSettings::Multiple) && (a.index as usize != self.positionals.len()) [INFO] [stderr] 536 | | }) { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/app/parser.rs:782:19 [INFO] [stderr] | [INFO] [stderr] 782 | fn is_new_arg(&mut self, arg_os: &OsStr, needs_val_of: ParseResult) -> bool { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/app/parser.rs:829:13 [INFO] [stderr] | [INFO] [stderr] 829 | !(arg_os.len() == 1) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `arg_os.len() != 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/app/parser.rs:986:16 [INFO] [stderr] | [INFO] [stderr] 986 | if !(self.is_set(AS::ArgsNegateSubcommands) && self.is_set(AS::ValidArgFound)) [INFO] [stderr] | ________________^ [INFO] [stderr] 987 | | && !self.is_set(AS::InferSubcommands) && !self.is_set(AS::AllowExternalSubcommands) [INFO] [stderr] | |___________________________________________________________________________________________________^ help: try: `!(self.is_set(AS::ArgsNegateSubcommands) && self.is_set(AS::ValidArgFound) || self.is_set(AS::AllowExternalSubcommands) || self.is_set(AS::InferSubcommands))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 30 [INFO] [stderr] --> src/app/parser.rs:843:5 [INFO] [stderr] | [INFO] [stderr] 843 | / pub fn get_matches_with( [INFO] [stderr] 844 | | &mut self, [INFO] [stderr] 845 | | matcher: &mut ArgMatcher<'a>, [INFO] [stderr] 846 | | it: &mut Peekable, [INFO] [stderr] ... | [INFO] [stderr] 1199 | | Validator::new(self).validate(needs_val_of, subcmd_name, matcher) [INFO] [stderr] 1200 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/app/parser.rs:855:46 [INFO] [stderr] | [INFO] [stderr] 855 | if self.positionals.values().any(|a| { [INFO] [stderr] | ______________________________________________^ [INFO] [stderr] 856 | | a.b.is_set(ArgSettings::Multiple) && (a.index as usize != self.positionals.len()) [INFO] [stderr] 857 | | }) [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1078:42 [INFO] [stderr] | [INFO] [stderr] 1078 | .and_then(|vec| Some(matcher.inc_occurrences_of(&*vec))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1078 | .and_then(|vec| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/app/parser.rs:1410:9 [INFO] [stderr] | [INFO] [stderr] 1410 | args.iter().map(|s| *s).collect() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `args.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/app/parser.rs:1671:30 [INFO] [stderr] | [INFO] [stderr] 1671 | let val = if p[1].as_bytes().len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!p[1].as_bytes().is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/app/parser.rs:1735:32 [INFO] [stderr] | [INFO] [stderr] 1735 | if !empty_vals && (v.len() == 0 || (needs_eq && !has_eq)) { [INFO] [stderr] | ^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `v.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1764:34 [INFO] [stderr] | [INFO] [stderr] 1764 | .and_then(|vec| Some(matcher.inc_occurrences_of(&*vec))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1764 | .and_then(|vec| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1870:34 [INFO] [stderr] | [INFO] [stderr] 1870 | .and_then(|vec| Some(matcher.inc_occurrences_of(&*vec))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1870 | .and_then(|vec| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1883:43 [INFO] [stderr] | [INFO] [stderr] 1883 | .and_then(|grps| Some(matcher.inc_occurrences_of(&*grps))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1883 | .and_then(|grps| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/app/parser.rs:1887:43 [INFO] [stderr] | [INFO] [stderr] 1887 | .and_then(|grps| Some(matcher.inc_occurrences_of(&*grps))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] help: if you intended to pass a unit value, use a unit literal instead [INFO] [stderr] | [INFO] [stderr] 1887 | .and_then(|grps| Some(())); [INFO] [stderr] | ^^ [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 29 [INFO] [stderr] --> src/app/parser.rs:1947:5 [INFO] [stderr] | [INFO] [stderr] 1947 | / pub fn add_defaults(&mut self, matcher: &mut ArgMatcher<'a>) -> ClapResult<()> { [INFO] [stderr] 1948 | | debugln!("Parser::add_defaults;"); [INFO] [stderr] 1949 | | macro_rules! add_val { [INFO] [stderr] 1950 | | (@default $_self:ident, $a:ident, $m:ident) => { [INFO] [stderr] ... | [INFO] [stderr] 2019 | | Ok(()) [INFO] [stderr] 2020 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/app/help.rs:326:5 [INFO] [stderr] | [INFO] [stderr] 326 | / fn val<'b, 'c>(&mut self, arg: &ArgWithDisplay<'b, 'c>) -> Result { [INFO] [stderr] 327 | | debugln!("Help::val: arg={}", arg); [INFO] [stderr] 328 | | if arg.takes_value() { [INFO] [stderr] 329 | | let delim = if arg.is_set(ArgSettings::RequireDelimiter) { [INFO] [stderr] ... | [INFO] [stderr] 418 | | Ok(spec_vals) [INFO] [stderr] 419 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/app/validator.rs:74:12 [INFO] [stderr] | [INFO] [stderr] 74 | if !(self.0.is_set(AS::SubcommandsNegateReqs) && subcmd_name.is_some()) && !reqs_validated { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(self.0.is_set(AS::SubcommandsNegateReqs) && subcmd_name.is_some() || reqs_validated)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: use of `or` followed by a function call [INFO] [stderr] --> src/app/validator.rs:161:25 [INFO] [stderr] | [INFO] [stderr] 161 | c_with = c_with.or( [INFO] [stderr] | _________________________^ [INFO] [stderr] 162 | | self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | | .map_or(None, [INFO] [stderr] 164 | | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 165 | | .map_or(None, |an| self.0.find_any_arg(an)) [INFO] [stderr] 166 | | .map_or(None, |aa| Some(format!("{}", aa))) [INFO] [stderr] 167 | | ); [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 161 | c_with = c_with.or_else(|| self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 162 | .map_or(None, [INFO] [stderr] 163 | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 164 | .map_or(None, |an| self.0.find_any_arg(an)) [INFO] [stderr] 165 | .map_or(None, |aa| Some(format!("{}", aa)))); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/app/validator.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | / self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | | .map_or(None, [INFO] [stderr] 164 | | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 165 | | .map_or(None, |an| self.0.find_any_arg(an)) [INFO] [stderr] 166 | | .map_or(None, |aa| Some(format!("{}", aa))) [INFO] [stderr] | |_______________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::option_map_or_none)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] help: try using and_then instead [INFO] [stderr] | [INFO] [stderr] 162 | self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | .map_or(None, [INFO] [stderr] 164 | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 165 | .map_or(None, |an| self.0.find_any_arg(an)).and_then(|aa| Some(format!("{}", aa))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/app/validator.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | / self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | | .map_or(None, [INFO] [stderr] 164 | | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] 165 | | .map_or(None, |an| self.0.find_any_arg(an)) [INFO] [stderr] | |_______________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] help: try using and_then instead [INFO] [stderr] | [INFO] [stderr] 162 | self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | .map_or(None, [INFO] [stderr] 164 | |bl| bl.iter().find(|arg| matcher.contains(arg))).and_then(|an| self.0.find_any_arg(an)) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/app/validator.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | / self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] 163 | | .map_or(None, [INFO] [stderr] 164 | | |bl| bl.iter().find(|arg| matcher.contains(arg))) [INFO] [stderr] | |_____________________________________________________________________^ help: try using and_then instead: `self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()).and_then(|bl| bl.iter().find(|arg| matcher.contains(arg)))` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] [INFO] [stderr] warning: called `map_or(None, f)` on an Option value. This can be done more directly by calling `and_then(f)` instead [INFO] [stderr] --> src/app/validator.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | self.0.find_any_arg(name).map_or(None, |aa| aa.blacklist()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try using and_then instead: `self.0.find_any_arg(name).and_then(|aa| aa.blacklist())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_or_none [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/app/usage.rs:27:28 [INFO] [stderr] | [INFO] [stderr] 27 | let mut args: Vec<_> = matcher [INFO] [stderr] | ____________________________^ [INFO] [stderr] 28 | | .arg_names() [INFO] [stderr] 29 | | .iter() [INFO] [stderr] 30 | | .filter(|n| { [INFO] [stderr] ... | [INFO] [stderr] 38 | | }) [INFO] [stderr] 39 | | .map(|&n| n) [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 27 | let mut args: Vec<_> = matcher [INFO] [stderr] 28 | .arg_names() [INFO] [stderr] 29 | .iter() [INFO] [stderr] 30 | .filter(|n| { [INFO] [stderr] 31 | if let Some(o) = find_by_name!(p, **n, opts, iter) { [INFO] [stderr] 32 | !o.b.is_set(ArgSettings::Required) && !o.b.is_set(ArgSettings::Hidden) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> src/app/usage.rs:84:67 [INFO] [stderr] | [INFO] [stderr] 84 | if !p.is_set(AS::UnifiedHelpMessage) && p.opts.iter().any(|o| { [INFO] [stderr] | ___________________________________________________________________^ [INFO] [stderr] 85 | | !o.is_set(ArgSettings::Required) && !o.is_set(ArgSettings::Hidden) [INFO] [stderr] 86 | | }) { [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 35 [INFO] [stderr] --> src/app/usage.rs:318:1 [INFO] [stderr] | [INFO] [stderr] 318 | / pub fn get_required_usage_from<'a, 'b>( [INFO] [stderr] 319 | | p: &Parser<'a, 'b>, [INFO] [stderr] 320 | | reqs: &[&'a str], [INFO] [stderr] 321 | | matcher: Option<&ArgMatcher<'a>>, [INFO] [stderr] ... | [INFO] [stderr] 478 | | ret_val [INFO] [stderr] 479 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/app/mod.rs:1808:28 [INFO] [stderr] | [INFO] [stderr] 1808 | fn validator(&self) -> Option<&Rc StdResult<(), String>>> { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::type_complexity)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/app/mod.rs:1809:31 [INFO] [stderr] | [INFO] [stderr] 1809 | fn validator_os(&self) -> Option<&Rc StdResult<(), OsString>>> { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:1020:36 [INFO] [stderr] | [INFO] [stderr] 1020 | self.b.r_unless = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:1096:36 [INFO] [stderr] | [INFO] [stderr] 1096 | self.b.r_unless = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:1194:37 [INFO] [stderr] | [INFO] [stderr] 1194 | self.b.blacklist = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:1339:37 [INFO] [stderr] | [INFO] [stderr] 1339 | self.b.overrides = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:2404:41 [INFO] [stderr] | [INFO] [stderr] 2404 | self.v.possible_vals = Some(names.iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/args/arg.rs:2600:34 [INFO] [stderr] | [INFO] [stderr] 2600 | self.b.groups = Some(names.into_iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `names.into_iter().cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/args/arg.rs:2600:40 [INFO] [stderr] | [INFO] [stderr] 2600 | self.b.groups = Some(names.into_iter().map(|s| *s).collect::>()); [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/any_arg.rs:26:28 [INFO] [stderr] | [INFO] [stderr] 26 | fn validator(&self) -> Option<&Rc Result<(), String>>>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/any_arg.rs:27:31 [INFO] [stderr] | [INFO] [stderr] 27 | fn validator_os(&self) -> Option<&Rc Result<(), OsString>>>; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/any_arg.rs:60:28 [INFO] [stderr] | [INFO] [stderr] 60 | fn validator(&self) -> Option<&Rc Result<(), String>>> { (*self).validator() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/any_arg.rs:61:31 [INFO] [stderr] | [INFO] [stderr] 61 | fn validator_os(&self) -> Option<&Rc Result<(), OsString>>> { (*self).validator_os() } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/args/arg_matches.rs:581:28 [INFO] [stderr] | [INFO] [stderr] 581 | fn to_usize(i: &usize) -> usize { *i } [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `usize` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/args/arg_matches.rs:917:24 [INFO] [stderr] | [INFO] [stderr] 917 | fn to_usize(_: &usize) -> usize { unreachable!() }; [INFO] [stderr] | ^^^^^^ help: consider passing by value instead: `usize` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter_mut() and will not move the HashMap [INFO] [stderr] --> src/args/arg_matcher.rs:120:45 [INFO] [stderr] | [INFO] [stderr] 120 | for (name, matched_arg) in vals_map.into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter_mut` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/args/arg_matcher.rs:205:24 [INFO] [stderr] | [INFO] [stderr] 205 | return !((ma.vals.len() as u64) > num); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(ma.vals.len() as u64) <= num` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/flag.rs:79:28 [INFO] [stderr] | [INFO] [stderr] 79 | fn validator(&self) -> Option<&Rc StdResult<(), String>>> { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/flag.rs:80:31 [INFO] [stderr] | [INFO] [stderr] 80 | fn validator_os(&self) -> Option<&Rc StdResult<(), OsString>>> { None } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/positional.rs:150:28 [INFO] [stderr] | [INFO] [stderr] 150 | fn validator(&self) -> Option<&Rc StdResult<(), String>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/positional.rs:153:31 [INFO] [stderr] | [INFO] [stderr] 153 | fn validator_os(&self) -> Option<&Rc StdResult<(), OsString>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/option.rs:132:28 [INFO] [stderr] | [INFO] [stderr] 132 | fn validator(&self) -> Option<&Rc StdResult<(), String>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/option.rs:135:31 [INFO] [stderr] | [INFO] [stderr] 135 | fn validator_os(&self) -> Option<&Rc StdResult<(), OsString>>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/valued.rs:19:20 [INFO] [stderr] | [INFO] [stderr] 19 | pub validator: Option Result<(), String>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stderr] --> src/args/arg_builder/valued.rs:20:23 [INFO] [stderr] | [INFO] [stderr] 20 | pub validator_os: Option Result<(), OsString>>>, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 84 [INFO] [stderr] --> src/usage_parser.rs:228:5 [INFO] [stderr] | [INFO] [stderr] 228 | / fn create_flag_usage() { [INFO] [stderr] 229 | | let a = Arg::from_usage("[flag] -f 'some help info'"); [INFO] [stderr] 230 | | assert_eq!(a.b.name, "flag"); [INFO] [stderr] 231 | | assert_eq!(a.s.short.unwrap(), 'f'); [INFO] [stderr] ... | [INFO] [stderr] 338 | | assert!(e.v.num_vals.is_none()); [INFO] [stderr] 339 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/completions/bash.rs:123:50 [INFO] [stderr] | [INFO] [stderr] 123 | level = sc.split("__").map(|_| 1).fold(0, |acc, n| acc + n), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `.sum()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 55.57s [INFO] running `"docker" "inspect" "83c3ea4e4b782850a4fd0c26acc46798437dbfc5f7354f571c9915958b6a9ad7"` [INFO] running `"docker" "rm" "-f" "83c3ea4e4b782850a4fd0c26acc46798437dbfc5f7354f571c9915958b6a9ad7"` [INFO] [stdout] 83c3ea4e4b782850a4fd0c26acc46798437dbfc5f7354f571c9915958b6a9ad7