[INFO] cloning repository https://github.com/HannesScript/BetterShell [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/HannesScript/BetterShell" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FHannesScript%2FBetterShell", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FHannesScript%2FBetterShell'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 73e2a6fa11ecba63b03f3fe62c024f217e548173 [INFO] linting HannesScript/BetterShell against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FHannesScript%2FBetterShell" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/HannesScript/BetterShell [INFO] finished tweaking git repo https://github.com/HannesScript/BetterShell [INFO] tweaked toml for git repo https://github.com/HannesScript/BetterShell written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/HannesScript/BetterShell 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 git repo https://github.com/HannesScript/BetterShell 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] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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] ec57989e83d457ebe56d1713f979e2d926518b18025105d3d60043e5bfba92bc [INFO] running `Command { std: "docker" "start" "-a" "ec57989e83d457ebe56d1713f979e2d926518b18025105d3d60043e5bfba92bc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "ec57989e83d457ebe56d1713f979e2d926518b18025105d3d60043e5bfba92bc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ec57989e83d457ebe56d1713f979e2d926518b18025105d3d60043e5bfba92bc", kill_on_drop: false }` [INFO] [stdout] ec57989e83d457ebe56d1713f979e2d926518b18025105d3d60043e5bfba92bc [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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] 5485bde903cba847e57c4be6a21d68357764a463dcd132ab472272c26317f984 [INFO] running `Command { std: "docker" "start" "-a" "5485bde903cba847e57c4be6a21d68357764a463dcd132ab472272c26317f984", kill_on_drop: false }` [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Checking thiserror v2.0.18 [INFO] [stderr] Checking bettershell v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/commands.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | return; [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] 9 - println!("{}: command not found", command); [INFO] [stdout] 10 - return; [INFO] [stdout] 9 + println!("{}: command not found", command); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/commands.rs:51:8 [INFO] [stdout] | [INFO] [stdout] 51 | if elem_found_at != "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!elem_found_at.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/commands.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 67 | return; [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] 66 - println!("{}", text_to_print); [INFO] [stdout] 67 - return; [INFO] [stdout] 66 + println!("{}", text_to_print); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/commands.rs:94:8 [INFO] [stdout] | [INFO] [stdout] 94 | if elem_found_at != "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!elem_found_at.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/commands.rs:131:8 [INFO] [stdout] | [INFO] [stdout] 131 | if !env::set_current_dir(&path).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `env::set_current_dir(&path).is_err()` [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: the borrowed expression implements the required traits [INFO] [stdout] --> src/commands.rs:131:30 [INFO] [stdout] | [INFO] [stdout] 131 | if !env::set_current_dir(&path).is_ok() { [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/commands.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 10 | return; [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] 9 - println!("{}: command not found", command); [INFO] [stdout] 10 - return; [INFO] [stdout] 9 + println!("{}: command not found", command); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/commands.rs:51:8 [INFO] [stdout] | [INFO] [stdout] 51 | if elem_found_at != "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!elem_found_at.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/commands.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 67 | return; [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] 66 - println!("{}", text_to_print); [INFO] [stdout] 67 - return; [INFO] [stdout] 66 + println!("{}", text_to_print); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/commands.rs:94:8 [INFO] [stdout] | [INFO] [stdout] 94 | if elem_found_at != "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!elem_found_at.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/commands.rs:131:8 [INFO] [stdout] | [INFO] [stdout] 131 | if !env::set_current_dir(&path).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `env::set_current_dir(&path).is_err()` [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: the borrowed expression implements the required traits [INFO] [stdout] --> src/commands.rs:131:30 [INFO] [stdout] | [INFO] [stdout] 131 | if !env::set_current_dir(&path).is_ok() { [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `input_split.get(0)` [INFO] [stdout] --> src/main.rs:32:25 [INFO] [stdout] | [INFO] [stdout] 32 | let command: &str = input_split.get(0).map(|s| s.as_str()).unwrap_or(""); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `input_split.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: length comparison to zero [INFO] [stdout] --> tests/commands_test.rs:173:17 [INFO] [stdout] | [INFO] [stdout] 173 | assert!(path_split.len() > 0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!path_split.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: length comparison to zero [INFO] [stdout] --> tests/integration_test.rs:305:17 [INFO] [stdout] | [INFO] [stdout] 305 | assert!(dirs.len() > 0, "PATH should contain at least one directory"); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!dirs.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: length comparison to zero [INFO] [stdout] --> tests/integration_test.rs:311:13 [INFO] [stdout] | [INFO] [stdout] 311 | existing_dirs.len() > 0, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!existing_dirs.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: useless use of `vec!` [INFO] [stdout] --> tests/commands_test.rs:191:20 [INFO] [stdout] | [INFO] [stdout] 191 | let args = vec!["hello", "world", "test"]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["hello", "world", "test"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> tests/commands_test.rs:231:20 [INFO] [stdout] | [INFO] [stdout] 231 | let args = vec!["hello", "beautiful", "world"]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["hello", "beautiful", "world"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> tests/integration_test.rs:328:13 [INFO] [stdout] | [INFO] [stdout] 328 | / if path_obj.exists() { [INFO] [stdout] 329 | | if let Ok(metadata) = fs::metadata(&ls_path) { [INFO] [stdout] 330 | | let mode = metadata.permissions().mode(); [INFO] [stdout] 331 | | if mode & 0o111 != 0 { [INFO] [stdout] ... | [INFO] [stdout] 336 | | } [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] 328 ~ if path_obj.exists() [INFO] [stdout] 329 ~ && let Ok(metadata) = fs::metadata(&ls_path) { [INFO] [stdout] 330 | let mode = metadata.permissions().mode(); [INFO] [stdout] ... [INFO] [stdout] 334 | } [INFO] [stdout] 335 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `input_split.get(0)` [INFO] [stdout] --> src/main.rs:32:25 [INFO] [stdout] | [INFO] [stdout] 32 | let command: &str = input_split.get(0).map(|s| s.as_str()).unwrap_or(""); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `input_split.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] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.84s [INFO] running `Command { std: "docker" "inspect" "5485bde903cba847e57c4be6a21d68357764a463dcd132ab472272c26317f984", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5485bde903cba847e57c4be6a21d68357764a463dcd132ab472272c26317f984", kill_on_drop: false }` [INFO] [stdout] 5485bde903cba847e57c4be6a21d68357764a463dcd132ab472272c26317f984