[INFO] fetching crate envful 1.0.7... [INFO] linting envful-1.0.7 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate envful 1.0.7 into /workspace/builds/worker-7-tc1/source [INFO] started tweaking crates.io crate envful 1.0.7 [INFO] finished tweaking crates.io crate envful 1.0.7 [INFO] tweaked toml for crates.io crate envful 1.0.7 written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate envful 1.0.7 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate envful 1.0.7 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded textwrap v0.14.2 [INFO] [stderr] Downloaded doc-comment v0.3.3 [INFO] [stderr] Downloaded assert_cmd v2.0.4 [INFO] [stderr] Downloaded clap_derive v3.0.6 [INFO] [stderr] Downloaded clap v3.0.10 [INFO] [stderr] Downloaded libc v0.2.113 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 577e719e588890f040469fce0b76d96aa8c50f3aa84e9d44e846515a2fa656b9 [INFO] running `Command { std: "docker" "start" "-a" "577e719e588890f040469fce0b76d96aa8c50f3aa84e9d44e846515a2fa656b9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "577e719e588890f040469fce0b76d96aa8c50f3aa84e9d44e846515a2fa656b9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "577e719e588890f040469fce0b76d96aa8c50f3aa84e9d44e846515a2fa656b9", kill_on_drop: false }` [INFO] [stdout] 577e719e588890f040469fce0b76d96aa8c50f3aa84e9d44e846515a2fa656b9 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 5d6c2aef5e45e688823f7f841c281bfe852ed9563a8d2d232f56070d8c44a9a0 [INFO] running `Command { std: "docker" "start" "-a" "5d6c2aef5e45e688823f7f841c281bfe852ed9563a8d2d232f56070d8c44a9a0", kill_on_drop: false }` [INFO] [stderr] Compiling memchr v2.4.1 [INFO] [stderr] Compiling proc-macro2 v1.0.36 [INFO] [stderr] Compiling libc v0.2.113 [INFO] [stderr] Compiling syn v1.0.86 [INFO] [stderr] Compiling indexmap v1.8.0 [INFO] [stderr] Compiling num-traits v0.2.14 [INFO] [stderr] Checking hashbrown v0.11.2 [INFO] [stderr] Compiling heck v0.4.0 [INFO] [stderr] Checking textwrap v0.14.2 [INFO] [stderr] Checking termcolor v1.1.2 [INFO] [stderr] Checking predicates-core v1.0.3 [INFO] [stderr] Checking strsim v0.10.0 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Checking regex-syntax v0.6.25 [INFO] [stderr] Compiling doc-comment v0.3.3 [INFO] [stderr] Checking itertools v0.10.3 [INFO] [stderr] Checking regex-automata v0.1.10 [INFO] [stderr] Checking termtree v0.2.4 [INFO] [stderr] Checking normalize-line-endings v0.3.0 [INFO] [stderr] Checking difflib v0.4.0 [INFO] [stderr] Checking predicates-tree v1.0.5 [INFO] [stderr] Checking aho-corasick v0.7.18 [INFO] [stderr] Checking os_str_bytes v6.0.0 [INFO] [stderr] Checking bstr v0.2.17 [INFO] [stderr] Compiling quote v1.0.15 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking which v4.2.4 [INFO] [stderr] Checking wait-timeout v0.2.0 [INFO] [stderr] Checking colored v2.0.0 [INFO] [stderr] Checking float-cmp v0.9.0 [INFO] [stderr] Checking regex v1.5.4 [INFO] [stderr] Checking predicates v2.1.1 [INFO] [stderr] Checking assert_cmd v2.0.4 [INFO] [stderr] Compiling clap_derive v3.0.6 [INFO] [stderr] Checking clap v3.0.10 [INFO] [stderr] Checking envful v1.0.7 (/opt/rustwide/workdir) [INFO] [stdout] warning: called `unwrap` on `env_file_path` after checking its variant with `is_some` [INFO] [stdout] --> src/checker.rs:36:29 [INFO] [stdout] | [INFO] [stdout] 35 | if env_file_path.is_some() { [INFO] [stdout] | -------------------------- help: try: `if let Some() = env_file_path` [INFO] [stdout] 36 | let env_file_path = env_file_path.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/checker.rs:9:15 [INFO] [stdout] | [INFO] [stdout] 9 | manifest: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 9 ~ manifest: &Path, [INFO] [stdout] 10 | silent: bool, [INFO] [stdout] ... [INFO] [stdout] 17 | [INFO] [stdout] 18 ~ let manifest_path = manifest.to_path_buf(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/checker.rs:41:27 [INFO] [stdout] | [INFO] [stdout] 41 | .filter(|var| !var.value.is_none() && !var.value.as_ref().unwrap().is_empty()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `var.value.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/checker.rs:70:40 [INFO] [stdout] | [INFO] [stdout] 70 | let undeclared_vars: Vec = all_vars [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 71 | | .iter() [INFO] [stdout] 72 | | .filter(|v| { [INFO] [stdout] 73 | | !declared_vars [INFO] [stdout] ... | [INFO] [stdout] 78 | | }) [INFO] [stdout] 79 | | .map(|v| v.clone()) [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 70 ~ let undeclared_vars: Vec = all_vars [INFO] [stdout] 71 + .iter() [INFO] [stdout] 72 + .filter(|v| { [INFO] [stdout] 73 + !declared_vars [INFO] [stdout] 74 + .iter() [INFO] [stdout] 75 + .map(|dec_var| dec_var.name.clone()) [INFO] [stdout] 76 + .collect::>() [INFO] [stdout] 77 + .contains(v) [INFO] [stdout] 78 + }).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/checker.rs:81:17 [INFO] [stdout] | [INFO] [stdout] 81 | let error = required_missing_vars.len() > 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!required_missing_vars.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/checker.rs:83:5 [INFO] [stdout] | [INFO] [stdout] 83 | / if show_undeclared { [INFO] [stdout] 84 | | if undeclared_vars.len() > 0 { [INFO] [stdout] 85 | | println!( [INFO] [stdout] 86 | | "{}", [INFO] [stdout] ... | [INFO] [stdout] 99 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 83 ~ if show_undeclared [INFO] [stdout] 84 ~ && undeclared_vars.len() > 0 { [INFO] [stdout] 85 | println!( [INFO] [stdout] ... [INFO] [stdout] 97 | } [INFO] [stdout] 98 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/checker.rs:84:12 [INFO] [stdout] | [INFO] [stdout] 84 | if undeclared_vars.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!undeclared_vars.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/checker.rs:101:8 [INFO] [stdout] | [INFO] [stdout] 101 | if optional_missing_vars.len() > 0 && show_missing_optional { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!optional_missing_vars.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/checker.rs:202:5 [INFO] [stdout] | [INFO] [stdout] 202 | return env_vars; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 202 - return env_vars; [INFO] [stdout] 202 + env_vars [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `var_string.get(0)` [INFO] [stdout] --> src/checker.rs:184:20 [INFO] [stdout] | [INFO] [stdout] 184 | let name = var_string.get(0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `var_string.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/checker.rs:264:5 [INFO] [stdout] | [INFO] [stdout] 264 | return env_vars; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 264 - return env_vars; [INFO] [stdout] 264 + env_vars [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `var_string.get(0)` [INFO] [stdout] --> src/checker.rs:247:20 [INFO] [stdout] | [INFO] [stdout] 247 | let name = var_string.get(0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `var_string.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/checker.rs:270:5 [INFO] [stdout] | [INFO] [stdout] 270 | return value.to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 270 - return value.to_string(); [INFO] [stdout] 270 + value.to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/checker.rs:267:22 [INFO] [stdout] | [INFO] [stdout] 267 | fn parse_token(text: &String) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 267 ~ fn parse_token(text: &str) -> String { [INFO] [stdout] 268 ~ let value = text.to_owned(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `binary` after checking its variant with `is_err` [INFO] [stdout] --> src/runner.rs:21:22 [INFO] [stdout] | [INFO] [stdout] 16 | if binary.is_err() { [INFO] [stdout] | ------------------ help: try: `if let Err() = binary` [INFO] [stdout] ... [INFO] [stdout] 21 | panic!("{}", binary.unwrap_err()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/runner.rs:9:14 [INFO] [stdout] | [INFO] [stdout] 9 | command: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 9 - command: &Vec, [INFO] [stdout] 9 + command: &[String], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `command.get(0)` [INFO] [stdout] --> src/runner.rs:15:24 [INFO] [stdout] | [INFO] [stdout] 15 | let binary = which(command.get(0).unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `command.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `command.get(0)` [INFO] [stdout] --> src/runner.rs:19:13 [INFO] [stdout] | [INFO] [stdout] 19 | command.get(0).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `command.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `env_file_path` after checking its variant with `is_some` [INFO] [stdout] --> src/checker.rs:36:29 [INFO] [stdout] | [INFO] [stdout] 35 | if env_file_path.is_some() { [INFO] [stdout] | -------------------------- help: try: `if let Some() = env_file_path` [INFO] [stdout] 36 | let env_file_path = env_file_path.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/checker.rs:9:15 [INFO] [stdout] | [INFO] [stdout] 9 | manifest: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 9 ~ manifest: &Path, [INFO] [stdout] 10 | silent: bool, [INFO] [stdout] ... [INFO] [stdout] 17 | [INFO] [stdout] 18 ~ let manifest_path = manifest.to_path_buf(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/checker.rs:41:27 [INFO] [stdout] | [INFO] [stdout] 41 | .filter(|var| !var.value.is_none() && !var.value.as_ref().unwrap().is_empty()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `var.value.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/checker.rs:70:40 [INFO] [stdout] | [INFO] [stdout] 70 | let undeclared_vars: Vec = all_vars [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 71 | | .iter() [INFO] [stdout] 72 | | .filter(|v| { [INFO] [stdout] 73 | | !declared_vars [INFO] [stdout] ... | [INFO] [stdout] 78 | | }) [INFO] [stdout] 79 | | .map(|v| v.clone()) [INFO] [stdout] | |___________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 70 ~ let undeclared_vars: Vec = all_vars [INFO] [stdout] 71 + .iter() [INFO] [stdout] 72 + .filter(|v| { [INFO] [stdout] 73 + !declared_vars [INFO] [stdout] 74 + .iter() [INFO] [stdout] 75 + .map(|dec_var| dec_var.name.clone()) [INFO] [stdout] 76 + .collect::>() [INFO] [stdout] 77 + .contains(v) [INFO] [stdout] 78 + }).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/checker.rs:81:17 [INFO] [stdout] | [INFO] [stdout] 81 | let error = required_missing_vars.len() > 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!required_missing_vars.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/checker.rs:83:5 [INFO] [stdout] | [INFO] [stdout] 83 | / if show_undeclared { [INFO] [stdout] 84 | | if undeclared_vars.len() > 0 { [INFO] [stdout] 85 | | println!( [INFO] [stdout] 86 | | "{}", [INFO] [stdout] ... | [INFO] [stdout] 99 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 83 ~ if show_undeclared [INFO] [stdout] 84 ~ && undeclared_vars.len() > 0 { [INFO] [stdout] 85 | println!( [INFO] [stdout] ... [INFO] [stdout] 97 | } [INFO] [stdout] 98 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/checker.rs:84:12 [INFO] [stdout] | [INFO] [stdout] 84 | if undeclared_vars.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!undeclared_vars.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/checker.rs:101:8 [INFO] [stdout] | [INFO] [stdout] 101 | if optional_missing_vars.len() > 0 && show_missing_optional { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!optional_missing_vars.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/checker.rs:202:5 [INFO] [stdout] | [INFO] [stdout] 202 | return env_vars; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 202 - return env_vars; [INFO] [stdout] 202 + env_vars [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `var_string.get(0)` [INFO] [stdout] --> src/checker.rs:184:20 [INFO] [stdout] | [INFO] [stdout] 184 | let name = var_string.get(0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `var_string.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/checker.rs:264:5 [INFO] [stdout] | [INFO] [stdout] 264 | return env_vars; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 264 - return env_vars; [INFO] [stdout] 264 + env_vars [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `var_string.get(0)` [INFO] [stdout] --> src/checker.rs:247:20 [INFO] [stdout] | [INFO] [stdout] 247 | let name = var_string.get(0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `var_string.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/checker.rs:270:5 [INFO] [stdout] | [INFO] [stdout] 270 | return value.to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 270 - return value.to_string(); [INFO] [stdout] 270 + value.to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/checker.rs:267:22 [INFO] [stdout] | [INFO] [stdout] 267 | fn parse_token(text: &String) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 267 ~ fn parse_token(text: &str) -> String { [INFO] [stdout] 268 ~ let value = text.to_owned(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `binary` after checking its variant with `is_err` [INFO] [stdout] --> src/runner.rs:21:22 [INFO] [stdout] | [INFO] [stdout] 16 | if binary.is_err() { [INFO] [stdout] | ------------------ help: try: `if let Err() = binary` [INFO] [stdout] ... [INFO] [stdout] 21 | panic!("{}", binary.unwrap_err()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/runner.rs:9:14 [INFO] [stdout] | [INFO] [stdout] 9 | command: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 9 - command: &Vec, [INFO] [stdout] 9 + command: &[String], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `command.get(0)` [INFO] [stdout] --> src/runner.rs:15:24 [INFO] [stdout] | [INFO] [stdout] 15 | let binary = which(command.get(0).unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `command.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `command.get(0)` [INFO] [stdout] --> src/runner.rs:19:13 [INFO] [stdout] | [INFO] [stdout] 19 | command.get(0).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `command.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> tests/check_spec.rs:34:20 [INFO] [stdout] | [INFO] [stdout] 34 | let file = format!("tests/fixtures/success/nonexistent"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"tests/fixtures/success/nonexistent".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> tests/check_spec.rs:35:24 [INFO] [stdout] | [INFO] [stdout] 35 | let manifest = format!("tests/fixtures/success/.env.example"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"tests/fixtures/success/.env.example".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> tests/check_spec.rs:47:20 [INFO] [stdout] | [INFO] [stdout] 47 | let file = format!("tests/fixtures/success/.env"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"tests/fixtures/success/.env".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> tests/check_spec.rs:48:24 [INFO] [stdout] | [INFO] [stdout] 48 | let manifest = format!("tests/fixtures/success/nonexistent"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"tests/fixtures/success/nonexistent".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> tests/check_spec.rs:67:9 [INFO] [stdout] | [INFO] [stdout] 61 | / let result = run_check( [INFO] [stdout] 62 | | "missing_but_in_env", [INFO] [stdout] 63 | | true, [INFO] [stdout] 64 | | "All variables are present", [INFO] [stdout] 65 | | Some(env_vars), [INFO] [stdout] 66 | | ); [INFO] [stdout] | |__________- unnecessary `let` binding [INFO] [stdout] 67 | result [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 61 ~ [INFO] [stdout] 62 ~ run_check( [INFO] [stdout] 63 + "missing_but_in_env", [INFO] [stdout] 64 + true, [INFO] [stdout] 65 + "All variables are present", [INFO] [stdout] 66 + Some(env_vars), [INFO] [stdout] 67 + ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `env_vars` after checking its variant with `is_some` [INFO] [stdout] --> tests/check_spec.rs:96:33 [INFO] [stdout] | [INFO] [stdout] 95 | if env_vars.is_some() { [INFO] [stdout] | --------------------- help: try: `if let Some() = env_vars` [INFO] [stdout] 96 | for (key, value) in env_vars.unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 11.50s [INFO] running `Command { std: "docker" "inspect" "5d6c2aef5e45e688823f7f841c281bfe852ed9563a8d2d232f56070d8c44a9a0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5d6c2aef5e45e688823f7f841c281bfe852ed9563a8d2d232f56070d8c44a9a0", kill_on_drop: false }` [INFO] [stdout] 5d6c2aef5e45e688823f7f841c281bfe852ed9563a8d2d232f56070d8c44a9a0