[INFO] updating cached repository venil7/rust-minimax [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/venil7/rust-minimax [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/venil7/rust-minimax" "work/ex/clippy-test-run/sources/stable/gh/venil7/rust-minimax"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/venil7/rust-minimax'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/venil7/rust-minimax" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/venil7/rust-minimax"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/venil7/rust-minimax'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] a0791ab116fdac8a7a1634d97b3c8d06ecd86179 [INFO] sha for GitHub repo venil7/rust-minimax: a0791ab116fdac8a7a1634d97b3c8d06ecd86179 [INFO] validating manifest of venil7/rust-minimax 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 venil7/rust-minimax 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 venil7/rust-minimax [INFO] finished frobbing venil7/rust-minimax [INFO] frobbed toml for venil7/rust-minimax written to work/ex/clippy-test-run/sources/stable/gh/venil7/rust-minimax/Cargo.toml [INFO] started frobbing venil7/rust-minimax [INFO] finished frobbing venil7/rust-minimax [INFO] frobbed toml for venil7/rust-minimax written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/venil7/rust-minimax/Cargo.toml [INFO] crate venil7/rust-minimax 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 venil7/rust-minimax against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/venil7/rust-minimax:/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] 99284af8d48588d9c606ccab56aaf2bcfde0383048fcbe965614bef334ed4732 [INFO] running `"docker" "start" "-a" "99284af8d48588d9c606ccab56aaf2bcfde0383048fcbe965614bef334ed4732"` [INFO] [stderr] Compiling wasm-bindgen-shared v0.2.29 [INFO] [stderr] Compiling lazy_static v1.2.0 [INFO] [stderr] Compiling wasm-bindgen v0.2.29 [INFO] [stderr] Compiling syn v0.15.22 [INFO] [stderr] Compiling wasm-bindgen-backend v0.2.29 [INFO] [stderr] Compiling wasm-bindgen-macro-support v0.2.29 [INFO] [stderr] Compiling wasm-bindgen-macro v0.2.29 [INFO] [stderr] Checking js-sys v0.3.6 [INFO] [stderr] Checking darkruby-tictactoe v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/board.rs:33:21 [INFO] [stderr] | [INFO] [stderr] 33 | fields: fields, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `fields` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/eval.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | position: position, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `position` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/eval.rs:14:13 [INFO] [stderr] | [INFO] [stderr] 14 | score: score, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `score` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/eval.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | write!(f, "pos: {},score: {}\n", self.position, self.score) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/board.rs:33:21 [INFO] [stderr] | [INFO] [stderr] 33 | fields: fields, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `fields` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/eval.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | position: position, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `position` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/eval.rs:14:13 [INFO] [stderr] | [INFO] [stderr] 14 | score: score, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `score` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/eval.rs:41:9 [INFO] [stderr] | [INFO] [stderr] 41 | write!(f, "pos: {},score: {}\n", self.position, self.score) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/board.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / return match state { [INFO] [stderr] 102 | | State { [INFO] [stderr] 103 | | game_over: true, [INFO] [stderr] 104 | | winner: Player::CPU, [INFO] [stderr] ... | [INFO] [stderr] 150 | | } [INFO] [stderr] 151 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 101 | match state { [INFO] [stderr] 102 | State { [INFO] [stderr] 103 | game_over: true, [INFO] [stderr] 104 | winner: Player::CPU, [INFO] [stderr] 105 | .. [INFO] [stderr] 106 | } => Eval { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/board.rs:101:9 [INFO] [stderr] | [INFO] [stderr] 101 | / return match state { [INFO] [stderr] 102 | | State { [INFO] [stderr] 103 | | game_over: true, [INFO] [stderr] 104 | | winner: Player::CPU, [INFO] [stderr] ... | [INFO] [stderr] 150 | | } [INFO] [stderr] 151 | | }; [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 101 | match state { [INFO] [stderr] 102 | State { [INFO] [stderr] 103 | game_over: true, [INFO] [stderr] 104 | winner: Player::CPU, [INFO] [stderr] 105 | .. [INFO] [stderr] 106 | } => Eval { [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/field.rs:14:20 [INFO] [stderr] | [INFO] [stderr] 14 | pub fn reverse(&self) -> Field { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/field.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | / match self { [INFO] [stderr] 16 | | &Field::Nought => Field::Cross, [INFO] [stderr] 17 | | &Field::Cross => Field::Nought, [INFO] [stderr] 18 | | _ => panic!("Cant reverese empty"), [INFO] [stderr] 19 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 15 | match *self { [INFO] [stderr] 16 | Field::Nought => Field::Cross, [INFO] [stderr] 17 | Field::Cross => Field::Nought, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/field.rs:25:9 [INFO] [stderr] | [INFO] [stderr] 25 | / match self { [INFO] [stderr] 26 | | &Field::Empty => write!(f, "[ ]"), [INFO] [stderr] 27 | | &Field::Nought => write!(f, "[0]"), [INFO] [stderr] 28 | | &Field::Cross => write!(f, "[X]"), [INFO] [stderr] 29 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 25 | match *self { [INFO] [stderr] 26 | Field::Empty => write!(f, "[ ]"), [INFO] [stderr] 27 | Field::Nought => write!(f, "[0]"), [INFO] [stderr] 28 | Field::Cross => write!(f, "[X]"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `board::Board` [INFO] [stderr] --> src/board.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | / pub fn new() -> Board { [INFO] [stderr] 17 | | Board { [INFO] [stderr] 18 | | fields: [Field::Empty; LENGTH], [INFO] [stderr] 19 | | last_move: (0 - 1) as u8, [INFO] [stderr] 20 | | } [INFO] [stderr] 21 | | } [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] 15 | impl Default for board::Board { [INFO] [stderr] 16 | fn default() -> Self { [INFO] [stderr] 17 | Self::new() [INFO] [stderr] 18 | } [INFO] [stderr] 19 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/board.rs:28:26 [INFO] [stderr] | [INFO] [stderr] 28 | let mut fields = self.fields.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.fields` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/board.rs:60:34 [INFO] [stderr] | [INFO] [stderr] 60 | for comb in combinations.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: length comparison to zero [INFO] [stderr] --> src/board.rs:92:12 [INFO] [stderr] | [INFO] [stderr] 92 | if state.possible_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `state.possible_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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/player.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | / match self { [INFO] [stderr] 16 | | &Player::None => write!(f, "None"), [INFO] [stderr] 17 | | &Player::CPU => write!(f, "CPU"), [INFO] [stderr] 18 | | &Player::Human => write!(f, "Human"), [INFO] [stderr] 19 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 15 | match *self { [INFO] [stderr] 16 | Player::None => write!(f, "None"), [INFO] [stderr] 17 | Player::CPU => write!(f, "CPU"), [INFO] [stderr] 18 | Player::Human => write!(f, "Human"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `game::Game` [INFO] [stderr] --> src/game.rs:14:3 [INFO] [stderr] | [INFO] [stderr] 14 | / pub fn new() -> Game { [INFO] [stderr] 15 | | Game { [INFO] [stderr] 16 | | board: Board::new(), [INFO] [stderr] 17 | | } [INFO] [stderr] 18 | | } [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] 13 | impl Default for game::Game { [INFO] [stderr] 14 | fn default() -> Self { [INFO] [stderr] 15 | Self::new() [INFO] [stderr] 16 | } [INFO] [stderr] 17 | } [INFO] [stderr] | [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/game.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | / match result { [INFO] [stderr] 23 | | Ok(board) => { [INFO] [stderr] 24 | | let board = board.cpu(); [INFO] [stderr] 25 | | let game = Game { board }; [INFO] [stderr] ... | [INFO] [stderr] 35 | | _ => (), [INFO] [stderr] 36 | | } [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] 22 | if let Ok(board) = result { [INFO] [stderr] 23 | let board = board.cpu(); [INFO] [stderr] 24 | let game = Game { board }; [INFO] [stderr] 25 | let state = game.board.state(); [INFO] [stderr] 26 | let this = JsValue::NULL; [INFO] [stderr] 27 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `darkruby-tictactoe`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/field.rs:14:20 [INFO] [stderr] | [INFO] [stderr] 14 | pub fn reverse(&self) -> Field { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/field.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | / match self { [INFO] [stderr] 16 | | &Field::Nought => Field::Cross, [INFO] [stderr] 17 | | &Field::Cross => Field::Nought, [INFO] [stderr] 18 | | _ => panic!("Cant reverese empty"), [INFO] [stderr] 19 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 15 | match *self { [INFO] [stderr] 16 | Field::Nought => Field::Cross, [INFO] [stderr] 17 | Field::Cross => Field::Nought, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/field.rs:25:9 [INFO] [stderr] | [INFO] [stderr] 25 | / match self { [INFO] [stderr] 26 | | &Field::Empty => write!(f, "[ ]"), [INFO] [stderr] 27 | | &Field::Nought => write!(f, "[0]"), [INFO] [stderr] 28 | | &Field::Cross => write!(f, "[X]"), [INFO] [stderr] 29 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 25 | match *self { [INFO] [stderr] 26 | Field::Empty => write!(f, "[ ]"), [INFO] [stderr] 27 | Field::Nought => write!(f, "[0]"), [INFO] [stderr] 28 | Field::Cross => write!(f, "[X]"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `board::Board` [INFO] [stderr] --> src/board.rs:16:5 [INFO] [stderr] | [INFO] [stderr] 16 | / pub fn new() -> Board { [INFO] [stderr] 17 | | Board { [INFO] [stderr] 18 | | fields: [Field::Empty; LENGTH], [INFO] [stderr] 19 | | last_move: (0 - 1) as u8, [INFO] [stderr] 20 | | } [INFO] [stderr] 21 | | } [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] 15 | impl Default for board::Board { [INFO] [stderr] 16 | fn default() -> Self { [INFO] [stderr] 17 | Self::new() [INFO] [stderr] 18 | } [INFO] [stderr] 19 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/board.rs:28:26 [INFO] [stderr] | [INFO] [stderr] 28 | let mut fields = self.fields.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.fields` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/board.rs:60:34 [INFO] [stderr] | [INFO] [stderr] 60 | for comb in combinations.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: length comparison to zero [INFO] [stderr] --> src/board.rs:92:12 [INFO] [stderr] | [INFO] [stderr] 92 | if state.possible_moves.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `state.possible_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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/player.rs:15:9 [INFO] [stderr] | [INFO] [stderr] 15 | / match self { [INFO] [stderr] 16 | | &Player::None => write!(f, "None"), [INFO] [stderr] 17 | | &Player::CPU => write!(f, "CPU"), [INFO] [stderr] 18 | | &Player::Human => write!(f, "Human"), [INFO] [stderr] 19 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 15 | match *self { [INFO] [stderr] 16 | Player::None => write!(f, "None"), [INFO] [stderr] 17 | Player::CPU => write!(f, "CPU"), [INFO] [stderr] 18 | Player::Human => write!(f, "Human"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `game::Game` [INFO] [stderr] --> src/game.rs:14:3 [INFO] [stderr] | [INFO] [stderr] 14 | / pub fn new() -> Game { [INFO] [stderr] 15 | | Game { [INFO] [stderr] 16 | | board: Board::new(), [INFO] [stderr] 17 | | } [INFO] [stderr] 18 | | } [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] 13 | impl Default for game::Game { [INFO] [stderr] 14 | fn default() -> Self { [INFO] [stderr] 15 | Self::new() [INFO] [stderr] 16 | } [INFO] [stderr] 17 | } [INFO] [stderr] | [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/game.rs:22:5 [INFO] [stderr] | [INFO] [stderr] 22 | / match result { [INFO] [stderr] 23 | | Ok(board) => { [INFO] [stderr] 24 | | let board = board.cpu(); [INFO] [stderr] 25 | | let game = Game { board }; [INFO] [stderr] ... | [INFO] [stderr] 35 | | _ => (), [INFO] [stderr] 36 | | } [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] 22 | if let Ok(board) = result { [INFO] [stderr] 23 | let board = board.cpu(); [INFO] [stderr] 24 | let game = Game { board }; [INFO] [stderr] 25 | let state = game.board.state(); [INFO] [stderr] 26 | let this = JsValue::NULL; [INFO] [stderr] 27 | [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `darkruby-tictactoe`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "99284af8d48588d9c606ccab56aaf2bcfde0383048fcbe965614bef334ed4732"` [INFO] running `"docker" "rm" "-f" "99284af8d48588d9c606ccab56aaf2bcfde0383048fcbe965614bef334ed4732"` [INFO] [stdout] 99284af8d48588d9c606ccab56aaf2bcfde0383048fcbe965614bef334ed4732