[INFO] updating cached repository rivaxel/My-Chess-Engine [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/rivaxel/My-Chess-Engine [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/rivaxel/My-Chess-Engine" "work/ex/clippy-test-run/sources/stable/gh/rivaxel/My-Chess-Engine"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/rivaxel/My-Chess-Engine'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/rivaxel/My-Chess-Engine" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/rivaxel/My-Chess-Engine"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/rivaxel/My-Chess-Engine'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 52b9d7e6d4c5519bc5a8d3152f2dc3cb1932554f [INFO] sha for GitHub repo rivaxel/My-Chess-Engine: 52b9d7e6d4c5519bc5a8d3152f2dc3cb1932554f [INFO] validating manifest of rivaxel/My-Chess-Engine on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of rivaxel/My-Chess-Engine on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing rivaxel/My-Chess-Engine [INFO] finished frobbing rivaxel/My-Chess-Engine [INFO] frobbed toml for rivaxel/My-Chess-Engine written to work/ex/clippy-test-run/sources/stable/gh/rivaxel/My-Chess-Engine/Cargo.toml [INFO] started frobbing rivaxel/My-Chess-Engine [INFO] finished frobbing rivaxel/My-Chess-Engine [INFO] frobbed toml for rivaxel/My-Chess-Engine written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/rivaxel/My-Chess-Engine/Cargo.toml [INFO] crate rivaxel/My-Chess-Engine has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting rivaxel/My-Chess-Engine against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/rivaxel/My-Chess-Engine:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 7733c656a6c22219a3f64fb97f617eaf7d9d6d5b4b137c8f99b8c24c9b8dabf6 [INFO] running `"docker" "start" "-a" "7733c656a6c22219a3f64fb97f617eaf7d9d6d5b4b137c8f99b8c24c9b8dabf6"` [INFO] [stderr] Checking arsenic_chess_engine v0.3.0 (/opt/crater/workdir) [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/chess_board/evaluation.rs:144:9 [INFO] [stderr] | [INFO] [stderr] 144 | destination_score [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/chess_board/evaluation.rs:134:33 [INFO] [stderr] | [INFO] [stderr] 134 | let destination_score = match piece.to_ascii_uppercase() { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 135 | | 'P' => PAWN_SQUARE_TABLE[index], [INFO] [stderr] 136 | | 'N' => KNIGHT_SQUARE_TABLE[index], [INFO] [stderr] 137 | | 'B' => BISHOP_SQUARE_TABLE[index], [INFO] [stderr] ... | [INFO] [stderr] 141 | | _ => 0 [INFO] [stderr] 142 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/chess_board/mod.rs:214:9 [INFO] [stderr] | [INFO] [stderr] 214 | matched_letter [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/chess_board/mod.rs:176:30 [INFO] [stderr] | [INFO] [stderr] 176 | let matched_letter = if perspective_color { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 177 | | let new_letter = match letter { [INFO] [stderr] 178 | | 'K' => '♔', [INFO] [stderr] 179 | | 'Q' => '♕', [INFO] [stderr] ... | [INFO] [stderr] 211 | | new_letter [INFO] [stderr] 212 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/chess_board/mod.rs:193:13 [INFO] [stderr] | [INFO] [stderr] 193 | new_letter [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/chess_board/mod.rs:177:30 [INFO] [stderr] | [INFO] [stderr] 177 | let new_letter = match letter { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 178 | | 'K' => '♔', [INFO] [stderr] 179 | | 'Q' => '♕', [INFO] [stderr] 180 | | 'R' => '♖', [INFO] [stderr] ... | [INFO] [stderr] 190 | | _ => letter, [INFO] [stderr] 191 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/chess_board/mod.rs:211:13 [INFO] [stderr] | [INFO] [stderr] 211 | new_letter [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/chess_board/mod.rs:195:30 [INFO] [stderr] | [INFO] [stderr] 195 | let new_letter = match letter { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 196 | | 'K' => '♚', [INFO] [stderr] 197 | | 'Q' => '♛', [INFO] [stderr] 198 | | 'R' => '♜', [INFO] [stderr] ... | [INFO] [stderr] 208 | | _ => letter, [INFO] [stderr] 209 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/move_generator.rs:207:25 [INFO] [stderr] | [INFO] [stderr] 207 | / if piece_direction == N || piece_direction == N + N { [INFO] [stderr] 208 | | if destination_piece != '.' { [INFO] [stderr] 209 | | break; [INFO] [stderr] 210 | | } [INFO] [stderr] 211 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 207 | if (piece_direction == N || piece_direction == N + N) && destination_piece != '.' { [INFO] [stderr] 208 | break; [INFO] [stderr] 209 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/move_generator.rs:213:25 [INFO] [stderr] | [INFO] [stderr] 213 | / if piece_direction == N + N { [INFO] [stderr] 214 | | if square_index < (A1 + N) || current_position.get_square(square_index + N) != '.' { [INFO] [stderr] 215 | | break; [INFO] [stderr] 216 | | } [INFO] [stderr] 217 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 213 | if piece_direction == N + N && (square_index < (A1 + N) || current_position.get_square(square_index + N) != '.') { [INFO] [stderr] 214 | break; [INFO] [stderr] 215 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/move_generator.rs:219:25 [INFO] [stderr] | [INFO] [stderr] 219 | / if piece_direction == N + W || piece_direction == N + E { [INFO] [stderr] 220 | | if destination_piece == '.' { [INFO] [stderr] 221 | | break; [INFO] [stderr] 222 | | } [INFO] [stderr] 223 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 219 | if (piece_direction == N + W || piece_direction == N + E) && destination_piece == '.' { [INFO] [stderr] 220 | break; [INFO] [stderr] 221 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/searcher.rs:122:20 [INFO] [stderr] | [INFO] [stderr] 122 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 123 | | if self.move_generator.detect_check(current_node) { [INFO] [stderr] 124 | | return i64::max_value() - 10000 + depth as i64 [INFO] [stderr] 125 | | } else { [INFO] [stderr] 126 | | return i64::min_value() + 10000 - depth as i64 [INFO] [stderr] 127 | | } [INFO] [stderr] 128 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 122 | } else if self.move_generator.detect_check(current_node) { [INFO] [stderr] 123 | return i64::max_value() - 10000 + depth as i64 [INFO] [stderr] 124 | } else { [INFO] [stderr] 125 | return i64::min_value() + 10000 - depth as i64 [INFO] [stderr] 126 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/searcher.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | / if root { [INFO] [stderr] 142 | | if v > best_move_score { [INFO] [stderr] 143 | | best_move_score = v; [INFO] [stderr] 144 | | self.next_move = chess_move.clone(); [INFO] [stderr] 145 | | } [INFO] [stderr] 146 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 141 | if root && v > best_move_score { [INFO] [stderr] 142 | best_move_score = v; [INFO] [stderr] 143 | self.next_move = chess_move.clone(); [INFO] [stderr] 144 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/chess_board/evaluation.rs:144:9 [INFO] [stderr] | [INFO] [stderr] 144 | destination_score [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/chess_board/evaluation.rs:134:33 [INFO] [stderr] | [INFO] [stderr] 134 | let destination_score = match piece.to_ascii_uppercase() { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 135 | | 'P' => PAWN_SQUARE_TABLE[index], [INFO] [stderr] 136 | | 'N' => KNIGHT_SQUARE_TABLE[index], [INFO] [stderr] 137 | | 'B' => BISHOP_SQUARE_TABLE[index], [INFO] [stderr] ... | [INFO] [stderr] 141 | | _ => 0 [INFO] [stderr] 142 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/chess_board/mod.rs:214:9 [INFO] [stderr] | [INFO] [stderr] 214 | matched_letter [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/chess_board/mod.rs:176:30 [INFO] [stderr] | [INFO] [stderr] 176 | let matched_letter = if perspective_color { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 177 | | let new_letter = match letter { [INFO] [stderr] 178 | | 'K' => '♔', [INFO] [stderr] 179 | | 'Q' => '♕', [INFO] [stderr] ... | [INFO] [stderr] 211 | | new_letter [INFO] [stderr] 212 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/chess_board/mod.rs:193:13 [INFO] [stderr] | [INFO] [stderr] 193 | new_letter [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/chess_board/mod.rs:177:30 [INFO] [stderr] | [INFO] [stderr] 177 | let new_letter = match letter { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 178 | | 'K' => '♔', [INFO] [stderr] 179 | | 'Q' => '♕', [INFO] [stderr] 180 | | 'R' => '♖', [INFO] [stderr] ... | [INFO] [stderr] 190 | | _ => letter, [INFO] [stderr] 191 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/chess_board/mod.rs:211:13 [INFO] [stderr] | [INFO] [stderr] 211 | new_letter [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/chess_board/mod.rs:195:30 [INFO] [stderr] | [INFO] [stderr] 195 | let new_letter = match letter { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 196 | | 'K' => '♚', [INFO] [stderr] 197 | | 'Q' => '♛', [INFO] [stderr] 198 | | 'R' => '♜', [INFO] [stderr] ... | [INFO] [stderr] 208 | | _ => letter, [INFO] [stderr] 209 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/move_generator.rs:207:25 [INFO] [stderr] | [INFO] [stderr] 207 | / if piece_direction == N || piece_direction == N + N { [INFO] [stderr] 208 | | if destination_piece != '.' { [INFO] [stderr] 209 | | break; [INFO] [stderr] 210 | | } [INFO] [stderr] 211 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 207 | if (piece_direction == N || piece_direction == N + N) && destination_piece != '.' { [INFO] [stderr] 208 | break; [INFO] [stderr] 209 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/move_generator.rs:213:25 [INFO] [stderr] | [INFO] [stderr] 213 | / if piece_direction == N + N { [INFO] [stderr] 214 | | if square_index < (A1 + N) || current_position.get_square(square_index + N) != '.' { [INFO] [stderr] 215 | | break; [INFO] [stderr] 216 | | } [INFO] [stderr] 217 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 213 | if piece_direction == N + N && (square_index < (A1 + N) || current_position.get_square(square_index + N) != '.') { [INFO] [stderr] 214 | break; [INFO] [stderr] 215 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/move_generator.rs:219:25 [INFO] [stderr] | [INFO] [stderr] 219 | / if piece_direction == N + W || piece_direction == N + E { [INFO] [stderr] 220 | | if destination_piece == '.' { [INFO] [stderr] 221 | | break; [INFO] [stderr] 222 | | } [INFO] [stderr] 223 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 219 | if (piece_direction == N + W || piece_direction == N + E) && destination_piece == '.' { [INFO] [stderr] 220 | break; [INFO] [stderr] 221 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:289:81 [INFO] [stderr] | [INFO] [stderr] 289 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 4, false), 197281); [INFO] [stderr] | ^^^^^^ help: consider: `197_281` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:291:81 [INFO] [stderr] | [INFO] [stderr] 291 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 5, false), 4865609); [INFO] [stderr] | ^^^^^^^ help: consider: `4_865_609` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:310:81 [INFO] [stderr] | [INFO] [stderr] 310 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 4, false), 4085603); [INFO] [stderr] | ^^^^^^^ help: consider: `4_085_603` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:331:81 [INFO] [stderr] | [INFO] [stderr] 331 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 5, false), 674624); [INFO] [stderr] | ^^^^^^ help: consider: `674_624` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:333:81 [INFO] [stderr] | [INFO] [stderr] 333 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 6, false), 11030083); [INFO] [stderr] | ^^^^^^^^ help: consider: `11_030_083` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:352:81 [INFO] [stderr] | [INFO] [stderr] 352 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 4, false), 422333); [INFO] [stderr] | ^^^^^^ help: consider: `422_333` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:354:81 [INFO] [stderr] | [INFO] [stderr] 354 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 5, false), 15833292); [INFO] [stderr] | ^^^^^^^^ help: consider: `15_833_292` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:373:81 [INFO] [stderr] | [INFO] [stderr] 373 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 4, false), 2103487); [INFO] [stderr] | ^^^^^^^ help: consider: `2_103_487` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/move_generator.rs:392:81 [INFO] [stderr] | [INFO] [stderr] 392 | assert_eq!(move_generator.calculate_perft_depth(&test_board, 4, false), 3894594); [INFO] [stderr] | ^^^^^^^ help: consider: `3_894_594` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/searcher.rs:122:20 [INFO] [stderr] | [INFO] [stderr] 122 | } else { [INFO] [stderr] | ____________________^ [INFO] [stderr] 123 | | if self.move_generator.detect_check(current_node) { [INFO] [stderr] 124 | | return i64::max_value() - 10000 + depth as i64 [INFO] [stderr] 125 | | } else { [INFO] [stderr] 126 | | return i64::min_value() + 10000 - depth as i64 [INFO] [stderr] 127 | | } [INFO] [stderr] 128 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 122 | } else if self.move_generator.detect_check(current_node) { [INFO] [stderr] 123 | return i64::max_value() - 10000 + depth as i64 [INFO] [stderr] 124 | } else { [INFO] [stderr] 125 | return i64::min_value() + 10000 - depth as i64 [INFO] [stderr] 126 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/searcher.rs:141:17 [INFO] [stderr] | [INFO] [stderr] 141 | / if root { [INFO] [stderr] 142 | | if v > best_move_score { [INFO] [stderr] 143 | | best_move_score = v; [INFO] [stderr] 144 | | self.next_move = chess_move.clone(); [INFO] [stderr] 145 | | } [INFO] [stderr] 146 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 141 | if root && v > best_move_score { [INFO] [stderr] 142 | best_move_score = v; [INFO] [stderr] 143 | self.next_move = chess_move.clone(); [INFO] [stderr] 144 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused variable: `game` [INFO] [stderr] --> src/uci_interface.rs:37:15 [INFO] [stderr] | [INFO] [stderr] 37 | fn reset_game(game: &Game) { [INFO] [stderr] | ^^^^ help: consider using `_game` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `chess_board::ChessBoard` [INFO] [stderr] --> src/chess_board/mod.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> ChessBoard { [INFO] [stderr] 16 | | ChessBoard { [INFO] [stderr] 17 | | board_vector: Vec::new(), [INFO] [stderr] 18 | | current_color: true, [INFO] [stderr] ... | [INFO] [stderr] 25 | | } [INFO] [stderr] 26 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: defining a method called `clone` on this type; consider implementing the `std::clone::Clone` trait or choosing a less ambiguous name [INFO] [stderr] --> src/chess_board/mod.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn clone(&self) -> ChessBoard { [INFO] [stderr] 42 | | ChessBoard { [INFO] [stderr] 43 | | board_vector: self.board_vector.clone(), [INFO] [stderr] 44 | | last_move: self.last_move.clone(), [INFO] [stderr] 45 | | ..*self [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: unused variable: `game` [INFO] [stderr] --> src/uci_interface.rs:37:15 [INFO] [stderr] | [INFO] [stderr] 37 | fn reset_game(game: &Game) { [INFO] [stderr] | ^^^^ help: consider using `_game` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/chess_board/mod.rs:572:9 [INFO] [stderr] | [INFO] [stderr] 572 | / if self.en_passant_lifetime > 0 { [INFO] [stderr] 573 | | true [INFO] [stderr] 574 | | } else { [INFO] [stderr] 575 | | false [INFO] [stderr] 576 | | } [INFO] [stderr] | |_________^ help: you can reduce it to: `self.en_passant_lifetime > 0` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `move_generator::MoveGenerator` [INFO] [stderr] --> src/move_generator.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn new() -> MoveGenerator { [INFO] [stderr] 20 | | let mut directions: HashMap> = HashMap::new(); [INFO] [stderr] 21 | | [INFO] [stderr] 22 | | directions.insert('P', vec![N, N+N, N+W, N+E]); [INFO] [stderr] ... | [INFO] [stderr] 31 | | } [INFO] [stderr] 32 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 14 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/move_generator.rs:52:21 [INFO] [stderr] | [INFO] [stderr] 52 | destination = destination + piece_direction; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `destination += piece_direction` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: useless use of `vec!` [INFO] [stderr] --> src/move_generator.rs:114:51 [INFO] [stderr] | [INFO] [stderr] 114 | for promoted_piece in vec!['R', 'N', 'B', 'Q'] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use a slice directly: `&['R', 'N', 'B', 'Q']` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_vec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/move_generator.rs:193:54 [INFO] [stderr] | [INFO] [stderr] 193 | for &piece in ['P', 'N', 'B', 'R', 'Q', 'K'].into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::into_iter_on_array)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/move_generator.rs:198:21 [INFO] [stderr] | [INFO] [stderr] 198 | destination = destination + piece_direction; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `destination += piece_direction` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `searcher::Searcher` [INFO] [stderr] --> src/searcher.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / pub fn new() -> Searcher { [INFO] [stderr] 14 | | Searcher { [INFO] [stderr] 15 | | move_generator: MoveGenerator::new(), [INFO] [stderr] 16 | | next_move: ChessBoard::new(), [INFO] [stderr] ... | [INFO] [stderr] 19 | | } [INFO] [stderr] 20 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 12 | impl Default for searcher::Searcher { [INFO] [stderr] 13 | fn default() -> Self { [INFO] [stderr] 14 | Self::new() [INFO] [stderr] 15 | } [INFO] [stderr] 16 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/searcher.rs:37:20 [INFO] [stderr] | [INFO] [stderr] 37 | if root && next_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_moves.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/searcher.rs:51:19 [INFO] [stderr] | [INFO] [stderr] 51 | } else if next_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_moves.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/searcher.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | / fn alpha_beta_pruning(&mut self, current_node: &ChessBoard, depth: usize, alpha: i64, beta: i64, maximizing_player: bool, root: bool, even: bool) -> i64 { [INFO] [stderr] 87 | | if depth == 0 { [INFO] [stderr] 88 | | if even { [INFO] [stderr] 89 | | return current_node.get_score() [INFO] [stderr] ... | [INFO] [stderr] 166 | | v [INFO] [stderr] 167 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/searcher.rs:101:20 [INFO] [stderr] | [INFO] [stderr] 101 | if root && next_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_moves.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/searcher.rs:115:19 [INFO] [stderr] | [INFO] [stderr] 115 | } else if next_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_moves.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/uci_interface.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | let line = line.unwrap_or("null input".to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "null input".to_string())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/uci_interface.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | / match token { [INFO] [stderr] 84 | | "moves" => { [INFO] [stderr] 85 | | while let Some(chess_move) = token_sequence.next() { [INFO] [stderr] 86 | | moves.push(chess_move.to_string()); [INFO] [stderr] ... | [INFO] [stderr] 89 | | _ => {}, [INFO] [stderr] 90 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 83 | if let "moves" = token { [INFO] [stderr] 84 | while let Some(chess_move) = token_sequence.next() { [INFO] [stderr] 85 | moves.push(chess_move.to_string()); [INFO] [stderr] 86 | } [INFO] [stderr] 87 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `game::Game` [INFO] [stderr] --> src/game.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / pub fn new() -> Game { [INFO] [stderr] 14 | | Game { [INFO] [stderr] 15 | | current_position: ChessBoard::new(), [INFO] [stderr] 16 | | legal_moves: Vec::new(), [INFO] [stderr] ... | [INFO] [stderr] 19 | | } [INFO] [stderr] 20 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 12 | impl Default for game::Game { [INFO] [stderr] 13 | fn default() -> Self { [INFO] [stderr] 14 | Self::new() [INFO] [stderr] 15 | } [INFO] [stderr] 16 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `arsenic_chess_engine`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `chess_board::ChessBoard` [INFO] [stderr] --> src/chess_board/mod.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> ChessBoard { [INFO] [stderr] 16 | | ChessBoard { [INFO] [stderr] 17 | | board_vector: Vec::new(), [INFO] [stderr] 18 | | current_color: true, [INFO] [stderr] ... | [INFO] [stderr] 25 | | } [INFO] [stderr] 26 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 3 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: defining a method called `clone` on this type; consider implementing the `std::clone::Clone` trait or choosing a less ambiguous name [INFO] [stderr] --> src/chess_board/mod.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | / pub fn clone(&self) -> ChessBoard { [INFO] [stderr] 42 | | ChessBoard { [INFO] [stderr] 43 | | board_vector: self.board_vector.clone(), [INFO] [stderr] 44 | | last_move: self.last_move.clone(), [INFO] [stderr] 45 | | ..*self [INFO] [stderr] 46 | | } [INFO] [stderr] 47 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/chess_board/mod.rs:572:9 [INFO] [stderr] | [INFO] [stderr] 572 | / if self.en_passant_lifetime > 0 { [INFO] [stderr] 573 | | true [INFO] [stderr] 574 | | } else { [INFO] [stderr] 575 | | false [INFO] [stderr] 576 | | } [INFO] [stderr] | |_________^ help: you can reduce it to: `self.en_passant_lifetime > 0` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `move_generator::MoveGenerator` [INFO] [stderr] --> src/move_generator.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn new() -> MoveGenerator { [INFO] [stderr] 20 | | let mut directions: HashMap> = HashMap::new(); [INFO] [stderr] 21 | | [INFO] [stderr] 22 | | directions.insert('P', vec![N, N+N, N+W, N+E]); [INFO] [stderr] ... | [INFO] [stderr] 31 | | } [INFO] [stderr] 32 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 14 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/move_generator.rs:52:21 [INFO] [stderr] | [INFO] [stderr] 52 | destination = destination + piece_direction; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `destination += piece_direction` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: useless use of `vec!` [INFO] [stderr] --> src/move_generator.rs:114:51 [INFO] [stderr] | [INFO] [stderr] 114 | for promoted_piece in vec!['R', 'N', 'B', 'Q'] { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use a slice directly: `&['R', 'N', 'B', 'Q']` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_vec)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/move_generator.rs:193:54 [INFO] [stderr] | [INFO] [stderr] 193 | for &piece in ['P', 'N', 'B', 'R', 'Q', 'K'].into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::into_iter_on_array)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/move_generator.rs:198:21 [INFO] [stderr] | [INFO] [stderr] 198 | destination = destination + piece_direction; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `destination += piece_direction` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `searcher::Searcher` [INFO] [stderr] --> src/searcher.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / pub fn new() -> Searcher { [INFO] [stderr] 14 | | Searcher { [INFO] [stderr] 15 | | move_generator: MoveGenerator::new(), [INFO] [stderr] 16 | | next_move: ChessBoard::new(), [INFO] [stderr] ... | [INFO] [stderr] 19 | | } [INFO] [stderr] 20 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 12 | impl Default for searcher::Searcher { [INFO] [stderr] 13 | fn default() -> Self { [INFO] [stderr] 14 | Self::new() [INFO] [stderr] 15 | } [INFO] [stderr] 16 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/searcher.rs:37:20 [INFO] [stderr] | [INFO] [stderr] 37 | if root && next_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_moves.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/searcher.rs:51:19 [INFO] [stderr] | [INFO] [stderr] 51 | } else if next_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_moves.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (8/7) [INFO] [stderr] --> src/searcher.rs:86:5 [INFO] [stderr] | [INFO] [stderr] 86 | / fn alpha_beta_pruning(&mut self, current_node: &ChessBoard, depth: usize, alpha: i64, beta: i64, maximizing_player: bool, root: bool, even: bool) -> i64 { [INFO] [stderr] 87 | | if depth == 0 { [INFO] [stderr] 88 | | if even { [INFO] [stderr] 89 | | return current_node.get_score() [INFO] [stderr] ... | [INFO] [stderr] 166 | | v [INFO] [stderr] 167 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/searcher.rs:101:20 [INFO] [stderr] | [INFO] [stderr] 101 | if root && next_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_moves.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/searcher.rs:115:19 [INFO] [stderr] | [INFO] [stderr] 115 | } else if next_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `next_moves.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: use of `unwrap_or` followed by a function call [INFO] [stderr] --> src/uci_interface.rs:13:25 [INFO] [stderr] | [INFO] [stderr] 13 | let line = line.unwrap_or("null input".to_string()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| "null input".to_string())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/uci_interface.rs:83:9 [INFO] [stderr] | [INFO] [stderr] 83 | / match token { [INFO] [stderr] 84 | | "moves" => { [INFO] [stderr] 85 | | while let Some(chess_move) = token_sequence.next() { [INFO] [stderr] 86 | | moves.push(chess_move.to_string()); [INFO] [stderr] ... | [INFO] [stderr] 89 | | _ => {}, [INFO] [stderr] 90 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 83 | if let "moves" = token { [INFO] [stderr] 84 | while let Some(chess_move) = token_sequence.next() { [INFO] [stderr] 85 | moves.push(chess_move.to_string()); [INFO] [stderr] 86 | } [INFO] [stderr] 87 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `game::Game` [INFO] [stderr] --> src/game.rs:13:5 [INFO] [stderr] | [INFO] [stderr] 13 | / pub fn new() -> Game { [INFO] [stderr] 14 | | Game { [INFO] [stderr] 15 | | current_position: ChessBoard::new(), [INFO] [stderr] 16 | | legal_moves: Vec::new(), [INFO] [stderr] ... | [INFO] [stderr] 19 | | } [INFO] [stderr] 20 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 12 | impl Default for game::Game { [INFO] [stderr] 13 | fn default() -> Self { [INFO] [stderr] 14 | Self::new() [INFO] [stderr] 15 | } [INFO] [stderr] 16 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `arsenic_chess_engine`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "7733c656a6c22219a3f64fb97f617eaf7d9d6d5b4b137c8f99b8c24c9b8dabf6"` [INFO] running `"docker" "rm" "-f" "7733c656a6c22219a3f64fb97f617eaf7d9d6d5b4b137c8f99b8c24c9b8dabf6"` [INFO] [stdout] 7733c656a6c22219a3f64fb97f617eaf7d9d6d5b4b137c8f99b8c24c9b8dabf6