[INFO] cloning repository https://github.com/edavisau/chess-tui [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/edavisau/chess-tui" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fedavisau%2Fchess-tui", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fedavisau%2Fchess-tui'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 4ed9b8f71ee4183a4f97a896dded387188226db0 [INFO] linting edavisau/chess-tui against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fedavisau%2Fchess-tui" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/edavisau/chess-tui [INFO] finished tweaking git repo https://github.com/edavisau/chess-tui [INFO] tweaked toml for git repo https://github.com/edavisau/chess-tui written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/edavisau/chess-tui 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/edavisau/chess-tui already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded instant v0.1.11 [INFO] [stderr] Downloaded crossterm_winapi v0.8.0 [INFO] [stderr] Downloaded signal-hook-mio v0.2.1 [INFO] [stderr] Downloaded tui v0.16.0 [INFO] [stderr] Downloaded crossterm v0.20.0 [INFO] [stderr] Downloaded libc v0.2.103 [INFO] [stderr] Downloaded signal-hook v0.3.10 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 24b95b4a2eaa5f86d5d06f87b4fa56ea3a0cc06b6e69e989cdc2c1bbf913cf32 [INFO] running `Command { std: "docker" "start" "-a" "24b95b4a2eaa5f86d5d06f87b4fa56ea3a0cc06b6e69e989cdc2c1bbf913cf32", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "24b95b4a2eaa5f86d5d06f87b4fa56ea3a0cc06b6e69e989cdc2c1bbf913cf32", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "24b95b4a2eaa5f86d5d06f87b4fa56ea3a0cc06b6e69e989cdc2c1bbf913cf32", kill_on_drop: false }` [INFO] [stdout] 24b95b4a2eaa5f86d5d06f87b4fa56ea3a0cc06b6e69e989cdc2c1bbf913cf32 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] b11e3c276fad29afcbf9a4141f7476f53f83053a27c277c3f4f2f5c658e99144 [INFO] running `Command { std: "docker" "start" "-a" "b11e3c276fad29afcbf9a4141f7476f53f83053a27c277c3f4f2f5c658e99144", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.103 [INFO] [stderr] Compiling signal-hook v0.3.10 [INFO] [stderr] Checking unicode-width v0.1.9 [INFO] [stderr] Checking unicode-segmentation v1.8.0 [INFO] [stderr] Checking yaml-rust v0.3.5 [INFO] [stderr] Checking either v1.6.1 [INFO] [stderr] Checking vec_map v0.8.2 [INFO] [stderr] Checking instant v0.1.11 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking itertools v0.10.1 [INFO] [stderr] Checking signal-hook-registry v1.4.0 [INFO] [stderr] Checking parking_lot_core v0.8.5 [INFO] [stderr] Checking mio v0.7.13 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking clap v2.33.3 [INFO] [stderr] Checking parking_lot v0.11.2 [INFO] [stderr] Checking signal-hook-mio v0.2.1 [INFO] [stderr] Checking crossterm v0.20.0 [INFO] [stderr] Checking tui v0.16.0 [INFO] [stderr] Checking chess v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/ui.rs:224:22 [INFO] [stdout] | [INFO] [stdout] 224 | const HELP_STR: &'static str = "press any key to exit\n\ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/ui.rs:224:22 [INFO] [stdout] | [INFO] [stdout] 224 | const HELP_STR: &'static str = "press any key to exit\n\ [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/app.rs:78:15 [INFO] [stdout] | [INFO] [stdout] 78 | Checkmate(Colour), [INFO] [stdout] | --------- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 78 - Checkmate(Colour), [INFO] [stdout] 78 + Checkmate(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/app.rs:82:17 [INFO] [stdout] | [INFO] [stdout] 82 | Resignation(Colour), [INFO] [stdout] | ----------- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 82 - Resignation(Colour), [INFO] [stdout] 82 + Resignation(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/app.rs:88:14 [INFO] [stdout] | [INFO] [stdout] 88 | Finished(GameResult), [INFO] [stdout] | -------- ^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 88 - Finished(GameResult), [INFO] [stdout] 88 + Finished(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/chess/components.rs:13:20 [INFO] [stdout] | [INFO] [stdout] 13 | Some(x) if 1 <= x && x <= 8 => Some((x - 1) as usize), [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: use: `(1..=8).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: methods with the following characteristics: (`to_*` and `self` type is `Copy`) usually take `self` by value [INFO] [stdout] --> src/chess/components.rs:126:22 [INFO] [stdout] | [INFO] [stdout] 126 | pub fn to_string(&self) -> String { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implementation of inherent method `to_string(&self) -> String` for type `chess::components::Position` [INFO] [stdout] --> src/chess/components.rs:126:5 [INFO] [stdout] | [INFO] [stdout] 126 | / pub fn to_string(&self) -> String { [INFO] [stdout] 127 | | let file = FILES[self.0]; [INFO] [stdout] 128 | | let rank = self.1 + 1; [INFO] [stdout] 129 | | return format!("{}{}", file, rank); [INFO] [stdout] 130 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: implement trait `Display` for type `chess::components::Position` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string [INFO] [stdout] = note: `#[warn(clippy::inherent_to_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/components.rs:129:9 [INFO] [stdout] | [INFO] [stdout] 129 | return format!("{}{}", file, rank); [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] 129 - return format!("{}{}", file, rank); [INFO] [stdout] 129 + format!("{}{}", file, rank) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/chess/components.rs:157:23 [INFO] [stdout] | [INFO] [stdout] 157 | let y = match usize::from_str_radix(value.as_str(), 10) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `value.as_str().parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] = note: `#[warn(clippy::from_str_radix_10)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/chess/components.rs:158:22 [INFO] [stdout] | [INFO] [stdout] 158 | Ok(y) if (1 <= y) && (y <= 8) => y - 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use: `(1..=8).contains(&y)` [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: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:121:9 [INFO] [stdout] | [INFO] [stdout] 121 | return Ok(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 121 - return Ok(result); [INFO] [stdout] 121 + Ok(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:141:9 [INFO] [stdout] | [INFO] [stdout] 141 | return self.try_move_internal(move_); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 141 - return self.try_move_internal(move_); [INFO] [stdout] 141 + self.try_move_internal(move_) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:148:9 [INFO] [stdout] | [INFO] [stdout] 148 | return self.try_move_internal(move_); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 148 - return self.try_move_internal(move_); [INFO] [stdout] 148 + self.try_move_internal(move_) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:168:9 [INFO] [stdout] | [INFO] [stdout] 168 | return Game::from_san_moves(moves); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 168 - return Game::from_san_moves(moves); [INFO] [stdout] 168 + Game::from_san_moves(moves) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/chess/game.rs:167:27 [INFO] [stdout] | [INFO] [stdout] 167 | let moves = moves.trim().split_whitespace().collect::>(); [INFO] [stdout] | ^^^^^^^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] = note: `#[warn(clippy::trim_split_whitespace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:174:60 [INFO] [stdout] | [INFO] [stdout] 174 | Some(colour) if colour == self.current_turn => return false, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 174 - Some(colour) if colour == self.current_turn => return false, [INFO] [stdout] 174 + Some(colour) if colour == self.current_turn => false, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:175:24 [INFO] [stdout] | [INFO] [stdout] 175 | Some(_) => return true, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 175 - Some(_) => return true, [INFO] [stdout] 175 + Some(_) => true, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:178:17 [INFO] [stdout] | [INFO] [stdout] 178 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 178 - return false; [INFO] [stdout] 178 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:252:9 [INFO] [stdout] | [INFO] [stdout] 252 | return result.join("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 252 - return result.join("\n"); [INFO] [stdout] 252 + result.join("\n") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/chess/game.rs:233:36 [INFO] [stdout] | [INFO] [stdout] 233 | .map(|(i, x)| (8 - (i as usize), x)) [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `i` [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 (`usize` -> `usize`) [INFO] [stdout] --> src/chess/game.rs:238:32 [INFO] [stdout] | [INFO] [stdout] 238 | .map(|(i, x)| (i as usize + 1, x)) [INFO] [stdout] | ^^^^^^^^^^ help: try: `i` [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 bound is already specified as the supertrait of `DoubleEndedIterator` [INFO] [stdout] --> src/chess/game.rs:263:38 [INFO] [stdout] | [INFO] [stdout] 263 | fn get_board_rows(&self) -> impl Iterator + '_ + DoubleEndedIterator { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implied_bounds_in_impls [INFO] [stdout] = note: `#[warn(clippy::implied_bounds_in_impls)]` on by default [INFO] [stdout] help: try removing this bound [INFO] [stdout] | [INFO] [stdout] 263 - fn get_board_rows(&self) -> impl Iterator + '_ + DoubleEndedIterator { [INFO] [stdout] 263 + fn get_board_rows(&self) -> impl '_ + DoubleEndedIterator { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:382:24 [INFO] [stdout] | [INFO] [stdout] 382 | if let Some(_) = move_.promotion_callback { [INFO] [stdout] | -------^^^^^^^--------------------------- help: try: `if move_.promotion_callback.is_some()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:389:24 [INFO] [stdout] | [INFO] [stdout] 389 | if let Some(_) = move_.promotion_callback { [INFO] [stdout] | -------^^^^^^^--------------------------- help: try: `if move_.promotion_callback.is_some()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/chess/game.rs:423:14 [INFO] [stdout] | [INFO] [stdout] 423 | .map(|x| self.get_available_moves(x.position)) [INFO] [stdout] | ______________^ [INFO] [stdout] 424 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|x| self.get_available_moves(x.position))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/chess/game.rs:459:18 [INFO] [stdout] | [INFO] [stdout] 459 | .map(|(x, y)| { [INFO] [stdout] | __________________^ [INFO] [stdout] 460 | | let mut result: Vec = Vec::new(); [INFO] [stdout] 461 | | let mut k = 1; [INFO] [stdout] 462 | | loop { [INFO] [stdout] ... | [INFO] [stdout] 472 | | }) [INFO] [stdout] 473 | | .flatten() [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] help: try replacing `map` with `flat_map` and remove the `.flatten()` [INFO] [stdout] | [INFO] [stdout] 459 ~ .flat_map(|(x, y)| { [INFO] [stdout] 460 + let mut result: Vec = Vec::new(); [INFO] [stdout] 461 + let mut k = 1; [INFO] [stdout] 462 + loop { [INFO] [stdout] 463 + let test_pos = base.add(PosDiff(k * x, k * y)); [INFO] [stdout] 464 + if test_pos.is_ok() { [INFO] [stdout] 465 + result.push(test_pos.unwrap()); [INFO] [stdout] 466 + k += 1; [INFO] [stdout] 467 + } else { [INFO] [stdout] 468 + break; [INFO] [stdout] 469 + } [INFO] [stdout] 470 + } [INFO] [stdout] 471 + result [INFO] [stdout] 472 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `test_pos` after checking its variant with `is_ok` [INFO] [stdout] --> src/chess/game.rs:465:41 [INFO] [stdout] | [INFO] [stdout] 464 | if test_pos.is_ok() { [INFO] [stdout] | ------------------- help: try: `if let Ok() = test_pos` [INFO] [stdout] 465 | result.push(test_pos.unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:578:25 [INFO] [stdout] | [INFO] [stdout] 578 | return Ok(MoveType::PawnStart); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 578 - return Ok(MoveType::PawnStart); [INFO] [stdout] 578 + Ok(MoveType::PawnStart) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:583:29 [INFO] [stdout] | [INFO] [stdout] 583 | ... return Err(MoveError::PositionBlocked); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 583 - return Err(MoveError::PositionBlocked); [INFO] [stdout] 583 + Err(MoveError::PositionBlocked) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:585:29 [INFO] [stdout] | [INFO] [stdout] 585 | ... return Ok(MoveType::PawnPush); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 585 - return Ok(MoveType::PawnPush); [INFO] [stdout] 585 + Ok(MoveType::PawnPush) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:592:29 [INFO] [stdout] | [INFO] [stdout] 592 | ... return Ok(MoveType::PawnAttack); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 592 - return Ok(MoveType::PawnAttack); [INFO] [stdout] 592 + Ok(MoveType::PawnAttack) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:609:29 [INFO] [stdout] | [INFO] [stdout] 609 | ... return Err(MoveError::InvalidEnPassantConditions); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 609 - return Err(MoveError::InvalidEnPassantConditions); [INFO] [stdout] 609 + Err(MoveError::InvalidEnPassantConditions) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:612:26 [INFO] [stdout] | [INFO] [stdout] 612 | _ => return Err(MoveError::InvalidMovement), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 612 - _ => return Err(MoveError::InvalidMovement), [INFO] [stdout] 612 + _ => Err(MoveError::InvalidMovement), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:620:17 [INFO] [stdout] | [INFO] [stdout] 620 | return Ok(MoveType::Standard); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 620 - return Ok(MoveType::Standard); [INFO] [stdout] 620 + Ok(MoveType::Standard) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:628:17 [INFO] [stdout] | [INFO] [stdout] 628 | return Ok(MoveType::Standard); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 628 - return Ok(MoveType::Standard); [INFO] [stdout] 628 + Ok(MoveType::Standard) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:635:17 [INFO] [stdout] | [INFO] [stdout] 635 | return Ok(MoveType::Standard); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 635 - return Ok(MoveType::Standard); [INFO] [stdout] 635 + Ok(MoveType::Standard) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:639:17 [INFO] [stdout] | [INFO] [stdout] 639 | return Ok(MoveType::Standard); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 639 - return Ok(MoveType::Standard); [INFO] [stdout] 639 + Ok(MoveType::Standard) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:643:56 [INFO] [stdout] | [INFO] [stdout] 643 | PosDiff(0 | -1 | 1, 0 | -1 | 1) => return Ok(MoveType::Standard), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 643 - PosDiff(0 | -1 | 1, 0 | -1 | 1) => return Ok(MoveType::Standard), [INFO] [stdout] 643 + PosDiff(0 | -1 | 1, 0 | -1 | 1) => Ok(MoveType::Standard), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:652:29 [INFO] [stdout] | [INFO] [stdout] 652 | ... return Ok(MoveType::Castle(castle_type)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 652 - return Ok(MoveType::Castle(castle_type)); [INFO] [stdout] 652 + Ok(MoveType::Castle(castle_type)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:654:29 [INFO] [stdout] | [INFO] [stdout] 654 | ... return Err(MoveError::InvalidCastleConditions); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 654 - return Err(MoveError::InvalidCastleConditions); [INFO] [stdout] 654 + Err(MoveError::InvalidCastleConditions) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:657:26 [INFO] [stdout] | [INFO] [stdout] 657 | _ => return Err(MoveError::InvalidMovement), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 657 - _ => return Err(MoveError::InvalidMovement), [INFO] [stdout] 657 + _ => Err(MoveError::InvalidMovement), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:559:24 [INFO] [stdout] | [INFO] [stdout] 559 | if let Some(_) = game.get_piece(pos.add(PosDiff(inc.0 * k, inc.1 * k)).unwrap()) { [INFO] [stdout] | -------^^^^^^^------------------------------------------------------------------ help: try: `if game.get_piece(pos.add(PosDiff(inc.0 * k, inc.1 * k)).unwrap()).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:574:32 [INFO] [stdout] | [INFO] [stdout] 574 | if let &Some(_) = self.get_piece(pos2) { [INFO] [stdout] | -------^^^^^^^^----------------------- help: try: `if self.get_piece(pos2).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:582:32 [INFO] [stdout] | [INFO] [stdout] 582 | if let &Some(_) = self.get_piece(pos2) { [INFO] [stdout] | -------^^^^^^^^----------------------- help: try: `if self.get_piece(pos2).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:590:32 [INFO] [stdout] | [INFO] [stdout] 590 | if let &Some(_) = self.get_piece(pos2) { [INFO] [stdout] | -------^^^^^^^^----------------------- help: try: `if self.get_piece(pos2).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this OR pattern can be rewritten using a range [INFO] [stdout] --> src/chess/game.rs:643:29 [INFO] [stdout] | [INFO] [stdout] 643 | PosDiff(0 | -1 | 1, 0 | -1 | 1) => return Ok(MoveType::Standard), [INFO] [stdout] | ^^^^^^^^^^ help: try: `-1..=1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_patterns [INFO] [stdout] = note: `#[warn(clippy::manual_range_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this OR pattern can be rewritten using a range [INFO] [stdout] --> src/chess/game.rs:643:41 [INFO] [stdout] | [INFO] [stdout] 643 | PosDiff(0 | -1 | 1, 0 | -1 | 1) => return Ok(MoveType::Standard), [INFO] [stdout] | ^^^^^^^^^^ help: try: `-1..=1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_patterns [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `filter(..).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(..)` instead [INFO] [stdout] --> src/chess/game.rs:672:9 [INFO] [stdout] | [INFO] [stdout] 672 | / self.iterate_pieces() [INFO] [stdout] 673 | | .filter(move |&x| x.colour == colour && x.kind == PieceType::King) [INFO] [stdout] 674 | | .next() [INFO] [stdout] | |___________________^ help: try: `self.iterate_pieces().find(move |&x| x.colour == colour && x.kind == PieceType::King)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stdout] = note: `#[warn(clippy::filter_next)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:682:9 [INFO] [stdout] | [INFO] [stdout] 682 | return self.is_attacked(colour, king_pos); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 682 - return self.is_attacked(colour, king_pos); [INFO] [stdout] 682 + self.is_attacked(colour, king_pos) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:728:9 [INFO] [stdout] | [INFO] [stdout] 728 | return true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 728 - return true; [INFO] [stdout] 728 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/chess/game.rs:701:12 [INFO] [stdout] | [INFO] [stdout] 701 | if king.history.len() > 0 || rook.history.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!king.history.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/chess/game.rs:701:38 [INFO] [stdout] | [INFO] [stdout] 701 | if king.history.len() > 0 || rook.history.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!rook.history.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: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:712:20 [INFO] [stdout] | [INFO] [stdout] 712 | if let Some(_) = self.get_piece(pos) { [INFO] [stdout] | -------^^^^^^^---------------------- help: try: `if self.get_piece(pos).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:738:9 [INFO] [stdout] | [INFO] [stdout] 738 | return Ok(game); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 738 - return Ok(game); [INFO] [stdout] 738 + Ok(game) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/moves.rs:31:13 [INFO] [stdout] | [INFO] [stdout] 31 | return; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 30 - // Already computed [INFO] [stdout] 31 - return; [INFO] [stdout] 30 + // Already computed [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/moves.rs:29:16 [INFO] [stdout] | [INFO] [stdout] 29 | if let Some(_) = &self.san_string { [INFO] [stdout] | -------^^^^^^^------------------- help: try: `if self.san_string.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/chess/moves.rs:70:20 [INFO] [stdout] | [INFO] [stdout] 70 | if start_file.eq("") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `start_file.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/moves.rs:279:20 [INFO] [stdout] | [INFO] [stdout] 279 | if let Some(_) = rank { [INFO] [stdout] | -------^^^^^^^------- help: try: `if rank.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/moves.rs:289:20 [INFO] [stdout] | [INFO] [stdout] 289 | if let Some(_) = file { [INFO] [stdout] | -------^^^^^^^------- help: try: `if file.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/chess/moves.rs:514:20 [INFO] [stdout] | [INFO] [stdout] 514 | if piece.colour != colour [INFO] [stdout] | ____________________^ [INFO] [stdout] 515 | | && move_type != MoveType::PawnPush [INFO] [stdout] 516 | | && move_type != MoveType::PawnPush => [INFO] [stdout] | |______________________________________________________^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 514 - if piece.colour != colour [INFO] [stdout] 515 - && move_type != MoveType::PawnPush [INFO] [stdout] 516 - && move_type != MoveType::PawnPush => [INFO] [stdout] 514 + if !(piece.colour == colour || move_type == MoveType::PawnPush) => [INFO] [stdout] | [INFO] [stdout] 514 - if piece.colour != colour [INFO] [stdout] 515 - && move_type != MoveType::PawnPush [INFO] [stdout] 516 - && move_type != MoveType::PawnPush => [INFO] [stdout] 514 + if piece.colour != colour && move_type != MoveType::PawnPush => [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/chess/moves.rs:491:12 [INFO] [stdout] | [INFO] [stdout] 491 | if pieces.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `pieces.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: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/chess/moves.rs:498:22 [INFO] [stdout] | [INFO] [stdout] 498 | .filter(|&(_, ref result)| result.is_ok()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 498 - .filter(|&(_, ref result)| result.is_ok()) [INFO] [stdout] 498 + .filter(|(_, result)| result.is_ok()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/chess/moves.rs:512:24 [INFO] [stdout] | [INFO] [stdout] 512 | let captures = match game.get_piece(end_pos).as_ref() { [INFO] [stdout] | ________________________^ [INFO] [stdout] 513 | | Some(piece) [INFO] [stdout] 514 | | if piece.colour != colour [INFO] [stdout] 515 | | && move_type != MoveType::PawnPush [INFO] [stdout] ... | [INFO] [stdout] 520 | | _ => false, [INFO] [stdout] 521 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 512 ~ let captures = matches!(game.get_piece(end_pos).as_ref(), Some(piece) if piece.colour != colour [INFO] [stdout] 513 + && move_type != MoveType::PawnPush [INFO] [stdout] 514 ~ && move_type != MoveType::PawnPush); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/chess/moves.rs:557:24 [INFO] [stdout] | [INFO] [stdout] 557 | let captures = match game.get_piece(self.pos2).as_ref() { [INFO] [stdout] | ________________________^ [INFO] [stdout] 558 | | Some(piece) if piece.colour != colour && move_type != MoveType::PawnPush => true, [INFO] [stdout] 559 | | _ => false, [INFO] [stdout] 560 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 557 - let captures = match game.get_piece(self.pos2).as_ref() { [INFO] [stdout] 558 - Some(piece) if piece.colour != colour && move_type != MoveType::PawnPush => true, [INFO] [stdout] 559 - _ => false, [INFO] [stdout] 560 - }; [INFO] [stdout] 557 + let captures = matches!(game.get_piece(self.pos2).as_ref(), Some(piece) if piece.colour != colour && move_type != MoveType::PawnPush); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `PieceType` which implements the `Copy` trait [INFO] [stdout] --> src/chess/moves.rs:597:9 [INFO] [stdout] | [INFO] [stdout] 597 | self.clone() [INFO] [stdout] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [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: manual saturating arithmetic [INFO] [stdout] --> src/app.rs:42:34 [INFO] [stdout] | [INFO] [stdout] 42 | if self.history_scroll > num_lines.checked_sub(layout_height).unwrap_or(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `saturating_sub`: `num_lines.saturating_sub(layout_height)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_saturating_arithmetic [INFO] [stdout] = note: `#[warn(clippy::manual_saturating_arithmetic)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual saturating arithmetic [INFO] [stdout] --> src/app.rs:51:31 [INFO] [stdout] | [INFO] [stdout] 51 | self.history_scroll = num_lines.checked_sub(layout_height).unwrap_or(0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `saturating_sub`: `num_lines.saturating_sub(layout_height)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_saturating_arithmetic [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/ui.rs:114:79 [INFO] [stdout] | [INFO] [stdout] 114 | fn draw_command_block(f: &mut Frame, rect: Rect, colour: String, input: &String) [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 114 ~ fn draw_command_block(f: &mut Frame, rect: Rect, colour: String, input: &str) [INFO] [stdout] 115 | where [INFO] [stdout] ... [INFO] [stdout] 121 | colour, [INFO] [stdout] 122 ~ input [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/ui.rs:165:8 [INFO] [stdout] | [INFO] [stdout] 165 | if moves.len() % 2 != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace with: `!moves.len().is_multiple_of(2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:50:5 [INFO] [stdout] | [INFO] [stdout] 50 | / return match player_input.len() { [INFO] [stdout] 51 | | 0 => unreachable!(), [INFO] [stdout] 52 | | 1 => Ok(UserAction::TryPlaySAN(player_input.remove(0))), [INFO] [stdout] 53 | | 2 => { [INFO] [stdout] ... | [INFO] [stdout] 58 | | _ => Err("Too many tokens."), [INFO] [stdout] 59 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 50 ~ match player_input.len() { [INFO] [stdout] 51 + 0 => unreachable!(), [INFO] [stdout] 52 + 1 => Ok(UserAction::TryPlaySAN(player_input.remove(0))), [INFO] [stdout] 53 + 2 => { [INFO] [stdout] 54 + let mut player_input = player_input.into_iter(); [INFO] [stdout] 55 + let (a, b) = (player_input.next().unwrap(), player_input.next().unwrap()); [INFO] [stdout] 56 + Ok(UserAction::TryPlayPositions(a, b)) [INFO] [stdout] 57 + } [INFO] [stdout] 58 + _ => Err("Too many tokens."), [INFO] [stdout] 59 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/main.rs:22:37 [INFO] [stdout] | [INFO] [stdout] 22 | fn parse_player_input(player_input: &String) -> Result { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 22 - fn parse_player_input(player_input: &String) -> Result { [INFO] [stdout] 22 + fn parse_player_input(player_input: &str) -> Result { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/main.rs:24:10 [INFO] [stdout] | [INFO] [stdout] 24 | .trim() [INFO] [stdout] | __________^ [INFO] [stdout] 25 | | .split_whitespace() [INFO] [stdout] | |_________^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:29:8 [INFO] [stdout] | [INFO] [stdout] 29 | if player_input.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `player_input.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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:150:13 [INFO] [stdout] | [INFO] [stdout] 150 | / match event { [INFO] [stdout] 151 | | event::Event::Key(event) => match (event.code, event.modifiers) { [INFO] [stdout] 152 | | (KeyCode::Char('?'), _) => self.show_help_screen = true, [INFO] [stdout] 153 | | (KeyCode::Char(c), KeyModifiers::NONE | KeyModifiers::SHIFT) => { [INFO] [stdout] ... | [INFO] [stdout] 173 | | _ => (), [INFO] [stdout] 174 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 150 ~ if let event::Event::Key(event) = event { match (event.code, event.modifiers) { [INFO] [stdout] 151 + (KeyCode::Char('?'), _) => self.show_help_screen = true, [INFO] [stdout] 152 + (KeyCode::Char(c), KeyModifiers::NONE | KeyModifiers::SHIFT) => { [INFO] [stdout] 153 + self.add_input_char(c); [INFO] [stdout] 154 + } [INFO] [stdout] 155 + (KeyCode::Backspace, _) => { [INFO] [stdout] 156 + self.pop_input_char(); [INFO] [stdout] 157 + } [INFO] [stdout] 158 + (KeyCode::Enter, _) => { [INFO] [stdout] 159 + let player_input = std::mem::replace(&mut self.input, String::new()); [INFO] [stdout] 160 + self.status = handle_player_input(self, &player_input); [INFO] [stdout] 161 + self.reset_history_scroll(); [INFO] [stdout] 162 + } [INFO] [stdout] 163 + (KeyCode::Char(c @ ('j' | 'k')), KeyModifiers::ALT) => { [INFO] [stdout] 164 + match c { [INFO] [stdout] 165 + 'j' => self.history_scroll = self.history_scroll.checked_add(1).unwrap_or(0), [INFO] [stdout] 166 + 'k' => self.history_scroll = self.history_scroll.checked_sub(1).unwrap_or(0), [INFO] [stdout] 167 + _ => unreachable!(), [INFO] [stdout] 168 + } [INFO] [stdout] 169 + } [INFO] [stdout] 170 + _ => (), [INFO] [stdout] 171 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/main.rs:160:44 [INFO] [stdout] | [INFO] [stdout] 160 | let player_input = std::mem::replace(&mut self.input, String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut self.input)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] = note: `#[warn(clippy::mem_replace_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual saturating arithmetic [INFO] [stdout] --> src/main.rs:167:58 [INFO] [stdout] | [INFO] [stdout] 167 | ... 'k' => self.history_scroll = self.history_scroll.checked_sub(1).unwrap_or(0), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `saturating_sub`: `self.history_scroll.saturating_sub(1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_saturating_arithmetic [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/chess/game.rs:481:17 [INFO] [stdout] | [INFO] [stdout] 481 | vec![(0, 1), (-1, 1), (1, 1), (0, 2)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `[(0, 1), (-1, 1), (1, 1), (0, 2)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/chess/game.rs:490:34 [INFO] [stdout] | [INFO] [stdout] 490 | PieceType::Knight => vec![ [INFO] [stdout] | __________________________________^ [INFO] [stdout] 491 | | (2, 1), [INFO] [stdout] 492 | | (2, -1), [INFO] [stdout] 493 | | (-2, 1), [INFO] [stdout] ... | [INFO] [stdout] 498 | | (-1, -2), [INFO] [stdout] 499 | | ] [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 490 ~ PieceType::Knight => [(2, 1), [INFO] [stdout] 491 + (2, -1), [INFO] [stdout] 492 + (-2, 1), [INFO] [stdout] 493 + (-2, -1), [INFO] [stdout] 494 + (1, 2), [INFO] [stdout] 495 + (-1, 2), [INFO] [stdout] 496 + (1, -2), [INFO] [stdout] 497 + (-1, -2)] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/chess/game.rs:508:32 [INFO] [stdout] | [INFO] [stdout] 508 | PieceType::King => vec![ [INFO] [stdout] | ________________________________^ [INFO] [stdout] 509 | | (-1, 0), [INFO] [stdout] 510 | | (-1, 1), [INFO] [stdout] 511 | | (0, 1), [INFO] [stdout] ... | [INFO] [stdout] 516 | | (-1, -1), [INFO] [stdout] 517 | | ] [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 508 ~ PieceType::King => [(-1, 0), [INFO] [stdout] 509 + (-1, 1), [INFO] [stdout] 510 + (0, 1), [INFO] [stdout] 511 + (1, 1), [INFO] [stdout] 512 + (1, 0), [INFO] [stdout] 513 + (1, -1), [INFO] [stdout] 514 + (0, -1), [INFO] [stdout] 515 + (-1, -1)] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/app.rs:78:15 [INFO] [stdout] | [INFO] [stdout] 78 | Checkmate(Colour), [INFO] [stdout] | --------- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 78 - Checkmate(Colour), [INFO] [stdout] 78 + Checkmate(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/app.rs:82:17 [INFO] [stdout] | [INFO] [stdout] 82 | Resignation(Colour), [INFO] [stdout] | ----------- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 82 - Resignation(Colour), [INFO] [stdout] 82 + Resignation(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/app.rs:88:14 [INFO] [stdout] | [INFO] [stdout] 88 | Finished(GameResult), [INFO] [stdout] | -------- ^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 88 - Finished(GameResult), [INFO] [stdout] 88 + Finished(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/chess/components.rs:13:20 [INFO] [stdout] | [INFO] [stdout] 13 | Some(x) if 1 <= x && x <= 8 => Some((x - 1) as usize), [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: use: `(1..=8).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: methods with the following characteristics: (`to_*` and `self` type is `Copy`) usually take `self` by value [INFO] [stdout] --> src/chess/components.rs:126:22 [INFO] [stdout] | [INFO] [stdout] 126 | pub fn to_string(&self) -> String { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implementation of inherent method `to_string(&self) -> String` for type `chess::components::Position` [INFO] [stdout] --> src/chess/components.rs:126:5 [INFO] [stdout] | [INFO] [stdout] 126 | / pub fn to_string(&self) -> String { [INFO] [stdout] 127 | | let file = FILES[self.0]; [INFO] [stdout] 128 | | let rank = self.1 + 1; [INFO] [stdout] 129 | | return format!("{}{}", file, rank); [INFO] [stdout] 130 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: implement trait `Display` for type `chess::components::Position` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string [INFO] [stdout] = note: `#[warn(clippy::inherent_to_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/components.rs:129:9 [INFO] [stdout] | [INFO] [stdout] 129 | return format!("{}{}", file, rank); [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] 129 - return format!("{}{}", file, rank); [INFO] [stdout] 129 + format!("{}{}", file, rank) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/chess/components.rs:157:23 [INFO] [stdout] | [INFO] [stdout] 157 | let y = match usize::from_str_radix(value.as_str(), 10) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `value.as_str().parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] = note: `#[warn(clippy::from_str_radix_10)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/chess/components.rs:158:22 [INFO] [stdout] | [INFO] [stdout] 158 | Ok(y) if (1 <= y) && (y <= 8) => y - 1, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: use: `(1..=8).contains(&y)` [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: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:121:9 [INFO] [stdout] | [INFO] [stdout] 121 | return Ok(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 121 - return Ok(result); [INFO] [stdout] 121 + Ok(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:141:9 [INFO] [stdout] | [INFO] [stdout] 141 | return self.try_move_internal(move_); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 141 - return self.try_move_internal(move_); [INFO] [stdout] 141 + self.try_move_internal(move_) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:148:9 [INFO] [stdout] | [INFO] [stdout] 148 | return self.try_move_internal(move_); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 148 - return self.try_move_internal(move_); [INFO] [stdout] 148 + self.try_move_internal(move_) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:168:9 [INFO] [stdout] | [INFO] [stdout] 168 | return Game::from_san_moves(moves); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 168 - return Game::from_san_moves(moves); [INFO] [stdout] 168 + Game::from_san_moves(moves) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/chess/game.rs:167:27 [INFO] [stdout] | [INFO] [stdout] 167 | let moves = moves.trim().split_whitespace().collect::>(); [INFO] [stdout] | ^^^^^^^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] = note: `#[warn(clippy::trim_split_whitespace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:174:60 [INFO] [stdout] | [INFO] [stdout] 174 | Some(colour) if colour == self.current_turn => return false, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 174 - Some(colour) if colour == self.current_turn => return false, [INFO] [stdout] 174 + Some(colour) if colour == self.current_turn => false, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:175:24 [INFO] [stdout] | [INFO] [stdout] 175 | Some(_) => return true, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 175 - Some(_) => return true, [INFO] [stdout] 175 + Some(_) => true, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:178:17 [INFO] [stdout] | [INFO] [stdout] 178 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 178 - return false; [INFO] [stdout] 178 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:252:9 [INFO] [stdout] | [INFO] [stdout] 252 | return result.join("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 252 - return result.join("\n"); [INFO] [stdout] 252 + result.join("\n") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/chess/game.rs:233:36 [INFO] [stdout] | [INFO] [stdout] 233 | .map(|(i, x)| (8 - (i as usize), x)) [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `i` [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 (`usize` -> `usize`) [INFO] [stdout] --> src/chess/game.rs:238:32 [INFO] [stdout] | [INFO] [stdout] 238 | .map(|(i, x)| (i as usize + 1, x)) [INFO] [stdout] | ^^^^^^^^^^ help: try: `i` [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 bound is already specified as the supertrait of `DoubleEndedIterator` [INFO] [stdout] --> src/chess/game.rs:263:38 [INFO] [stdout] | [INFO] [stdout] 263 | fn get_board_rows(&self) -> impl Iterator + '_ + DoubleEndedIterator { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implied_bounds_in_impls [INFO] [stdout] = note: `#[warn(clippy::implied_bounds_in_impls)]` on by default [INFO] [stdout] help: try removing this bound [INFO] [stdout] | [INFO] [stdout] 263 - fn get_board_rows(&self) -> impl Iterator + '_ + DoubleEndedIterator { [INFO] [stdout] 263 + fn get_board_rows(&self) -> impl '_ + DoubleEndedIterator { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:382:24 [INFO] [stdout] | [INFO] [stdout] 382 | if let Some(_) = move_.promotion_callback { [INFO] [stdout] | -------^^^^^^^--------------------------- help: try: `if move_.promotion_callback.is_some()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:389:24 [INFO] [stdout] | [INFO] [stdout] 389 | if let Some(_) = move_.promotion_callback { [INFO] [stdout] | -------^^^^^^^--------------------------- help: try: `if move_.promotion_callback.is_some()` [INFO] [stdout] | [INFO] [stdout] = note: this will change drop order of the result, as well as all temporaries [INFO] [stdout] = note: add `#[allow(clippy::redundant_pattern_matching)]` if this is important [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/chess/game.rs:423:14 [INFO] [stdout] | [INFO] [stdout] 423 | .map(|x| self.get_available_moves(x.position)) [INFO] [stdout] | ______________^ [INFO] [stdout] 424 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|x| self.get_available_moves(x.position))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/chess/game.rs:459:18 [INFO] [stdout] | [INFO] [stdout] 459 | .map(|(x, y)| { [INFO] [stdout] | __________________^ [INFO] [stdout] 460 | | let mut result: Vec = Vec::new(); [INFO] [stdout] 461 | | let mut k = 1; [INFO] [stdout] 462 | | loop { [INFO] [stdout] ... | [INFO] [stdout] 472 | | }) [INFO] [stdout] 473 | | .flatten() [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] help: try replacing `map` with `flat_map` and remove the `.flatten()` [INFO] [stdout] | [INFO] [stdout] 459 ~ .flat_map(|(x, y)| { [INFO] [stdout] 460 + let mut result: Vec = Vec::new(); [INFO] [stdout] 461 + let mut k = 1; [INFO] [stdout] 462 + loop { [INFO] [stdout] 463 + let test_pos = base.add(PosDiff(k * x, k * y)); [INFO] [stdout] 464 + if test_pos.is_ok() { [INFO] [stdout] 465 + result.push(test_pos.unwrap()); [INFO] [stdout] 466 + k += 1; [INFO] [stdout] 467 + } else { [INFO] [stdout] 468 + break; [INFO] [stdout] 469 + } [INFO] [stdout] 470 + } [INFO] [stdout] 471 + result [INFO] [stdout] 472 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `test_pos` after checking its variant with `is_ok` [INFO] [stdout] --> src/chess/game.rs:465:41 [INFO] [stdout] | [INFO] [stdout] 464 | if test_pos.is_ok() { [INFO] [stdout] | ------------------- help: try: `if let Ok() = test_pos` [INFO] [stdout] 465 | result.push(test_pos.unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:578:25 [INFO] [stdout] | [INFO] [stdout] 578 | return Ok(MoveType::PawnStart); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 578 - return Ok(MoveType::PawnStart); [INFO] [stdout] 578 + Ok(MoveType::PawnStart) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:583:29 [INFO] [stdout] | [INFO] [stdout] 583 | ... return Err(MoveError::PositionBlocked); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 583 - return Err(MoveError::PositionBlocked); [INFO] [stdout] 583 + Err(MoveError::PositionBlocked) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:585:29 [INFO] [stdout] | [INFO] [stdout] 585 | ... return Ok(MoveType::PawnPush); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 585 - return Ok(MoveType::PawnPush); [INFO] [stdout] 585 + Ok(MoveType::PawnPush) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:592:29 [INFO] [stdout] | [INFO] [stdout] 592 | ... return Ok(MoveType::PawnAttack); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 592 - return Ok(MoveType::PawnAttack); [INFO] [stdout] 592 + Ok(MoveType::PawnAttack) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:609:29 [INFO] [stdout] | [INFO] [stdout] 609 | ... return Err(MoveError::InvalidEnPassantConditions); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 609 - return Err(MoveError::InvalidEnPassantConditions); [INFO] [stdout] 609 + Err(MoveError::InvalidEnPassantConditions) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:612:26 [INFO] [stdout] | [INFO] [stdout] 612 | _ => return Err(MoveError::InvalidMovement), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 612 - _ => return Err(MoveError::InvalidMovement), [INFO] [stdout] 612 + _ => Err(MoveError::InvalidMovement), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:620:17 [INFO] [stdout] | [INFO] [stdout] 620 | return Ok(MoveType::Standard); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 620 - return Ok(MoveType::Standard); [INFO] [stdout] 620 + Ok(MoveType::Standard) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:628:17 [INFO] [stdout] | [INFO] [stdout] 628 | return Ok(MoveType::Standard); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 628 - return Ok(MoveType::Standard); [INFO] [stdout] 628 + Ok(MoveType::Standard) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:635:17 [INFO] [stdout] | [INFO] [stdout] 635 | return Ok(MoveType::Standard); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 635 - return Ok(MoveType::Standard); [INFO] [stdout] 635 + Ok(MoveType::Standard) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:639:17 [INFO] [stdout] | [INFO] [stdout] 639 | return Ok(MoveType::Standard); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 639 - return Ok(MoveType::Standard); [INFO] [stdout] 639 + Ok(MoveType::Standard) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:643:56 [INFO] [stdout] | [INFO] [stdout] 643 | PosDiff(0 | -1 | 1, 0 | -1 | 1) => return Ok(MoveType::Standard), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 643 - PosDiff(0 | -1 | 1, 0 | -1 | 1) => return Ok(MoveType::Standard), [INFO] [stdout] 643 + PosDiff(0 | -1 | 1, 0 | -1 | 1) => Ok(MoveType::Standard), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:652:29 [INFO] [stdout] | [INFO] [stdout] 652 | ... return Ok(MoveType::Castle(castle_type)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 652 - return Ok(MoveType::Castle(castle_type)); [INFO] [stdout] 652 + Ok(MoveType::Castle(castle_type)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:654:29 [INFO] [stdout] | [INFO] [stdout] 654 | ... return Err(MoveError::InvalidCastleConditions); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 654 - return Err(MoveError::InvalidCastleConditions); [INFO] [stdout] 654 + Err(MoveError::InvalidCastleConditions) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:657:26 [INFO] [stdout] | [INFO] [stdout] 657 | _ => return Err(MoveError::InvalidMovement), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 657 - _ => return Err(MoveError::InvalidMovement), [INFO] [stdout] 657 + _ => Err(MoveError::InvalidMovement), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:559:24 [INFO] [stdout] | [INFO] [stdout] 559 | if let Some(_) = game.get_piece(pos.add(PosDiff(inc.0 * k, inc.1 * k)).unwrap()) { [INFO] [stdout] | -------^^^^^^^------------------------------------------------------------------ help: try: `if game.get_piece(pos.add(PosDiff(inc.0 * k, inc.1 * k)).unwrap()).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:574:32 [INFO] [stdout] | [INFO] [stdout] 574 | if let &Some(_) = self.get_piece(pos2) { [INFO] [stdout] | -------^^^^^^^^----------------------- help: try: `if self.get_piece(pos2).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:582:32 [INFO] [stdout] | [INFO] [stdout] 582 | if let &Some(_) = self.get_piece(pos2) { [INFO] [stdout] | -------^^^^^^^^----------------------- help: try: `if self.get_piece(pos2).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:590:32 [INFO] [stdout] | [INFO] [stdout] 590 | if let &Some(_) = self.get_piece(pos2) { [INFO] [stdout] | -------^^^^^^^^----------------------- help: try: `if self.get_piece(pos2).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this OR pattern can be rewritten using a range [INFO] [stdout] --> src/chess/game.rs:643:29 [INFO] [stdout] | [INFO] [stdout] 643 | PosDiff(0 | -1 | 1, 0 | -1 | 1) => return Ok(MoveType::Standard), [INFO] [stdout] | ^^^^^^^^^^ help: try: `-1..=1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_patterns [INFO] [stdout] = note: `#[warn(clippy::manual_range_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this OR pattern can be rewritten using a range [INFO] [stdout] --> src/chess/game.rs:643:41 [INFO] [stdout] | [INFO] [stdout] 643 | PosDiff(0 | -1 | 1, 0 | -1 | 1) => return Ok(MoveType::Standard), [INFO] [stdout] | ^^^^^^^^^^ help: try: `-1..=1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_patterns [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `filter(..).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(..)` instead [INFO] [stdout] --> src/chess/game.rs:672:9 [INFO] [stdout] | [INFO] [stdout] 672 | / self.iterate_pieces() [INFO] [stdout] 673 | | .filter(move |&x| x.colour == colour && x.kind == PieceType::King) [INFO] [stdout] 674 | | .next() [INFO] [stdout] | |___________________^ help: try: `self.iterate_pieces().find(move |&x| x.colour == colour && x.kind == PieceType::King)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stdout] = note: `#[warn(clippy::filter_next)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:682:9 [INFO] [stdout] | [INFO] [stdout] 682 | return self.is_attacked(colour, king_pos); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 682 - return self.is_attacked(colour, king_pos); [INFO] [stdout] 682 + self.is_attacked(colour, king_pos) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:728:9 [INFO] [stdout] | [INFO] [stdout] 728 | return true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 728 - return true; [INFO] [stdout] 728 + true [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/chess/game.rs:701:12 [INFO] [stdout] | [INFO] [stdout] 701 | if king.history.len() > 0 || rook.history.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!king.history.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/chess/game.rs:701:38 [INFO] [stdout] | [INFO] [stdout] 701 | if king.history.len() > 0 || rook.history.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!rook.history.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: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/game.rs:712:20 [INFO] [stdout] | [INFO] [stdout] 712 | if let Some(_) = self.get_piece(pos) { [INFO] [stdout] | -------^^^^^^^---------------------- help: try: `if self.get_piece(pos).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/game.rs:738:9 [INFO] [stdout] | [INFO] [stdout] 738 | return Ok(game); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 738 - return Ok(game); [INFO] [stdout] 738 + Ok(game) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chess/moves.rs:31:13 [INFO] [stdout] | [INFO] [stdout] 31 | return; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 30 - // Already computed [INFO] [stdout] 31 - return; [INFO] [stdout] 30 + // Already computed [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/moves.rs:29:16 [INFO] [stdout] | [INFO] [stdout] 29 | if let Some(_) = &self.san_string { [INFO] [stdout] | -------^^^^^^^------------------- help: try: `if self.san_string.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/chess/moves.rs:70:20 [INFO] [stdout] | [INFO] [stdout] 70 | if start_file.eq("") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `start_file.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/moves.rs:279:20 [INFO] [stdout] | [INFO] [stdout] 279 | if let Some(_) = rank { [INFO] [stdout] | -------^^^^^^^------- help: try: `if rank.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/chess/moves.rs:289:20 [INFO] [stdout] | [INFO] [stdout] 289 | if let Some(_) = file { [INFO] [stdout] | -------^^^^^^^------- help: try: `if file.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/chess/moves.rs:514:20 [INFO] [stdout] | [INFO] [stdout] 514 | if piece.colour != colour [INFO] [stdout] | ____________________^ [INFO] [stdout] 515 | | && move_type != MoveType::PawnPush [INFO] [stdout] 516 | | && move_type != MoveType::PawnPush => [INFO] [stdout] | |______________________________________________________^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 514 - if piece.colour != colour [INFO] [stdout] 515 - && move_type != MoveType::PawnPush [INFO] [stdout] 516 - && move_type != MoveType::PawnPush => [INFO] [stdout] 514 + if !(piece.colour == colour || move_type == MoveType::PawnPush) => [INFO] [stdout] | [INFO] [stdout] 514 - if piece.colour != colour [INFO] [stdout] 515 - && move_type != MoveType::PawnPush [INFO] [stdout] 516 - && move_type != MoveType::PawnPush => [INFO] [stdout] 514 + if piece.colour != colour && move_type != MoveType::PawnPush => [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/chess/moves.rs:491:12 [INFO] [stdout] | [INFO] [stdout] 491 | if pieces.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `pieces.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: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/chess/moves.rs:498:22 [INFO] [stdout] | [INFO] [stdout] 498 | .filter(|&(_, ref result)| result.is_ok()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 498 - .filter(|&(_, ref result)| result.is_ok()) [INFO] [stdout] 498 + .filter(|(_, result)| result.is_ok()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/chess/moves.rs:512:24 [INFO] [stdout] | [INFO] [stdout] 512 | let captures = match game.get_piece(end_pos).as_ref() { [INFO] [stdout] | ________________________^ [INFO] [stdout] 513 | | Some(piece) [INFO] [stdout] 514 | | if piece.colour != colour [INFO] [stdout] 515 | | && move_type != MoveType::PawnPush [INFO] [stdout] ... | [INFO] [stdout] 520 | | _ => false, [INFO] [stdout] 521 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 512 ~ let captures = matches!(game.get_piece(end_pos).as_ref(), Some(piece) if piece.colour != colour [INFO] [stdout] 513 + && move_type != MoveType::PawnPush [INFO] [stdout] 514 ~ && move_type != MoveType::PawnPush); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/chess/moves.rs:557:24 [INFO] [stdout] | [INFO] [stdout] 557 | let captures = match game.get_piece(self.pos2).as_ref() { [INFO] [stdout] | ________________________^ [INFO] [stdout] 558 | | Some(piece) if piece.colour != colour && move_type != MoveType::PawnPush => true, [INFO] [stdout] 559 | | _ => false, [INFO] [stdout] 560 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 557 - let captures = match game.get_piece(self.pos2).as_ref() { [INFO] [stdout] 558 - Some(piece) if piece.colour != colour && move_type != MoveType::PawnPush => true, [INFO] [stdout] 559 - _ => false, [INFO] [stdout] 560 - }; [INFO] [stdout] 557 + let captures = matches!(game.get_piece(self.pos2).as_ref(), Some(piece) if piece.colour != colour && move_type != MoveType::PawnPush); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `PieceType` which implements the `Copy` trait [INFO] [stdout] --> src/chess/moves.rs:597:9 [INFO] [stdout] | [INFO] [stdout] 597 | self.clone() [INFO] [stdout] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [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: manual saturating arithmetic [INFO] [stdout] --> src/app.rs:42:34 [INFO] [stdout] | [INFO] [stdout] 42 | if self.history_scroll > num_lines.checked_sub(layout_height).unwrap_or(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `saturating_sub`: `num_lines.saturating_sub(layout_height)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_saturating_arithmetic [INFO] [stdout] = note: `#[warn(clippy::manual_saturating_arithmetic)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual saturating arithmetic [INFO] [stdout] --> src/app.rs:51:31 [INFO] [stdout] | [INFO] [stdout] 51 | self.history_scroll = num_lines.checked_sub(layout_height).unwrap_or(0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `saturating_sub`: `num_lines.saturating_sub(layout_height)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_saturating_arithmetic [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/ui.rs:114:79 [INFO] [stdout] | [INFO] [stdout] 114 | fn draw_command_block(f: &mut Frame, rect: Rect, colour: String, input: &String) [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 114 ~ fn draw_command_block(f: &mut Frame, rect: Rect, colour: String, input: &str) [INFO] [stdout] 115 | where [INFO] [stdout] ... [INFO] [stdout] 121 | colour, [INFO] [stdout] 122 ~ input [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/ui.rs:165:8 [INFO] [stdout] | [INFO] [stdout] 165 | if moves.len() % 2 != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace with: `!moves.len().is_multiple_of(2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:50:5 [INFO] [stdout] | [INFO] [stdout] 50 | / return match player_input.len() { [INFO] [stdout] 51 | | 0 => unreachable!(), [INFO] [stdout] 52 | | 1 => Ok(UserAction::TryPlaySAN(player_input.remove(0))), [INFO] [stdout] 53 | | 2 => { [INFO] [stdout] ... | [INFO] [stdout] 58 | | _ => Err("Too many tokens."), [INFO] [stdout] 59 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 50 ~ match player_input.len() { [INFO] [stdout] 51 + 0 => unreachable!(), [INFO] [stdout] 52 + 1 => Ok(UserAction::TryPlaySAN(player_input.remove(0))), [INFO] [stdout] 53 + 2 => { [INFO] [stdout] 54 + let mut player_input = player_input.into_iter(); [INFO] [stdout] 55 + let (a, b) = (player_input.next().unwrap(), player_input.next().unwrap()); [INFO] [stdout] 56 + Ok(UserAction::TryPlayPositions(a, b)) [INFO] [stdout] 57 + } [INFO] [stdout] 58 + _ => Err("Too many tokens."), [INFO] [stdout] 59 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/main.rs:22:37 [INFO] [stdout] | [INFO] [stdout] 22 | fn parse_player_input(player_input: &String) -> Result { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 22 - fn parse_player_input(player_input: &String) -> Result { [INFO] [stdout] 22 + fn parse_player_input(player_input: &str) -> Result { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/main.rs:24:10 [INFO] [stdout] | [INFO] [stdout] 24 | .trim() [INFO] [stdout] | __________^ [INFO] [stdout] 25 | | .split_whitespace() [INFO] [stdout] | |_________^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:29:8 [INFO] [stdout] | [INFO] [stdout] 29 | if player_input.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `player_input.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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:150:13 [INFO] [stdout] | [INFO] [stdout] 150 | / match event { [INFO] [stdout] 151 | | event::Event::Key(event) => match (event.code, event.modifiers) { [INFO] [stdout] 152 | | (KeyCode::Char('?'), _) => self.show_help_screen = true, [INFO] [stdout] 153 | | (KeyCode::Char(c), KeyModifiers::NONE | KeyModifiers::SHIFT) => { [INFO] [stdout] ... | [INFO] [stdout] 173 | | _ => (), [INFO] [stdout] 174 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 150 ~ if let event::Event::Key(event) = event { match (event.code, event.modifiers) { [INFO] [stdout] 151 + (KeyCode::Char('?'), _) => self.show_help_screen = true, [INFO] [stdout] 152 + (KeyCode::Char(c), KeyModifiers::NONE | KeyModifiers::SHIFT) => { [INFO] [stdout] 153 + self.add_input_char(c); [INFO] [stdout] 154 + } [INFO] [stdout] 155 + (KeyCode::Backspace, _) => { [INFO] [stdout] 156 + self.pop_input_char(); [INFO] [stdout] 157 + } [INFO] [stdout] 158 + (KeyCode::Enter, _) => { [INFO] [stdout] 159 + let player_input = std::mem::replace(&mut self.input, String::new()); [INFO] [stdout] 160 + self.status = handle_player_input(self, &player_input); [INFO] [stdout] 161 + self.reset_history_scroll(); [INFO] [stdout] 162 + } [INFO] [stdout] 163 + (KeyCode::Char(c @ ('j' | 'k')), KeyModifiers::ALT) => { [INFO] [stdout] 164 + match c { [INFO] [stdout] 165 + 'j' => self.history_scroll = self.history_scroll.checked_add(1).unwrap_or(0), [INFO] [stdout] 166 + 'k' => self.history_scroll = self.history_scroll.checked_sub(1).unwrap_or(0), [INFO] [stdout] 167 + _ => unreachable!(), [INFO] [stdout] 168 + } [INFO] [stdout] 169 + } [INFO] [stdout] 170 + _ => (), [INFO] [stdout] 171 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: replacing a value of type `T` with `T::default()` is better expressed using `std::mem::take` [INFO] [stdout] --> src/main.rs:160:44 [INFO] [stdout] | [INFO] [stdout] 160 | let player_input = std::mem::replace(&mut self.input, String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `std::mem::take(&mut self.input)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_with_default [INFO] [stdout] = note: `#[warn(clippy::mem_replace_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual saturating arithmetic [INFO] [stdout] --> src/main.rs:167:58 [INFO] [stdout] | [INFO] [stdout] 167 | ... 'k' => self.history_scroll = self.history_scroll.checked_sub(1).unwrap_or(0), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `saturating_sub`: `self.history_scroll.saturating_sub(1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_saturating_arithmetic [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/chess/game.rs:481:17 [INFO] [stdout] | [INFO] [stdout] 481 | vec![(0, 1), (-1, 1), (1, 1), (0, 2)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `[(0, 1), (-1, 1), (1, 1), (0, 2)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/chess/game.rs:490:34 [INFO] [stdout] | [INFO] [stdout] 490 | PieceType::Knight => vec![ [INFO] [stdout] | __________________________________^ [INFO] [stdout] 491 | | (2, 1), [INFO] [stdout] 492 | | (2, -1), [INFO] [stdout] 493 | | (-2, 1), [INFO] [stdout] ... | [INFO] [stdout] 498 | | (-1, -2), [INFO] [stdout] 499 | | ] [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 490 ~ PieceType::Knight => [(2, 1), [INFO] [stdout] 491 + (2, -1), [INFO] [stdout] 492 + (-2, 1), [INFO] [stdout] 493 + (-2, -1), [INFO] [stdout] 494 + (1, 2), [INFO] [stdout] 495 + (-1, 2), [INFO] [stdout] 496 + (1, -2), [INFO] [stdout] 497 + (-1, -2)] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/chess/game.rs:508:32 [INFO] [stdout] | [INFO] [stdout] 508 | PieceType::King => vec![ [INFO] [stdout] | ________________________________^ [INFO] [stdout] 509 | | (-1, 0), [INFO] [stdout] 510 | | (-1, 1), [INFO] [stdout] 511 | | (0, 1), [INFO] [stdout] ... | [INFO] [stdout] 516 | | (-1, -1), [INFO] [stdout] 517 | | ] [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] help: you can use an array directly [INFO] [stdout] | [INFO] [stdout] 508 ~ PieceType::King => [(-1, 0), [INFO] [stdout] 509 + (-1, 1), [INFO] [stdout] 510 + (0, 1), [INFO] [stdout] 511 + (1, 1), [INFO] [stdout] 512 + (1, 0), [INFO] [stdout] 513 + (1, -1), [INFO] [stdout] 514 + (0, -1), [INFO] [stdout] 515 + (-1, -1)] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.22s [INFO] running `Command { std: "docker" "inspect" "b11e3c276fad29afcbf9a4141f7476f53f83053a27c277c3f4f2f5c658e99144", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b11e3c276fad29afcbf9a4141f7476f53f83053a27c277c3f4f2f5c658e99144", kill_on_drop: false }` [INFO] [stdout] b11e3c276fad29afcbf9a4141f7476f53f83053a27c277c3f4f2f5c658e99144