[INFO] cloning repository https://github.com/parsa/redo [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/parsa/redo" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fparsa%2Fredo", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fparsa%2Fredo'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] ca7b5f05b81a0150a9c9258515022dd37b206b08 [INFO] linting parsa/redo against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fparsa%2Fredo" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/parsa/redo [INFO] finished tweaking git repo https://github.com/parsa/redo [INFO] tweaked toml for git repo https://github.com/parsa/redo written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/parsa/redo 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/parsa/redo 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-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] 2ffa2d4923efcc753a7cc9eecc761e8362876b67a57cb808ee616b8c990d0811 [INFO] running `Command { std: "docker" "start" "-a" "2ffa2d4923efcc753a7cc9eecc761e8362876b67a57cb808ee616b8c990d0811", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "2ffa2d4923efcc753a7cc9eecc761e8362876b67a57cb808ee616b8c990d0811", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2ffa2d4923efcc753a7cc9eecc761e8362876b67a57cb808ee616b8c990d0811", kill_on_drop: false }` [INFO] [stdout] 2ffa2d4923efcc753a7cc9eecc761e8362876b67a57cb808ee616b8c990d0811 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] 92b8d98d50e46bcd92e7c0e3ff532366e56b9de903cdc9efb49f59148959974d [INFO] running `Command { std: "docker" "start" "-a" "92b8d98d50e46bcd92e7c0e3ff532366e56b9de903cdc9efb49f59148959974d", kill_on_drop: false }` [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Checking ahash v0.8.12 [INFO] [stderr] Compiling nix v0.29.0 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking pathdiff v0.2.3 [INFO] [stderr] Checking serde_json v1.0.149 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking hashlink v0.9.1 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking rusqlite v0.32.1 [INFO] [stderr] Checking redo_core v0.42.0 (/opt/rustwide/workdir/redo_core) [INFO] [stdout] warning: field `remote_exec` is never read [INFO] [stdout] --> redo_core/src/builder.rs:611:5 [INFO] [stdout] | [INFO] [stdout] 596 | struct PendingBuild { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 611 | remote_exec: bool, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> redo_core/src/builder.rs:268:1 [INFO] [stdout] | [INFO] [stdout] 268 | / fn exec_dofile_in_child( [INFO] [stdout] 269 | | dodir: &Path, [INFO] [stdout] 270 | | dofile: &str, [INFO] [stdout] 271 | | arg1: &str, [INFO] [stdout] ... | [INFO] [stdout] 277 | | trace_out0: Option<&Path>, [INFO] [stdout] 278 | | ) -> anyhow::Result<()> { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> redo_core/src/builder.rs:339:74 [INFO] [stdout] | [INFO] [stdout] 339 | let tmpl = format!("{}/redo.XXXXXX", logdir.to_string_lossy().to_string()); [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `remote_exec` is never read [INFO] [stdout] --> redo_core/src/builder.rs:611:5 [INFO] [stdout] | [INFO] [stdout] 596 | struct PendingBuild { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 611 | remote_exec: bool, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> redo_core/src/builder.rs:268:1 [INFO] [stdout] | [INFO] [stdout] 268 | / fn exec_dofile_in_child( [INFO] [stdout] 269 | | dodir: &Path, [INFO] [stdout] 270 | | dofile: &str, [INFO] [stdout] 271 | | arg1: &str, [INFO] [stdout] ... | [INFO] [stdout] 277 | | trace_out0: Option<&Path>, [INFO] [stdout] 278 | | ) -> anyhow::Result<()> { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> redo_core/src/builder.rs:339:74 [INFO] [stdout] | [INFO] [stdout] 339 | let tmpl = format!("{}/redo.XXXXXX", logdir.to_string_lossy().to_string()); [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> redo_core/src/builder.rs:1145:21 [INFO] [stdout] | [INFO] [stdout] 1145 | / let mut wargv: Vec = Vec::new(); [INFO] [stdout] 1146 | | wargv.push("redo-remote-exec".to_string()); [INFO] [stdout] 1147 | | wargv.push("--out".to_string()); [INFO] [stdout] 1148 | | wargv.push(tmpname.to_string_lossy().to_string()); [INFO] [stdout] ... | [INFO] [stdout] 1159 | | wargv.push("--tmp-rel".to_string()); [INFO] [stdout] 1160 | | wargv.push(tmp_rel); [INFO] [stdout] | |________________________________________^ help: consider using the `vec![]` macro: `let mut wargv: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] = note: `#[warn(clippy::vec_init_then_push)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calls to `push` immediately after creation [INFO] [stdout] --> redo_core/src/builder.rs:1145:21 [INFO] [stdout] | [INFO] [stdout] 1145 | / let mut wargv: Vec = Vec::new(); [INFO] [stdout] 1146 | | wargv.push("redo-remote-exec".to_string()); [INFO] [stdout] 1147 | | wargv.push("--out".to_string()); [INFO] [stdout] 1148 | | wargv.push(tmpname.to_string_lossy().to_string()); [INFO] [stdout] ... | [INFO] [stdout] 1159 | | wargv.push("--tmp-rel".to_string()); [INFO] [stdout] 1160 | | wargv.push(tmp_rel); [INFO] [stdout] | |________________________________________^ help: consider using the `vec![]` macro: `let mut wargv: Vec = vec![..];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#vec_init_then_push [INFO] [stdout] = note: `#[warn(clippy::vec_init_then_push)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> redo_core/src/builder.rs:2249:28 [INFO] [stdout] | [INFO] [stdout] 2249 | if !env::v().no_oob && !(list.len() == 1 && list[0].id == f.id) => [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(env::v().no_oob || list.len() == 1 && list[0].id == f.id)` [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: this boolean expression can be simplified [INFO] [stdout] --> redo_core/src/builder.rs:2356:36 [INFO] [stdout] | [INFO] [stdout] 2356 | ... if !env::v().no_oob && !(list.len() == 1 && list[0].id == f.id) => [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(env::v().no_oob || list.len() == 1 && list[0].id == f.id)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> redo_core/src/builder.rs:2461:20 [INFO] [stdout] | [INFO] [stdout] 2461 | if !env::v().no_oob && !(list.len() == 1 && list[0].id == f.id) => [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(env::v().no_oob || list.len() == 1 && list[0].id == f.id)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> redo_core/src/builder.rs:2212:45 [INFO] [stdout] | [INFO] [stdout] 2212 | jobserver::ensure_token_or_cheat(t, &cheat)?; [INFO] [stdout] | ^^^^^^ help: change this to: `cheat` [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: the borrowed expression implements the required traits [INFO] [stdout] --> redo_core/src/builder.rs:2311:50 [INFO] [stdout] | [INFO] [stdout] 2311 | jobserver::ensure_token_or_cheat("self", &cheat)?; [INFO] [stdout] | ^^^^^^ help: change this to: `cheat` [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] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> redo_core/src/builder.rs:2433:57 [INFO] [stdout] | [INFO] [stdout] 2433 | jobserver::ensure_token_or_cheat(<.t_arg, &cheat)?; [INFO] [stdout] | ^^^^^^ help: change this to: `cheat` [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] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> redo_core/src/deps.rs:70:9 [INFO] [stdout] | [INFO] [stdout] 70 | / if newstamp == state::STAMP_MISSING { [INFO] [stdout] 71 | | if f.stamp.is_some() && f.is_generated { [INFO] [stdout] 72 | | // target vanished: convert target -> source (reduces override warnings) [INFO] [stdout] 73 | | f.is_generated = false; [INFO] [stdout] ... | [INFO] [stdout] 78 | | } [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] 70 ~ if newstamp == state::STAMP_MISSING [INFO] [stdout] 71 ~ && f.stamp.is_some() && f.is_generated { [INFO] [stdout] 72 | // target vanished: convert target -> source (reduces override warnings) [INFO] [stdout] ... [INFO] [stdout] 76 | f.refresh()?; [INFO] [stdout] 77 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> redo_core/src/deps.rs:174:9 [INFO] [stdout] | [INFO] [stdout] 174 | / if !self.stamp.contains_key(&f.id) { [INFO] [stdout] 175 | | let s = f.read_stamp()?; [INFO] [stdout] 176 | | self.stamp.insert(f.id, s); [INFO] [stdout] 177 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 174 ~ if let std::collections::hash_map::Entry::Vacant(e) = self.stamp.entry(f.id) { [INFO] [stdout] 175 + let s = f.read_stamp()?; [INFO] [stdout] 176 + e.insert(s); [INFO] [stdout] 177 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> redo_core/src/builder.rs:2249:28 [INFO] [stdout] | [INFO] [stdout] 2249 | if !env::v().no_oob && !(list.len() == 1 && list[0].id == f.id) => [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(env::v().no_oob || list.len() == 1 && list[0].id == f.id)` [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: this boolean expression can be simplified [INFO] [stdout] --> redo_core/src/builder.rs:2356:36 [INFO] [stdout] | [INFO] [stdout] 2356 | ... if !env::v().no_oob && !(list.len() == 1 && list[0].id == f.id) => [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(env::v().no_oob || list.len() == 1 && list[0].id == f.id)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> redo_core/src/builder.rs:2461:20 [INFO] [stdout] | [INFO] [stdout] 2461 | if !env::v().no_oob && !(list.len() == 1 && list[0].id == f.id) => [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(env::v().no_oob || list.len() == 1 && list[0].id == f.id)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> redo_core/src/builder.rs:2212:45 [INFO] [stdout] | [INFO] [stdout] 2212 | jobserver::ensure_token_or_cheat(t, &cheat)?; [INFO] [stdout] | ^^^^^^ help: change this to: `cheat` [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: needless call to `as_bytes` [INFO] [stdout] --> redo_core/src/action_cache.rs:107:13 [INFO] [stdout] | [INFO] [stdout] 107 | let n = s.as_bytes().len() as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: `len()` can be called directly on strings: `s.len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_as_bytes [INFO] [stdout] = note: `#[warn(clippy::needless_as_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> redo_core/src/builder.rs:2311:50 [INFO] [stdout] | [INFO] [stdout] 2311 | jobserver::ensure_token_or_cheat("self", &cheat)?; [INFO] [stdout] | ^^^^^^ help: change this to: `cheat` [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] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> redo_core/src/builder.rs:2433:57 [INFO] [stdout] | [INFO] [stdout] 2433 | jobserver::ensure_token_or_cheat(<.t_arg, &cheat)?; [INFO] [stdout] | ^^^^^^ help: change this to: `cheat` [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] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> redo_core/src/deps.rs:70:9 [INFO] [stdout] | [INFO] [stdout] 70 | / if newstamp == state::STAMP_MISSING { [INFO] [stdout] 71 | | if f.stamp.is_some() && f.is_generated { [INFO] [stdout] 72 | | // target vanished: convert target -> source (reduces override warnings) [INFO] [stdout] 73 | | f.is_generated = false; [INFO] [stdout] ... | [INFO] [stdout] 78 | | } [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] 70 ~ if newstamp == state::STAMP_MISSING [INFO] [stdout] 71 ~ && f.stamp.is_some() && f.is_generated { [INFO] [stdout] 72 | // target vanished: convert target -> source (reduces override warnings) [INFO] [stdout] ... [INFO] [stdout] 76 | f.refresh()?; [INFO] [stdout] 77 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> redo_core/src/deps.rs:174:9 [INFO] [stdout] | [INFO] [stdout] 174 | / if !self.stamp.contains_key(&f.id) { [INFO] [stdout] 175 | | let s = f.read_stamp()?; [INFO] [stdout] 176 | | self.stamp.insert(f.id, s); [INFO] [stdout] 177 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 174 ~ if let std::collections::hash_map::Entry::Vacant(e) = self.stamp.entry(f.id) { [INFO] [stdout] 175 + let s = f.read_stamp()?; [INFO] [stdout] 176 + e.insert(s); [INFO] [stdout] 177 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needless call to `as_bytes` [INFO] [stdout] --> redo_core/src/action_cache.rs:107:13 [INFO] [stdout] | [INFO] [stdout] 107 | let n = s.as_bytes().len() as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: `len()` can be called directly on strings: `s.len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_as_bytes [INFO] [stdout] = note: `#[warn(clippy::needless_as_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> redo_core/src/jobserver.rs:29:11 [INFO] [stdout] | [INFO] [stdout] 29 | done: Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Iterator::find` [INFO] [stdout] --> redo_core/src/paths.rs:79:5 [INFO] [stdout] | [INFO] [stdout] 79 | / for cand in possible_do_files(target_rel, base) { [INFO] [stdout] 80 | | if cand.dodir.join(&cand.dofile).exists() { [INFO] [stdout] 81 | | return Some(cand); [INFO] [stdout] ... | [INFO] [stdout] 84 | | None [INFO] [stdout] | |________^ help: replace with an iterator: `possible_do_files(target_rel, base).into_iter().find(|cand| cand.dodir.join(&cand.dofile).exists())` [INFO] [stdout] | [INFO] [stdout] = note: you may need to dereference some variables [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] = note: `#[warn(clippy::manual_find)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> redo_core/src/jobserver.rs:29:11 [INFO] [stdout] | [INFO] [stdout] 29 | done: Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> redo_core/src/state.rs:839:9 [INFO] [stdout] | [INFO] [stdout] 839 | / if nonblock { [INFO] [stdout] 840 | | if matches!(e.raw_os_error(), Some(libc::EACCES) | Some(libc::EAGAIN)) { [INFO] [stdout] 841 | | return Ok(false); [INFO] [stdout] 842 | | } [INFO] [stdout] 843 | | } [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] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 839 ~ if nonblock [INFO] [stdout] 840 ~ && matches!(e.raw_os_error(), Some(libc::EACCES) | Some(libc::EAGAIN)) { [INFO] [stdout] 841 | return Ok(false); [INFO] [stdout] 842 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Iterator::find` [INFO] [stdout] --> redo_core/src/paths.rs:79:5 [INFO] [stdout] | [INFO] [stdout] 79 | / for cand in possible_do_files(target_rel, base) { [INFO] [stdout] 80 | | if cand.dodir.join(&cand.dofile).exists() { [INFO] [stdout] 81 | | return Some(cand); [INFO] [stdout] ... | [INFO] [stdout] 84 | | None [INFO] [stdout] | |________^ help: replace with an iterator: `possible_do_files(target_rel, base).into_iter().find(|cand| cand.dodir.join(&cand.dofile).exists())` [INFO] [stdout] | [INFO] [stdout] = note: you may need to dereference some variables [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] = note: `#[warn(clippy::manual_find)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking redo_bins v0.42.0 (/opt/rustwide/workdir/bins) [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> redo_core/src/state.rs:839:9 [INFO] [stdout] | [INFO] [stdout] 839 | / if nonblock { [INFO] [stdout] 840 | | if matches!(e.raw_os_error(), Some(libc::EACCES) | Some(libc::EAGAIN)) { [INFO] [stdout] 841 | | return Ok(false); [INFO] [stdout] 842 | | } [INFO] [stdout] 843 | | } [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] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 839 ~ if nonblock [INFO] [stdout] 840 ~ && matches!(e.raw_os_error(), Some(libc::EACCES) | Some(libc::EAGAIN)) { [INFO] [stdout] 841 | return Ok(false); [INFO] [stdout] 842 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: call to `reserve` immediately after creation [INFO] [stdout] --> bins/src/redo_browse.rs:166:9 [INFO] [stdout] | [INFO] [stdout] 166 | / let mut by_degree: Vec<(usize, i64)> = Vec::new(); [INFO] [stdout] 167 | | by_degree.reserve(self.nodes_by_id.len()); [INFO] [stdout] | |__________________________________________________^ help: consider using `Vec::with_capacity(/* Space hint */)`: `let mut by_degree: Vec<(usize, i64)> = Vec::with_capacity(self.nodes_by_id.len());` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#reserve_after_initialization [INFO] [stdout] = note: `#[warn(clippy::reserve_after_initialization)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> bins/src/redo_browse.rs:259:9 [INFO] [stdout] | [INFO] [stdout] 259 | links.sort_by(|a, b| (a.source, a.target).cmp(&(b.source, b.target))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 259 - links.sort_by(|a, b| (a.source, a.target).cmp(&(b.source, b.target))); [INFO] [stdout] 259 + links.sort_by_key(|a| (a.source, a.target)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> bins/src/redo_trace.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 63 | / if !out.contains_key(&OsString::from("HOME")) { [INFO] [stdout] 64 | | let home_dir = std::env::var_os("REDO_BASE") [INFO] [stdout] 65 | | .map(PathBuf::from) [INFO] [stdout] 66 | | .unwrap_or_else(std::env::temp_dir) [INFO] [stdout] ... | [INFO] [stdout] 71 | | out.insert(OsString::from("HOME"), home_dir.into_os_string()); [INFO] [stdout] 72 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 63 ~ out.entry(OsString::from("HOME")).or_insert_with(|| { [INFO] [stdout] 64 + let home_dir = std::env::var_os("REDO_BASE") [INFO] [stdout] 65 + .map(PathBuf::from) [INFO] [stdout] 66 + .unwrap_or_else(std::env::temp_dir) [INFO] [stdout] 67 + .join(".redo") [INFO] [stdout] 68 + .join("strict-home") [INFO] [stdout] 69 + .join(format!("{}", std::process::id())); [INFO] [stdout] 70 + let _ = std::fs::create_dir_all(&home_dir); [INFO] [stdout] 71 + home_dir.into_os_string() [INFO] [stdout] 72 + }); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern reimplements `Option::unwrap_or` [INFO] [stdout] --> bins/src/redo_trace.rs:90:5 [INFO] [stdout] | [INFO] [stdout] 90 | / if let Some(c) = st.code() { [INFO] [stdout] 91 | | c [INFO] [stdout] 92 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 95 | | } [INFO] [stdout] | |_____^ help: replace with: `st.code().unwrap_or(201)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> bins/src/redo_trace.rs:122:9 [INFO] [stdout] | [INFO] [stdout] 122 | return trace_run_linux_x86_64(argv, envp); [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] 122 - return trace_run_linux_x86_64(argv, envp); [INFO] [stdout] 122 + trace_run_linux_x86_64(argv, envp) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> bins/src/redo_trace.rs:482:38 [INFO] [stdout] | [INFO] [stdout] 482 | ... let a0 = regs.rdi as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `regs.rdi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> bins/src/redo_trace.rs:483:38 [INFO] [stdout] | [INFO] [stdout] 483 | ... let a1 = regs.rsi as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `regs.rsi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> bins/src/redo_trace.rs:484:38 [INFO] [stdout] | [INFO] [stdout] 484 | ... let a2 = regs.rdx as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `regs.rdx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> bins/src/redo_trace.rs:485:38 [INFO] [stdout] | [INFO] [stdout] 485 | ... let a3 = regs.r10 as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `regs.r10` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> bins/src/redo_trace.rs:546:69 [INFO] [stdout] | [INFO] [stdout] 546 | ... } else if scno == libc::SYS_stat as i64 { [INFO] [stdout] | _______________________________________________________________^ [INFO] [stdout] 547 | | ... if let Ok(s) = ptrace_read_cstring(pid, a0, 4096) { [INFO] [stdout] 548 | | ... let p = resolve_path(&cwd, &s); [INFO] [stdout] 549 | | ... observed.insert(p.to_string_lossy().to_string()); [INFO] [stdout] 550 | | ... } [INFO] [stdout] 551 | | ... } else if scno == libc::SYS_lstat as i64 { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> bins/src/redo_trace.rs:551:70 [INFO] [stdout] | [INFO] [stdout] 551 | ... } else if scno == libc::SYS_lstat as i64 { [INFO] [stdout] | ________________________________________________________________^ [INFO] [stdout] 552 | | ... if let Ok(s) = ptrace_read_cstring(pid, a0, 4096) { [INFO] [stdout] 553 | | ... let p = resolve_path(&cwd, &s); [INFO] [stdout] 554 | | ... observed.insert(p.to_string_lossy().to_string()); [INFO] [stdout] 555 | | ... } [INFO] [stdout] 556 | | ... } else if scno == libc::SYS_fstat as i64 { [INFO] [stdout] | |_______________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:492:40 [INFO] [stdout] | [INFO] [stdout] 492 | ... if scno == libc::SYS_chdir as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_chdir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:499:47 [INFO] [stdout] | [INFO] [stdout] 499 | ... } else if scno == libc::SYS_execve as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_execve` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:504:47 [INFO] [stdout] | [INFO] [stdout] 504 | ... } else if scno == libc::SYS_open as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_open` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:513:47 [INFO] [stdout] | [INFO] [stdout] 513 | ... } else if scno == libc::SYS_openat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_openat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:525:47 [INFO] [stdout] | [INFO] [stdout] 525 | ... } else if scno == libc::SYS_access as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_access` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:530:47 [INFO] [stdout] | [INFO] [stdout] 530 | ... } else if scno == libc::SYS_newfstatat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_newfstatat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:538:47 [INFO] [stdout] | [INFO] [stdout] 538 | ... } else if scno == libc::SYS_faccessat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_faccessat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:546:47 [INFO] [stdout] | [INFO] [stdout] 546 | ... } else if scno == libc::SYS_stat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_stat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:551:47 [INFO] [stdout] | [INFO] [stdout] 551 | ... } else if scno == libc::SYS_lstat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_lstat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:556:47 [INFO] [stdout] | [INFO] [stdout] 556 | ... } else if scno == libc::SYS_fstat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_fstat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:559:47 [INFO] [stdout] | [INFO] [stdout] 559 | ... } else if scno == libc::SYS_statx as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_statx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> bins/src/redo_trace.rs:596:16 [INFO] [stdout] | [INFO] [stdout] 596 | out.extend(trace_markers.into_iter()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/collect.rs:416:17 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 596 - out.extend(trace_markers.into_iter()); [INFO] [stdout] 596 + out.extend(trace_markers); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> bins/src/redo_trace.rs:597:16 [INFO] [stdout] | [INFO] [stdout] 597 | out.extend(observed.into_iter()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/collect.rs:416:17 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 597 - out.extend(observed.into_iter()); [INFO] [stdout] 597 + out.extend(observed); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Result::Err` [INFO] [stdout] --> bins/src/redo_trace.rs:846:26 [INFO] [stdout] | [INFO] [stdout] 846 | let rv = run_env_scrubbed(&argv, &envp).unwrap_or_else(|_| 201); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 846 - let rv = run_env_scrubbed(&argv, &envp).unwrap_or_else(|_| 201); [INFO] [stdout] 846 + let rv = run_env_scrubbed(&argv, &envp).unwrap_or(201); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this manual char comparison can be written more succinctly [INFO] [stdout] --> bins/src/redo.rs:504:39 [INFO] [stdout] | [INFO] [stdout] 504 | let s = line.trim_end_matches(|c| c == '\n' || c == '\r').trim(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using an array of `char`: `['\n', '\r']` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_pattern_char_comparison [INFO] [stdout] = note: `#[warn(clippy::manual_pattern_char_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> bins/src/redo_trace.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 63 | / if !out.contains_key(&OsString::from("HOME")) { [INFO] [stdout] 64 | | let home_dir = std::env::var_os("REDO_BASE") [INFO] [stdout] 65 | | .map(PathBuf::from) [INFO] [stdout] 66 | | .unwrap_or_else(std::env::temp_dir) [INFO] [stdout] ... | [INFO] [stdout] 71 | | out.insert(OsString::from("HOME"), home_dir.into_os_string()); [INFO] [stdout] 72 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 63 ~ out.entry(OsString::from("HOME")).or_insert_with(|| { [INFO] [stdout] 64 + let home_dir = std::env::var_os("REDO_BASE") [INFO] [stdout] 65 + .map(PathBuf::from) [INFO] [stdout] 66 + .unwrap_or_else(std::env::temp_dir) [INFO] [stdout] 67 + .join(".redo") [INFO] [stdout] 68 + .join("strict-home") [INFO] [stdout] 69 + .join(format!("{}", std::process::id())); [INFO] [stdout] 70 + let _ = std::fs::create_dir_all(&home_dir); [INFO] [stdout] 71 + home_dir.into_os_string() [INFO] [stdout] 72 + }); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> bins/src/redo.rs:587:5 [INFO] [stdout] | [INFO] [stdout] 587 | / if r.read_line(&mut first).is_ok() { [INFO] [stdout] 588 | | if !first.contains("Generated by CMake Redo generator") { [INFO] [stdout] 589 | | return deps; [INFO] [stdout] 590 | | } [INFO] [stdout] 591 | | } [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] 587 ~ if r.read_line(&mut first).is_ok() [INFO] [stdout] 588 ~ && !first.contains("Generated by CMake Redo generator") { [INFO] [stdout] 589 | return deps; [INFO] [stdout] 590 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this pattern reimplements `Option::unwrap_or` [INFO] [stdout] --> bins/src/redo_trace.rs:90:5 [INFO] [stdout] | [INFO] [stdout] 90 | / if let Some(c) = st.code() { [INFO] [stdout] 91 | | c [INFO] [stdout] 92 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 95 | | } [INFO] [stdout] | |_____^ help: replace with: `st.code().unwrap_or(201)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> bins/src/redo_trace.rs:122:9 [INFO] [stdout] | [INFO] [stdout] 122 | return trace_run_linux_x86_64(argv, envp); [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] 122 - return trace_run_linux_x86_64(argv, envp); [INFO] [stdout] 122 + trace_run_linux_x86_64(argv, envp) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: direct cast of function item into an integer [INFO] [stdout] --> bins/src/redo.rs:199:51 [INFO] [stdout] | [INFO] [stdout] 199 | libc::signal(libc::SIGINT, sigint_handler as usize); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(function_casts_as_integer)]` on by default [INFO] [stdout] help: first cast to a pointer `as *const ()` [INFO] [stdout] | [INFO] [stdout] 199 | libc::signal(libc::SIGINT, sigint_handler as *const () as usize); [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> bins/src/redo_trace.rs:482:38 [INFO] [stdout] | [INFO] [stdout] 482 | ... let a0 = regs.rdi as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `regs.rdi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> bins/src/redo_trace.rs:483:38 [INFO] [stdout] | [INFO] [stdout] 483 | ... let a1 = regs.rsi as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `regs.rsi` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> bins/src/redo_trace.rs:484:38 [INFO] [stdout] | [INFO] [stdout] 484 | ... let a2 = regs.rdx as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `regs.rdx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> bins/src/redo_trace.rs:485:38 [INFO] [stdout] | [INFO] [stdout] 485 | ... let a3 = regs.r10 as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `regs.r10` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> bins/src/redo_trace.rs:546:69 [INFO] [stdout] | [INFO] [stdout] 546 | ... } else if scno == libc::SYS_stat as i64 { [INFO] [stdout] | _______________________________________________________________^ [INFO] [stdout] 547 | | ... if let Ok(s) = ptrace_read_cstring(pid, a0, 4096) { [INFO] [stdout] 548 | | ... let p = resolve_path(&cwd, &s); [INFO] [stdout] 549 | | ... observed.insert(p.to_string_lossy().to_string()); [INFO] [stdout] 550 | | ... } [INFO] [stdout] 551 | | ... } else if scno == libc::SYS_lstat as i64 { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> bins/src/redo_trace.rs:551:70 [INFO] [stdout] | [INFO] [stdout] 551 | ... } else if scno == libc::SYS_lstat as i64 { [INFO] [stdout] | ________________________________________________________________^ [INFO] [stdout] 552 | | ... if let Ok(s) = ptrace_read_cstring(pid, a0, 4096) { [INFO] [stdout] 553 | | ... let p = resolve_path(&cwd, &s); [INFO] [stdout] 554 | | ... observed.insert(p.to_string_lossy().to_string()); [INFO] [stdout] 555 | | ... } [INFO] [stdout] 556 | | ... } else if scno == libc::SYS_fstat as i64 { [INFO] [stdout] | |_______________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:492:40 [INFO] [stdout] | [INFO] [stdout] 492 | ... if scno == libc::SYS_chdir as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_chdir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:499:47 [INFO] [stdout] | [INFO] [stdout] 499 | ... } else if scno == libc::SYS_execve as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_execve` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:504:47 [INFO] [stdout] | [INFO] [stdout] 504 | ... } else if scno == libc::SYS_open as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_open` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:513:47 [INFO] [stdout] | [INFO] [stdout] 513 | ... } else if scno == libc::SYS_openat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_openat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:525:47 [INFO] [stdout] | [INFO] [stdout] 525 | ... } else if scno == libc::SYS_access as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_access` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:530:47 [INFO] [stdout] | [INFO] [stdout] 530 | ... } else if scno == libc::SYS_newfstatat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_newfstatat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:538:47 [INFO] [stdout] | [INFO] [stdout] 538 | ... } else if scno == libc::SYS_faccessat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_faccessat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:546:47 [INFO] [stdout] | [INFO] [stdout] 546 | ... } else if scno == libc::SYS_stat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_stat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:551:47 [INFO] [stdout] | [INFO] [stdout] 551 | ... } else if scno == libc::SYS_lstat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_lstat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:556:47 [INFO] [stdout] | [INFO] [stdout] 556 | ... } else if scno == libc::SYS_fstat as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_fstat` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> bins/src/redo_trace.rs:559:47 [INFO] [stdout] | [INFO] [stdout] 559 | ... } else if scno == libc::SYS_statx as i64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `libc::SYS_statx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> bins/src/redo_trace.rs:596:16 [INFO] [stdout] | [INFO] [stdout] 596 | out.extend(trace_markers.into_iter()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/collect.rs:416:17 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 596 - out.extend(trace_markers.into_iter()); [INFO] [stdout] 596 + out.extend(trace_markers); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> bins/src/redo_trace.rs:597:16 [INFO] [stdout] | [INFO] [stdout] 597 | out.extend(observed.into_iter()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/collect.rs:416:17 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 597 - out.extend(observed.into_iter()); [INFO] [stdout] 597 + out.extend(observed); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Result::Err` [INFO] [stdout] --> bins/src/redo_trace.rs:846:26 [INFO] [stdout] | [INFO] [stdout] 846 | let rv = run_env_scrubbed(&argv, &envp).unwrap_or_else(|_| 201); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 846 - let rv = run_env_scrubbed(&argv, &envp).unwrap_or_else(|_| 201); [INFO] [stdout] 846 + let rv = run_env_scrubbed(&argv, &envp).unwrap_or(201); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> bins/src/redo_cache_server.rs:325:59 [INFO] [stdout] | [INFO] [stdout] 325 | let _ = fs::write(work_host.join(&req.deps_out0_rel), &[]); [INFO] [stdout] | ^^^ help: change this to: `[]` [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: direct cast of function item into an integer [INFO] [stdout] --> bins/src/redo_ifchange.rs:262:51 [INFO] [stdout] | [INFO] [stdout] 262 | libc::signal(libc::SIGINT, sigint_handler as usize); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(function_casts_as_integer)]` on by default [INFO] [stdout] help: first cast to a pointer `as *const ()` [INFO] [stdout] | [INFO] [stdout] 262 | libc::signal(libc::SIGINT, sigint_handler as *const () as usize); [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this manual char comparison can be written more succinctly [INFO] [stdout] --> bins/src/redo_cache_server.rs:759:46 [INFO] [stdout] | [INFO] [stdout] 759 | let req_line = req_line.trim_end_matches(|c| c == '\n' || c == '\r'); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using an array of `char`: `['\n', '\r']` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_pattern_char_comparison [INFO] [stdout] = note: `#[warn(clippy::manual_pattern_char_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> bins/src/redo_cache_server.rs:853:74 [INFO] [stdout] | [INFO] [stdout] 853 | let host = if bind.starts_with("0.0.0.0:") || bind.starts_with("::") { [INFO] [stdout] | __________________________________________________________________________^ [INFO] [stdout] 854 | | "127.0.0.1".to_string() [INFO] [stdout] 855 | | } else if bind.starts_with(':') { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> bins/src/redo_cache_server.rs:855:37 [INFO] [stdout] | [INFO] [stdout] 855 | } else if bind.starts_with(':') { [INFO] [stdout] | _____________________________________^ [INFO] [stdout] 856 | | "127.0.0.1".to_string() [INFO] [stdout] 857 | | } else { [INFO] [stdout] | |_____^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> bins/src/redo_cache_server.rs:325:59 [INFO] [stdout] | [INFO] [stdout] 325 | let _ = fs::write(work_host.join(&req.deps_out0_rel), &[]); [INFO] [stdout] | ^^^ help: change this to: `[]` [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: this manual char comparison can be written more succinctly [INFO] [stdout] --> bins/src/redo_cache_server.rs:759:46 [INFO] [stdout] | [INFO] [stdout] 759 | let req_line = req_line.trim_end_matches(|c| c == '\n' || c == '\r'); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using an array of `char`: `['\n', '\r']` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_pattern_char_comparison [INFO] [stdout] = note: `#[warn(clippy::manual_pattern_char_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> bins/src/redo_cache_server.rs:853:74 [INFO] [stdout] | [INFO] [stdout] 853 | let host = if bind.starts_with("0.0.0.0:") || bind.starts_with("::") { [INFO] [stdout] | __________________________________________________________________________^ [INFO] [stdout] 854 | | "127.0.0.1".to_string() [INFO] [stdout] 855 | | } else if bind.starts_with(':') { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> bins/src/redo_cache_server.rs:855:37 [INFO] [stdout] | [INFO] [stdout] 855 | } else if bind.starts_with(':') { [INFO] [stdout] | _____________________________________^ [INFO] [stdout] 856 | | "127.0.0.1".to_string() [INFO] [stdout] 857 | | } else { [INFO] [stdout] | |_____^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this manual char comparison can be written more succinctly [INFO] [stdout] --> bins/src/redo.rs:504:39 [INFO] [stdout] | [INFO] [stdout] 504 | let s = line.trim_end_matches(|c| c == '\n' || c == '\r').trim(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using an array of `char`: `['\n', '\r']` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_pattern_char_comparison [INFO] [stdout] = note: `#[warn(clippy::manual_pattern_char_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> bins/src/redo.rs:587:5 [INFO] [stdout] | [INFO] [stdout] 587 | / if r.read_line(&mut first).is_ok() { [INFO] [stdout] 588 | | if !first.contains("Generated by CMake Redo generator") { [INFO] [stdout] 589 | | return deps; [INFO] [stdout] 590 | | } [INFO] [stdout] 591 | | } [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] 587 ~ if r.read_line(&mut first).is_ok() [INFO] [stdout] 588 ~ && !first.contains("Generated by CMake Redo generator") { [INFO] [stdout] 589 | return deps; [INFO] [stdout] 590 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: direct cast of function item into an integer [INFO] [stdout] --> bins/src/redo_ifchange.rs:262:51 [INFO] [stdout] | [INFO] [stdout] 262 | libc::signal(libc::SIGINT, sigint_handler as usize); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(function_casts_as_integer)]` on by default [INFO] [stdout] help: first cast to a pointer `as *const ()` [INFO] [stdout] | [INFO] [stdout] 262 | libc::signal(libc::SIGINT, sigint_handler as *const () as usize); [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: direct cast of function item into an integer [INFO] [stdout] --> bins/src/redo.rs:199:51 [INFO] [stdout] | [INFO] [stdout] 199 | libc::signal(libc::SIGINT, sigint_handler as usize); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(function_casts_as_integer)]` on by default [INFO] [stdout] help: first cast to a pointer `as *const ()` [INFO] [stdout] | [INFO] [stdout] 199 | libc::signal(libc::SIGINT, sigint_handler as *const () as usize); [INFO] [stdout] | ++++++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> bins/src/redo_log.rs:157:50 [INFO] [stdout] | [INFO] [stdout] 157 | writeln!(out, "{}redo {}{}{}{}", color, "", ansi.bold, text, ansi.plain)?; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stdout] = note: `#[warn(clippy::write_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 157 - writeln!(out, "{}redo {}{}{}{}", color, "", ansi.bold, text, ansi.plain)?; [INFO] [stdout] 157 + writeln!(out, "{}redo {}{}{}", color, ansi.bold, text, ansi.plain)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually constructing a nul-terminated string [INFO] [stdout] --> bins/src/redo_log.rs:170:41 [INFO] [stdout] | [INFO] [stdout] 170 | let dn = libc::open(b"/dev/null\0".as_ptr() as *const _, libc::O_WRONLY); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: use a `c""` literal: `c"/dev/null"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_c_str_literals [INFO] [stdout] = note: `#[warn(clippy::manual_c_str_literals)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> bins/src/redo_log.rs:207:22 [INFO] [stdout] | [INFO] [stdout] 207 | ack_fd = a["--ack-fd=".len()..].parse::().ok(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> bins/src/redo_log.rs:206:9 [INFO] [stdout] | [INFO] [stdout] 206 | if a.starts_with("--ack-fd=") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 206 ~ if let Some() = a.strip_prefix("--ack-fd=") { [INFO] [stdout] 207 ~ ack_fd = .parse::().ok(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> bins/src/redo_log.rs:211:22 [INFO] [stdout] | [INFO] [stdout] 211 | ack_fd = args.get(0).and_then(|v| v.parse::().ok()); [INFO] [stdout] | ^^^^^^^^^^^ help: try: `args.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: this function has too many arguments (16/7) [INFO] [stdout] --> bins/src/redo_log.rs:406:1 [INFO] [stdout] | [INFO] [stdout] 406 | / fn catlog_stdin( [INFO] [stdout] 407 | | topdir: &Path, [INFO] [stdout] 408 | | top_arg: &str, [INFO] [stdout] 409 | | recursive: bool, [INFO] [stdout] ... | [INFO] [stdout] 422 | | out: &mut dyn Write, [INFO] [stdout] 423 | | ) -> anyhow::Result<()> { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> bins/src/redo_log.rs:688:9 [INFO] [stdout] | [INFO] [stdout] 688 | / if follow { [INFO] [stdout] 689 | | if maybe_print_status(status, start, &mut last_status, *total_lines, top_arg, progress)? { [INFO] [stdout] 690 | | status_active = true; [INFO] [stdout] 691 | | } [INFO] [stdout] 692 | | } [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] 688 ~ if follow [INFO] [stdout] 689 ~ && maybe_print_status(status, start, &mut last_status, *total_lines, top_arg, progress)? { [INFO] [stdout] 690 | status_active = true; [INFO] [stdout] 691 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (17/7) [INFO] [stdout] --> bins/src/redo_log.rs:709:1 [INFO] [stdout] | [INFO] [stdout] 709 | / fn catlog( [INFO] [stdout] 710 | | topdir: &Path, [INFO] [stdout] 711 | | top_arg: &str, [INFO] [stdout] 712 | | t: &str, [INFO] [stdout] ... | [INFO] [stdout] 726 | | out: &mut dyn Write, [INFO] [stdout] 727 | | ) -> anyhow::Result<()> { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> bins/src/redo_log.rs:1334:5 [INFO] [stdout] | [INFO] [stdout] 1334 | / if r.read_line(&mut first).is_ok() { [INFO] [stdout] 1335 | | if !first.contains("Generated by CMake Redo generator") { [INFO] [stdout] 1336 | | return deps; [INFO] [stdout] 1337 | | } [INFO] [stdout] 1338 | | } [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] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1334 ~ if r.read_line(&mut first).is_ok() [INFO] [stdout] 1335 ~ && !first.contains("Generated by CMake Redo generator") { [INFO] [stdout] 1336 | return deps; [INFO] [stdout] 1337 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this manual char comparison can be written more succinctly [INFO] [stdout] --> bins/src/redo_log.rs:1484:31 [INFO] [stdout] | [INFO] [stdout] 1484 | .trim_end_matches(|c| c == '\n' || c == '\r') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using an array of `char`: `['\n', '\r']` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_pattern_char_comparison [INFO] [stdout] = note: `#[warn(clippy::manual_pattern_char_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: call to `reserve` immediately after creation [INFO] [stdout] --> bins/src/redo_browse.rs:166:9 [INFO] [stdout] | [INFO] [stdout] 166 | / let mut by_degree: Vec<(usize, i64)> = Vec::new(); [INFO] [stdout] 167 | | by_degree.reserve(self.nodes_by_id.len()); [INFO] [stdout] | |__________________________________________________^ help: consider using `Vec::with_capacity(/* Space hint */)`: `let mut by_degree: Vec<(usize, i64)> = Vec::with_capacity(self.nodes_by_id.len());` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#reserve_after_initialization [INFO] [stdout] = note: `#[warn(clippy::reserve_after_initialization)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> bins/src/redo_browse.rs:259:9 [INFO] [stdout] | [INFO] [stdout] 259 | links.sort_by(|a, b| (a.source, a.target).cmp(&(b.source, b.target))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 259 - links.sort_by(|a, b| (a.source, a.target).cmp(&(b.source, b.target))); [INFO] [stdout] 259 + links.sort_by_key(|a| (a.source, a.target)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> bins/src/redo_log.rs:157:50 [INFO] [stdout] | [INFO] [stdout] 157 | writeln!(out, "{}redo {}{}{}{}", color, "", ansi.bold, text, ansi.plain)?; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_literal [INFO] [stdout] = note: `#[warn(clippy::write_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 157 - writeln!(out, "{}redo {}{}{}{}", color, "", ansi.bold, text, ansi.plain)?; [INFO] [stdout] 157 + writeln!(out, "{}redo {}{}{}", color, ansi.bold, text, ansi.plain)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually constructing a nul-terminated string [INFO] [stdout] --> bins/src/redo_log.rs:170:41 [INFO] [stdout] | [INFO] [stdout] 170 | let dn = libc::open(b"/dev/null\0".as_ptr() as *const _, libc::O_WRONLY); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: use a `c""` literal: `c"/dev/null"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_c_str_literals [INFO] [stdout] = note: `#[warn(clippy::manual_c_str_literals)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> bins/src/redo_log.rs:207:22 [INFO] [stdout] | [INFO] [stdout] 207 | ack_fd = a["--ack-fd=".len()..].parse::().ok(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> bins/src/redo_log.rs:206:9 [INFO] [stdout] | [INFO] [stdout] 206 | if a.starts_with("--ack-fd=") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 206 ~ if let Some() = a.strip_prefix("--ack-fd=") { [INFO] [stdout] 207 ~ ack_fd = .parse::().ok(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> bins/src/redo_log.rs:211:22 [INFO] [stdout] | [INFO] [stdout] 211 | ack_fd = args.get(0).and_then(|v| v.parse::().ok()); [INFO] [stdout] | ^^^^^^^^^^^ help: try: `args.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: this function has too many arguments (16/7) [INFO] [stdout] --> bins/src/redo_log.rs:406:1 [INFO] [stdout] | [INFO] [stdout] 406 | / fn catlog_stdin( [INFO] [stdout] 407 | | topdir: &Path, [INFO] [stdout] 408 | | top_arg: &str, [INFO] [stdout] 409 | | recursive: bool, [INFO] [stdout] ... | [INFO] [stdout] 422 | | out: &mut dyn Write, [INFO] [stdout] 423 | | ) -> anyhow::Result<()> { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> bins/src/redo_log.rs:688:9 [INFO] [stdout] | [INFO] [stdout] 688 | / if follow { [INFO] [stdout] 689 | | if maybe_print_status(status, start, &mut last_status, *total_lines, top_arg, progress)? { [INFO] [stdout] 690 | | status_active = true; [INFO] [stdout] 691 | | } [INFO] [stdout] 692 | | } [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] 688 ~ if follow [INFO] [stdout] 689 ~ && maybe_print_status(status, start, &mut last_status, *total_lines, top_arg, progress)? { [INFO] [stdout] 690 | status_active = true; [INFO] [stdout] 691 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (17/7) [INFO] [stdout] --> bins/src/redo_log.rs:709:1 [INFO] [stdout] | [INFO] [stdout] 709 | / fn catlog( [INFO] [stdout] 710 | | topdir: &Path, [INFO] [stdout] 711 | | top_arg: &str, [INFO] [stdout] 712 | | t: &str, [INFO] [stdout] ... | [INFO] [stdout] 726 | | out: &mut dyn Write, [INFO] [stdout] 727 | | ) -> anyhow::Result<()> { [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> bins/src/redo_log.rs:1334:5 [INFO] [stdout] | [INFO] [stdout] 1334 | / if r.read_line(&mut first).is_ok() { [INFO] [stdout] 1335 | | if !first.contains("Generated by CMake Redo generator") { [INFO] [stdout] 1336 | | return deps; [INFO] [stdout] 1337 | | } [INFO] [stdout] 1338 | | } [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] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 1334 ~ if r.read_line(&mut first).is_ok() [INFO] [stdout] 1335 ~ && !first.contains("Generated by CMake Redo generator") { [INFO] [stdout] 1336 | return deps; [INFO] [stdout] 1337 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this manual char comparison can be written more succinctly [INFO] [stdout] --> bins/src/redo_log.rs:1484:31 [INFO] [stdout] | [INFO] [stdout] 1484 | .trim_end_matches(|c| c == '\n' || c == '\r') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using an array of `char`: `['\n', '\r']` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_pattern_char_comparison [INFO] [stdout] = note: `#[warn(clippy::manual_pattern_char_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.70s [INFO] running `Command { std: "docker" "inspect" "92b8d98d50e46bcd92e7c0e3ff532366e56b9de903cdc9efb49f59148959974d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "92b8d98d50e46bcd92e7c0e3ff532366e56b9de903cdc9efb49f59148959974d", kill_on_drop: false }` [INFO] [stdout] 92b8d98d50e46bcd92e7c0e3ff532366e56b9de903cdc9efb49f59148959974d