[INFO] cloning repository https://github.com/Tyrcnex/tetrizz_spin_v1 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Tyrcnex/tetrizz_spin_v1" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FTyrcnex%2Ftetrizz_spin_v1", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FTyrcnex%2Ftetrizz_spin_v1'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] f51000f7eca9ef06856af455091fea8fd6ff41f4 [INFO] linting Tyrcnex/tetrizz_spin_v1 against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FTyrcnex%2Ftetrizz_spin_v1" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] removed /workspace/builds/worker-6-tc1/source/.cargo/config.toml [INFO] started tweaking git repo https://github.com/Tyrcnex/tetrizz_spin_v1 [INFO] finished tweaking git repo https://github.com/Tyrcnex/tetrizz_spin_v1 [INFO] tweaked toml for git repo https://github.com/Tyrcnex/tetrizz_spin_v1 written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Tyrcnex/tetrizz_spin_v1 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/Tyrcnex/tetrizz_spin_v1 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: unused manifest key: profile.bmark.debuginfo-level [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded puffin_http v0.16.1 [INFO] [stderr] Downloaded redox_syscall v0.5.13 [INFO] [stderr] Downloaded lz4_flex v0.11.5 [INFO] [stderr] Downloaded ciborium-io v0.2.2 [INFO] [stderr] Downloaded enumset_derive v0.11.0 [INFO] [stderr] Downloaded cast v0.3.0 [INFO] [stderr] Downloaded ciborium-ll v0.2.2 [INFO] [stderr] Downloaded enum-map-derive v0.17.0 [INFO] [stderr] Downloaded oorandom v11.1.5 [INFO] [stderr] Downloaded plotters-svg v0.3.7 [INFO] [stderr] Downloaded anes v0.1.6 [INFO] [stderr] Downloaded ciborium v0.2.2 [INFO] [stderr] Downloaded clap v4.5.40 [INFO] [stderr] Downloaded criterion-plot v0.5.0 [INFO] [stderr] Downloaded rand v0.9.1 [INFO] [stderr] Downloaded plotters v0.3.7 [INFO] [stderr] Downloaded itertools v0.14.0 [INFO] [stderr] Downloaded plotters-backend v0.3.7 [INFO] [stderr] Downloaded tinytemplate v1.2.1 [INFO] [stderr] Downloaded criterion v0.6.0 [INFO] [stderr] Downloaded clap_builder v4.5.40 [INFO] [stderr] Downloaded rustc-demangle v0.1.25 [INFO] [stderr] Downloaded mintex v0.1.4 [INFO] [stderr] Downloaded enumset v1.1.6 [INFO] [stderr] Downloaded enum-map v2.7.3 [INFO] [stderr] Downloaded puffin v0.19.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 3f497c9bf99f2dd13f2030f1a98bc5cfe357e0e32fb97219f0829169fb0e617c [INFO] running `Command { std: "docker" "start" "-a" "3f497c9bf99f2dd13f2030f1a98bc5cfe357e0e32fb97219f0829169fb0e617c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3f497c9bf99f2dd13f2030f1a98bc5cfe357e0e32fb97219f0829169fb0e617c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3f497c9bf99f2dd13f2030f1a98bc5cfe357e0e32fb97219f0829169fb0e617c", kill_on_drop: false }` [INFO] [stdout] 3f497c9bf99f2dd13f2030f1a98bc5cfe357e0e32fb97219f0829169fb0e617c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] c229b616005e18c5d65532d81524196875f32838a3c67ee119c28d70419191df [INFO] running `Command { std: "docker" "start" "-a" "c229b616005e18c5d65532d81524196875f32838a3c67ee119c28d70419191df", kill_on_drop: false }` [INFO] [stderr] warning: unused manifest key: profile.bmark.debuginfo-level [INFO] [stderr] Compiling proc-macro2 v1.0.95 [INFO] [stderr] Compiling unicode-ident v1.0.18 [INFO] [stderr] Checking cfg-if v1.0.1 [INFO] [stderr] Compiling autocfg v1.5.0 [INFO] [stderr] Compiling libc v0.2.174 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Compiling parking_lot_core v0.9.11 [INFO] [stderr] Checking memchr v2.7.5 [INFO] [stderr] Compiling serde_json v1.0.140 [INFO] [stderr] Checking smallvec v1.15.1 [INFO] [stderr] Compiling fnv v1.0.7 [INFO] [stderr] Compiling getrandom v0.3.3 [INFO] [stderr] Compiling zerocopy v0.8.26 [INFO] [stderr] Compiling ident_case v1.0.1 [INFO] [stderr] Checking scopeguard v1.2.0 [INFO] [stderr] Compiling object v0.36.7 [INFO] [stderr] Compiling anyhow v1.0.98 [INFO] [stderr] Compiling rayon-core v1.12.1 [INFO] [stderr] Checking itoa v1.0.15 [INFO] [stderr] Checking ryu v1.0.20 [INFO] [stderr] Checking itertools v0.10.5 [INFO] [stderr] Checking half v2.6.0 [INFO] [stderr] Checking clap_lex v0.7.5 [INFO] [stderr] Checking regex-syntax v0.8.5 [INFO] [stderr] Checking plotters-backend v0.3.7 [INFO] [stderr] Checking adler2 v2.0.1 [INFO] [stderr] Checking gimli v0.31.1 [INFO] [stderr] Checking anstyle v1.0.11 [INFO] [stderr] Checking ciborium-io v0.2.2 [INFO] [stderr] Checking miniz_oxide v0.8.9 [INFO] [stderr] Checking rustc-demangle v0.1.25 [INFO] [stderr] Checking once_cell v1.21.3 [INFO] [stderr] Checking ciborium-ll v0.2.2 [INFO] [stderr] Checking plotters-svg v0.3.7 [INFO] [stderr] Compiling lock_api v0.4.13 [INFO] [stderr] Checking crossbeam-epoch v0.9.18 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Checking clap_builder v4.5.40 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Checking cast v0.3.0 [INFO] [stderr] Checking byteorder v1.5.0 [INFO] [stderr] Checking lz4_flex v0.11.5 [INFO] [stderr] Compiling syn v2.0.104 [INFO] [stderr] Checking crossbeam-deque v0.8.6 [INFO] [stderr] Checking same-file v1.0.6 [INFO] [stderr] Checking crossbeam-channel v0.5.15 [INFO] [stderr] Checking itertools v0.13.0 [INFO] [stderr] Checking walkdir v2.5.0 [INFO] [stderr] Checking rustc-hash v1.1.0 [INFO] [stderr] Checking lazy_static v1.5.0 [INFO] [stderr] Checking oorandom v11.1.5 [INFO] [stderr] Checking thousands v0.2.0 [INFO] [stderr] Checking anes v0.1.6 [INFO] [stderr] Checking log v0.4.27 [INFO] [stderr] Checking mintex v0.1.4 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Checking itertools v0.14.0 [INFO] [stderr] Checking rustc-hash v2.1.1 [INFO] [stderr] Checking rand_core v0.9.3 [INFO] [stderr] Checking parking_lot v0.12.4 [INFO] [stderr] Checking rayon v1.10.0 [INFO] [stderr] Checking criterion-plot v0.5.0 [INFO] [stderr] Checking plotters v0.3.7 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Checking clap v4.5.40 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking addr2line v0.24.2 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Checking rand v0.9.1 [INFO] [stderr] Compiling darling_core v0.20.11 [INFO] [stderr] Checking backtrace v0.3.75 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling enum-map-derive v0.17.0 [INFO] [stderr] Checking enum-map v2.7.3 [INFO] [stderr] Compiling darling_macro v0.20.11 [INFO] [stderr] Compiling darling v0.20.11 [INFO] [stderr] Compiling enumset_derive v0.11.0 [INFO] [stderr] Checking enumset v1.1.6 [INFO] [stderr] Checking bincode v1.3.3 [INFO] [stderr] Checking ciborium v0.2.2 [INFO] [stderr] Checking puffin v0.19.1 [INFO] [stderr] Checking tinytemplate v1.2.1 [INFO] [stderr] Checking dhat v0.3.3 [INFO] [stderr] Checking puffin_http v0.16.1 [INFO] [stderr] Checking criterion v0.6.0 [INFO] [stderr] Checking tetrizz v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: variant `moveLeft` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:493:5 [INFO] [stdout] | [INFO] [stdout] 493 | moveLeft, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `MoveLeft` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `moveRight` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:494:5 [INFO] [stdout] | [INFO] [stdout] 494 | moveRight, [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `MoveRight` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `softDrop` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:495:5 [INFO] [stdout] | [INFO] [stdout] 495 | softDrop, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case (notice the capitalization): `SoftDrop` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `rotateCW` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:496:5 [INFO] [stdout] | [INFO] [stdout] 496 | rotateCW, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `RotateCw` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `rotateCCW` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:497:5 [INFO] [stdout] | [INFO] [stdout] 497 | rotateCCW, [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `RotateCcw` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `rotate180` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:498:5 [INFO] [stdout] | [INFO] [stdout] 498 | rotate180, [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `Rotate180` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `hold` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:499:5 [INFO] [stdout] | [INFO] [stdout] 499 | hold, [INFO] [stdout] | ^^^^ help: convert the identifier to upper camel case: `Hold` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `hardDrop` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:500:5 [INFO] [stdout] | [INFO] [stdout] 500 | hardDrop [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `HardDrop` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `moveLeft` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:493:5 [INFO] [stdout] | [INFO] [stdout] 493 | moveLeft, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `MoveLeft` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `moveRight` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:494:5 [INFO] [stdout] | [INFO] [stdout] 494 | moveRight, [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `MoveRight` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `softDrop` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:495:5 [INFO] [stdout] | [INFO] [stdout] 495 | softDrop, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case (notice the capitalization): `SoftDrop` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `rotateCW` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:496:5 [INFO] [stdout] | [INFO] [stdout] 496 | rotateCW, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `RotateCw` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `rotateCCW` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:497:5 [INFO] [stdout] | [INFO] [stdout] 497 | rotateCCW, [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `RotateCcw` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `rotate180` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:498:5 [INFO] [stdout] | [INFO] [stdout] 498 | rotate180, [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `Rotate180` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `hold` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:499:5 [INFO] [stdout] | [INFO] [stdout] 499 | hold, [INFO] [stdout] | ^^^^ help: convert the identifier to upper camel case: `Hold` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `hardDrop` should have an upper camel case name [INFO] [stdout] --> src/movegen.rs:500:5 [INFO] [stdout] | [INFO] [stdout] 500 | hardDrop [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `HardDrop` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `super::beam_search::*` [INFO] [stdout] --> src/lib.rs:10:9 [INFO] [stdout] | [INFO] [stdout] 10 | use super::beam_search::*; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `super::eval::Eval` [INFO] [stdout] --> src/lib.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | use super::eval::Eval; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `itertools::Itertools` [INFO] [stdout] --> src/lib.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | use itertools::Itertools; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `got` [INFO] [stdout] --> src/data.rs:172:17 [INFO] [stdout] | [INFO] [stdout] 172 | let got = match got { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_got` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `got` [INFO] [stdout] --> src/data.rs:172:17 [INFO] [stdout] | [INFO] [stdout] 172 | let got = match got { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_got` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `now` [INFO] [stdout] --> src/movegen.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | let now = std::time::Instant::now(); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_now` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `now` [INFO] [stdout] --> src/movegen.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | let now = std::time::Instant::now(); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_now` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `gen_queue` is never used [INFO] [stdout] --> src/lib.rs:16:8 [INFO] [stdout] | [INFO] [stdout] 16 | fn gen_queue(bags: u8) -> (Piece, Vec) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/data.rs:200:16 [INFO] [stdout] | [INFO] [stdout] 200 | if x < 0 || x > 9 || y < 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: use: `!(0..=9).contains(&x)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/data.rs:251:12 [INFO] [stdout] | [INFO] [stdout] 251 | if !p.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `p.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `p` after checking its variant with `is_none` [INFO] [stdout] --> src/data.rs:252:25 [INFO] [stdout] | [INFO] [stdout] 251 | if !p.is_none() { [INFO] [stdout] | ----------- the check is happening here [INFO] [stdout] 252 | game.hold = p.unwrap(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-canonical implementation of `partial_cmp` on an `Ord` type [INFO] [stdout] --> src/beam_search.rs:22:1 [INFO] [stdout] | [INFO] [stdout] 22 | / impl PartialOrd for Node { [INFO] [stdout] 23 | | fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 24 | | other.score.partial_cmp(&self.score) [INFO] [stdout] 25 | | } [INFO] [stdout] 26 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#non_canonical_partial_ord_impl [INFO] [stdout] = note: `#[warn(clippy::non_canonical_partial_ord_impl)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 23 - fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 24 - other.score.partial_cmp(&self.score) [INFO] [stdout] 25 - } [INFO] [stdout] 23 + fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/beam_search.rs:57:12 [INFO] [stdout] | [INFO] [stdout] 57 | if next.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next.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: manual arithmetic check found [INFO] [stdout] --> src/eval.rs:114:24 [INFO] [stdout] | [INFO] [stdout] 114 | let b2b_diff = if game.b2b > root.b2b { game.b2b - root.b2b } else { 0 }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `game.b2b.saturating_sub(root.b2b)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/data.rs:200:16 [INFO] [stdout] | [INFO] [stdout] 200 | if x < 0 || x > 9 || y < 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: use: `!(0..=9).contains(&x)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/data.rs:251:12 [INFO] [stdout] | [INFO] [stdout] 251 | if !p.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `p.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `p` after checking its variant with `is_none` [INFO] [stdout] --> src/data.rs:252:25 [INFO] [stdout] | [INFO] [stdout] 251 | if !p.is_none() { [INFO] [stdout] | ----------- the check is happening here [INFO] [stdout] 252 | game.hold = p.unwrap(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-canonical implementation of `partial_cmp` on an `Ord` type [INFO] [stdout] --> src/beam_search.rs:22:1 [INFO] [stdout] | [INFO] [stdout] 22 | / impl PartialOrd for Node { [INFO] [stdout] 23 | | fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 24 | | other.score.partial_cmp(&self.score) [INFO] [stdout] 25 | | } [INFO] [stdout] 26 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#non_canonical_partial_ord_impl [INFO] [stdout] = note: `#[warn(clippy::non_canonical_partial_ord_impl)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 23 - fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 24 - other.score.partial_cmp(&self.score) [INFO] [stdout] 25 - } [INFO] [stdout] 23 + fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/beam_search.rs:57:12 [INFO] [stdout] | [INFO] [stdout] 57 | if next.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be replaced by its body itself [INFO] [stdout] --> src/movegen.rs:120:39 [INFO] [stdout] | [INFO] [stdout] 120 | let actual_spin: Vec<[u64; 10]> = match piece { [INFO] [stdout] | _______________________________________^ [INFO] [stdout] ... | [INFO] [stdout] 151 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] help: consider using the match body instead [INFO] [stdout] | [INFO] [stdout] 120 ~ let actual_spin: Vec<[u64; 10]> = new_maps.iter().map(|map| [0,1,2,3,4,5,6,7,8,9].map(|x| [INFO] [stdout] 121 + map.obstructed.get(x - 1).copied().unwrap_or(FULL_HEIGHT) [INFO] [stdout] 122 + & map.obstructed.get(x + 1).copied().unwrap_or(FULL_HEIGHT) [INFO] [stdout] 123 + & (map.obstructed[x] >> 1) [INFO] [stdout] 124 + & map.spin_loc[x] [INFO] [stdout] 125 ~ )).collect(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual arithmetic check found [INFO] [stdout] --> src/eval.rs:114:24 [INFO] [stdout] | [INFO] [stdout] 114 | let b2b_diff = if game.b2b > root.b2b { game.b2b - root.b2b } else { 0 }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `game.b2b.saturating_sub(root.b2b)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/movegen.rs:251:28 [INFO] [stdout] | [INFO] [stdout] 251 | obstructed[x as usize] |= c; [INFO] [stdout] | ^^^^^^^^^^ help: try: `x` [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: this match could be replaced by its body itself [INFO] [stdout] --> src/movegen.rs:120:39 [INFO] [stdout] | [INFO] [stdout] 120 | let actual_spin: Vec<[u64; 10]> = match piece { [INFO] [stdout] | _______________________________________^ [INFO] [stdout] ... | [INFO] [stdout] 151 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] help: consider using the match body instead [INFO] [stdout] | [INFO] [stdout] 120 ~ let actual_spin: Vec<[u64; 10]> = new_maps.iter().map(|map| [0,1,2,3,4,5,6,7,8,9].map(|x| [INFO] [stdout] 121 + map.obstructed.get(x - 1).copied().unwrap_or(FULL_HEIGHT) [INFO] [stdout] 122 + & map.obstructed.get(x + 1).copied().unwrap_or(FULL_HEIGHT) [INFO] [stdout] 123 + & (map.obstructed[x] >> 1) [INFO] [stdout] 124 + & map.spin_loc[x] [INFO] [stdout] 125 ~ )).collect(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/movegen.rs:380:12 [INFO] [stdout] | [INFO] [stdout] 380 | if x < 0 || x > 9 || y < 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: use: `!(0..=9).contains(&x)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/movegen.rs:407:11 [INFO] [stdout] | [INFO] [stdout] 407 | while nodes_to_search.len() > 0 && !found { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!nodes_to_search.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: using `clone` on type `KeyNode` which implements the `Copy` trait [INFO] [stdout] --> src/movegen.rs:445:38 [INFO] [stdout] | [INFO] [stdout] 445 | new_nodes.insert(new_node.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `new_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `KeyNode` which implements the `Copy` trait [INFO] [stdout] --> src/movegen.rs:461:45 [INFO] [stdout] | [INFO] [stdout] 461 | let mut queue_keys: Vec = vec![found_node.clone()]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `found_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/movegen.rs:251:28 [INFO] [stdout] | [INFO] [stdout] 251 | obstructed[x as usize] |= c; [INFO] [stdout] | ^^^^^^^^^^ help: try: `x` [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: using `clone` on type `KeyNode` which implements the `Copy` trait [INFO] [stdout] --> src/movegen.rs:464:25 [INFO] [stdout] | [INFO] [stdout] 464 | queue_keys.push(found_node.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `found_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Piece` which implements the `Copy` trait [INFO] [stdout] --> src/genetic.rs:35:25 [INFO] [stdout] | [INFO] [stdout] 35 | let test_hold = hold.clone(); [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `hold` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/movegen.rs:380:12 [INFO] [stdout] | [INFO] [stdout] 380 | if x < 0 || x > 9 || y < 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: use: `!(0..=9).contains(&x)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/movegen.rs:407:11 [INFO] [stdout] | [INFO] [stdout] 407 | while nodes_to_search.len() > 0 && !found { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!nodes_to_search.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: using `clone` on type `Piece` which implements the `Copy` trait [INFO] [stdout] --> src/genetic.rs:134:61 [INFO] [stdout] | [INFO] [stdout] 134 | agent.fitness = eval_fitness(queue.clone(), hold.clone(), agent.weights); [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `hold` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `KeyNode` which implements the `Copy` trait [INFO] [stdout] --> src/movegen.rs:445:38 [INFO] [stdout] | [INFO] [stdout] 445 | new_nodes.insert(new_node.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `new_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `KeyNode` which implements the `Copy` trait [INFO] [stdout] --> src/movegen.rs:461:45 [INFO] [stdout] | [INFO] [stdout] 461 | let mut queue_keys: Vec = vec![found_node.clone()]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `found_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `KeyNode` which implements the `Copy` trait [INFO] [stdout] --> src/movegen.rs:464:25 [INFO] [stdout] | [INFO] [stdout] 464 | queue_keys.push(found_node.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `found_node` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Piece` which implements the `Copy` trait [INFO] [stdout] --> src/genetic.rs:35:25 [INFO] [stdout] | [INFO] [stdout] 35 | let test_hold = hold.clone(); [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `hold` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Piece` which implements the `Copy` trait [INFO] [stdout] --> src/genetic.rs:134:61 [INFO] [stdout] | [INFO] [stdout] 134 | agent.fitness = eval_fitness(queue.clone(), hold.clone(), agent.weights); [INFO] [stdout] | ^^^^^^^^^^^^ help: try removing the `clone` call: `hold` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: for loop over a single element [INFO] [stdout] --> benches/movegen_all.rs:8:9 [INFO] [stdout] | [INFO] [stdout] 8 | / for p in [Piece::I] { [INFO] [stdout] 9 | | movegen_piece(&game.board, p); [INFO] [stdout] 10 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_element_loop [INFO] [stdout] = note: `#[warn(clippy::single_element_loop)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 8 ~ { [INFO] [stdout] 9 + let p = Piece::I; [INFO] [stdout] 10 + movegen_piece(&game.board, p); [INFO] [stdout] 11 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `keynodes` [INFO] [stdout] --> src/bin/keygen.rs:80:24 [INFO] [stdout] | [INFO] [stdout] 80 | let (mut keys, keynodes) = keypress_generation(&parsed.game.board, found_move.clone()); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_keynodes` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | let mut rng = rand::rng(); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `rng` [INFO] [stdout] --> src/main.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | let mut rng = rand::rng(); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rng` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `keynodes` [INFO] [stdout] --> src/bin/keygen.rs:80:24 [INFO] [stdout] | [INFO] [stdout] 80 | let (mut keys, keynodes) = keypress_generation(&parsed.game.board, found_move.clone()); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_keynodes` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `ok().expect()` on a `Result` value [INFO] [stdout] --> src/bin/keygen.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | / io::stdin() [INFO] [stdout] 28 | | .read_line(&mut input) [INFO] [stdout] 29 | | .ok() [INFO] [stdout] 30 | | .expect("lol wtf is this"); [INFO] [stdout] | |______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stdout] = note: `#[warn(clippy::ok_expect)]` on by default [INFO] [stdout] help: call `expect()` directly on the `Result` [INFO] [stdout] | [INFO] [stdout] 28 - .read_line(&mut input) [INFO] [stdout] 29 - .ok() [INFO] [stdout] 30 - .expect("lol wtf is this"); [INFO] [stdout] 28 + .read_line(&mut input).expect("lol wtf is this"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `ok().expect()` on a `Result` value [INFO] [stdout] --> src/bin/keygen.rs:27:9 [INFO] [stdout] | [INFO] [stdout] 27 | / io::stdin() [INFO] [stdout] 28 | | .read_line(&mut input) [INFO] [stdout] 29 | | .ok() [INFO] [stdout] 30 | | .expect("lol wtf is this"); [INFO] [stdout] | |______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stdout] = note: `#[warn(clippy::ok_expect)]` on by default [INFO] [stdout] help: call `expect()` directly on the `Result` [INFO] [stdout] | [INFO] [stdout] 28 - .read_line(&mut input) [INFO] [stdout] 29 - .ok() [INFO] [stdout] 30 - .expect("lol wtf is this"); [INFO] [stdout] 28 + .read_line(&mut input).expect("lol wtf is this"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/main.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | let mut rng = rand::rng(); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `rng` [INFO] [stdout] --> src/main.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | let mut rng = rand::rng(); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rng` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `PieceLocation` which implements the `Copy` trait [INFO] [stdout] --> src/bin/keygen.rs:80:76 [INFO] [stdout] | [INFO] [stdout] 80 | let (mut keys, keynodes) = keypress_generation(&parsed.game.board, found_move.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `found_move` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `PieceLocation` which implements the `Copy` trait [INFO] [stdout] --> src/bin/keygen.rs:80:76 [INFO] [stdout] | [INFO] [stdout] 80 | let (mut keys, keynodes) = keypress_generation(&parsed.game.board, found_move.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `found_move` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 24.97s [INFO] running `Command { std: "docker" "inspect" "c229b616005e18c5d65532d81524196875f32838a3c67ee119c28d70419191df", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c229b616005e18c5d65532d81524196875f32838a3c67ee119c28d70419191df", kill_on_drop: false }` [INFO] [stdout] c229b616005e18c5d65532d81524196875f32838a3c67ee119c28d70419191df