[INFO] updating cached repository mratsim/rustygo [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/mratsim/rustygo [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/mratsim/rustygo" "work/ex/clippy-test-run/sources/stable/gh/mratsim/rustygo"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/mratsim/rustygo'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/mratsim/rustygo" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/mratsim/rustygo"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/mratsim/rustygo'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] e854f826c2cb2062b78de769f203cc072df38dd9 [INFO] sha for GitHub repo mratsim/rustygo: e854f826c2cb2062b78de769f203cc072df38dd9 [INFO] validating manifest of mratsim/rustygo 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 mratsim/rustygo 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 mratsim/rustygo [INFO] finished frobbing mratsim/rustygo [INFO] frobbed toml for mratsim/rustygo written to work/ex/clippy-test-run/sources/stable/gh/mratsim/rustygo/Cargo.toml [INFO] started frobbing mratsim/rustygo [INFO] finished frobbing mratsim/rustygo [INFO] frobbed toml for mratsim/rustygo written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/mratsim/rustygo/Cargo.toml [INFO] crate mratsim/rustygo 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 mratsim/rustygo against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/mratsim/rustygo:/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] 4d7cc257fc0c932c8f8d823f3962e439a21155b10486a533520533d96d375e46 [INFO] running `"docker" "start" "-a" "4d7cc257fc0c932c8f8d823f3962e439a21155b10486a533520533d96d375e46"` [INFO] [stderr] Checking winapi v0.2.5 [INFO] [stderr] Checking libc v0.2.4 [INFO] [stderr] Checking itertools v0.4.6 [INFO] [stderr] Checking fnv v1.0.2 [INFO] [stderr] Checking advapi32-sys v0.1.2 [INFO] [stderr] Checking rand v0.3.12 [INFO] [stderr] Checking rusty_go v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/main.rs:24:29 [INFO] [stderr] | [INFO] [stderr] 24 | const UCT_EXPLO_BIAS: f32 = 1.4142135623730951; //sqrt(2) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `1.414_213_562_373_095_1` [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/main.rs:95:33 [INFO] [stderr] | [INFO] [stderr] 95 | XorShiftPlusRng { s: [w(0x193a6754a8a7d469), w(0x97830e05113ba7bb)] } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x193a_6754_a8a7_d469` [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/main.rs:95:56 [INFO] [stderr] | [INFO] [stderr] 95 | XorShiftPlusRng { s: [w(0x193a6754a8a7d469), w(0x97830e05113ba7bb)] } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x9783_0e05_113b_a7bb` [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: Try not to call a closure in the expression where it is declared. [INFO] [stderr] --> src/main.rs:370:17 [INFO] [stderr] | [INFO] [stderr] 370 | _ if (|| valid.iter().any(|x| *x == *idx))() => None, //https://www.reddit.com/r/rust/comments/2ztiag/cannot_mutably_borrow_in_a_pattern_guard/ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Try doing something like: : `valid.iter().any(|x| *x == *idx)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure_call [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/main.rs:24:29 [INFO] [stderr] | [INFO] [stderr] 24 | const UCT_EXPLO_BIAS: f32 = 1.4142135623730951; //sqrt(2) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `1.414_213_562_373_095_1` [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/main.rs:95:33 [INFO] [stderr] | [INFO] [stderr] 95 | XorShiftPlusRng { s: [w(0x193a6754a8a7d469), w(0x97830e05113ba7bb)] } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x193a_6754_a8a7_d469` [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/main.rs:95:56 [INFO] [stderr] | [INFO] [stderr] 95 | XorShiftPlusRng { s: [w(0x193a6754a8a7d469), w(0x97830e05113ba7bb)] } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider: `0x9783_0e05_113b_a7bb` [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: Try not to call a closure in the expression where it is declared. [INFO] [stderr] --> src/main.rs:370:17 [INFO] [stderr] | [INFO] [stderr] 370 | _ if (|| valid.iter().any(|x| *x == *idx))() => None, //https://www.reddit.com/r/rust/comments/2ztiag/cannot_mutably_borrow_in_a_pattern_guard/ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Try doing something like: : `valid.iter().any(|x| *x == *idx)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure_call [INFO] [stderr] [INFO] [stderr] warning: unused import: `BufRead` [INFO] [stderr] --> src/main.rs:19:22 [INFO] [stderr] | [INFO] [stderr] 19 | use std::io::{stdin, BufRead}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:659:13 [INFO] [stderr] | [INFO] [stderr] 659 | let mut tree = MCTS_tree { [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `SCORE_TO_BEAT` [INFO] [stderr] --> src/main.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | const SCORE_TO_BEAT: i16 = 361; //Number of Intersections (used for half-step counting) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/main.rs:525:5 [INFO] [stderr] | [INFO] [stderr] 525 | fn new() -> MCTS_tree{ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: float has excessive precision [INFO] [stderr] --> src/main.rs:24:29 [INFO] [stderr] | [INFO] [stderr] 24 | const UCT_EXPLO_BIAS: f32 = 1.4142135623730951; //sqrt(2) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.414_213_5` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::excessive_precision)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#excessive_precision [INFO] [stderr] [INFO] [stderr] error: approximate value of `f{32, 64}::consts::SQRT_2` found. Consider using it directly [INFO] [stderr] --> src/main.rs:24:29 [INFO] [stderr] | [INFO] [stderr] 24 | const UCT_EXPLO_BIAS: f32 = 1.4142135623730951; //sqrt(2) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::approx_constant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/main.rs:235:30 [INFO] [stderr] | [INFO] [stderr] 235 | let mut scoreboard = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [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] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/main.rs:241:33 [INFO] [stderr] | [INFO] [stderr] 241 | / scoreboard.neighbors(x) [INFO] [stderr] 242 | | .iter() [INFO] [stderr] 243 | | .map(|&y| y) [INFO] [stderr] | |____________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 241 | scoreboard.neighbors(x) [INFO] [stderr] 242 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/main.rs:250:33 [INFO] [stderr] | [INFO] [stderr] 250 | / scoreboard.neighbors(x) [INFO] [stderr] 251 | | .iter() [INFO] [stderr] 252 | | .map(|&y| y) [INFO] [stderr] | |____________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 250 | scoreboard.neighbors(x) [INFO] [stderr] 251 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:285:40 [INFO] [stderr] | [INFO] [stderr] 285 | match PartialOrd::partial_cmp(&(black_score as f32),&(KOMI + (white_score as f32))) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f32::from(black_score)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:285:70 [INFO] [stderr] | [INFO] [stderr] 285 | match PartialOrd::partial_cmp(&(black_score as f32),&(KOMI + (white_score as f32))) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f32::from(white_score)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `b` [INFO] [stderr] --> src/main.rs:306:18 [INFO] [stderr] | [INFO] [stderr] 306 | for i in 0..21 * 21 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 306 | for (i, ) in b.iter_mut().enumerate().take(21 * 21) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:322:5 [INFO] [stderr] | [INFO] [stderr] 322 | / fn index<'a>(&'a self, idx: usize) -> &'a Intersection { [INFO] [stderr] 323 | | &self.board[idx] [INFO] [stderr] 324 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:329:5 [INFO] [stderr] | [INFO] [stderr] 329 | / fn index_mut<'a>(&'a mut self, idx: usize) -> &'a mut Intersection { [INFO] [stderr] 330 | | self.board.index_mut(idx) [INFO] [stderr] 331 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: use of `#[inline]` on trait method `neighbors` which has no body [INFO] [stderr] --> src/main.rs:358:5 [INFO] [stderr] | [INFO] [stderr] 358 | #[inline] [INFO] [stderr] | _____-^^^^^^^^ [INFO] [stderr] 359 | | fn neighbors(&self, pos: u16) -> [u16; 4]; [INFO] [stderr] | |____- help: remove [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::inline_fn_without_body)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inline_fn_without_body [INFO] [stderr] [INFO] [stderr] warning: this `.filter_map` can be written more simply using `.filter` [INFO] [stderr] --> src/main.rs:368:6 [INFO] [stderr] | [INFO] [stderr] 368 | self.neighbors(candidate).iter() [INFO] [stderr] | _____________________^ [INFO] [stderr] 369 | | .filter_map(|idx| match idx { [INFO] [stderr] 370 | | _ if (|| valid.iter().any(|x| *x == *idx))() => None, //https://www.reddit.com/r/rust/comments/2ztiag/cannot_mutably_borrow_in_a_pattern_guard/ [INFO] [stderr] 371 | | _ if self.index(*idx as usize)==color => Some(idx), [INFO] [stderr] 372 | | _ => None, [INFO] [stderr] 373 | | }) [INFO] [stderr] | |______________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_filter_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/main.rs:384:17 [INFO] [stderr] | [INFO] [stderr] 384 | / self.neighbors(x) [INFO] [stderr] 385 | | .iter() [INFO] [stderr] 386 | | .map(|&y| y) [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 384 | self.neighbors(x) [INFO] [stderr] 385 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:393:5 [INFO] [stderr] | [INFO] [stderr] 393 | fn capture<'a>(&'a mut self, pos: u16) -> &'a mut Self; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:401:5 [INFO] [stderr] | [INFO] [stderr] 401 | / fn capture<'a>(&'a mut self, pos: u16) -> &'a mut Board19 { [INFO] [stderr] 402 | | for i in self.group(pos) { [INFO] [stderr] 403 | | self[i as usize] = Intersection::Empty; [INFO] [stderr] 404 | | } [INFO] [stderr] 405 | | self [INFO] [stderr] 406 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/main.rs:412:21 [INFO] [stderr] | [INFO] [stderr] 412 | let boardsize = 0..s + 1 + 1; [INFO] [stderr] | ^^^^^^^^^^^^ help: use: `0..=s + 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:457:5 [INFO] [stderr] | [INFO] [stderr] 457 | fn moveplayer<'a>(&'a mut self, pos: usize) -> bool; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:458:5 [INFO] [stderr] | [INFO] [stderr] 458 | fn movecore<'a>(&'a mut self, coord: usize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:482:5 [INFO] [stderr] | [INFO] [stderr] 482 | / fn movecore<'a>(&'a mut self, coord: usize){ [INFO] [stderr] 483 | | let mut c: Vec = self.neighbors(coord as u16) [INFO] [stderr] 484 | | .into_iter() [INFO] [stderr] 485 | | .filter(|&i| { [INFO] [stderr] ... | [INFO] [stderr] 494 | | } [INFO] [stderr] 495 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/main.rs:483:31 [INFO] [stderr] | [INFO] [stderr] 483 | let mut c: Vec = self.neighbors(coord as u16) [INFO] [stderr] | _______________________________^ [INFO] [stderr] 484 | | .into_iter() [INFO] [stderr] 485 | | .filter(|&i| { [INFO] [stderr] 486 | | self[*i as usize] == self.next_player && [INFO] [stderr] 487 | | self.pseudo_lib(*i) == 0 [INFO] [stderr] 488 | | }) [INFO] [stderr] 489 | | .map(|&x| x) [INFO] [stderr] | |______________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 483 | let mut c: Vec = self.neighbors(coord as u16) [INFO] [stderr] 484 | .into_iter() [INFO] [stderr] 485 | .filter(|&i| { [INFO] [stderr] 486 | self[*i as usize] == self.next_player && [INFO] [stderr] 487 | self.pseudo_lib(*i) == 0 [INFO] [stderr] 488 | }).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/main.rs:484:36 [INFO] [stderr] | [INFO] [stderr] 484 | .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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:497:5 [INFO] [stderr] | [INFO] [stderr] 497 | / fn moveplayer<'a>(&'a mut self, coord: usize) -> bool { [INFO] [stderr] 498 | | if self.is_player_move_valid(coord) { [INFO] [stderr] 499 | | self[coord as usize] = self.next_player; [INFO] [stderr] 500 | | self.next_player = self.flip_color(); [INFO] [stderr] ... | [INFO] [stderr] 506 | | true [INFO] [stderr] 507 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: type `MCTS_tree` should have a camel case name such as `MctsTree` [INFO] [stderr] --> src/main.rs:511:1 [INFO] [stderr] | [INFO] [stderr] 511 | / struct MCTS_tree{ [INFO] [stderr] 512 | | board_state: Board19, [INFO] [stderr] 513 | | nx_player: Intersection, [INFO] [stderr] 514 | | board_hash: u16, [INFO] [stderr] ... | [INFO] [stderr] 521 | | last_move: u16, [INFO] [stderr] 522 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_camel_case_types)] on by default [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/main.rs:542:33 [INFO] [stderr] | [INFO] [stderr] 542 | fn uct(&self, &parent_sims: &u32) -> f32 { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `u32` [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: `ref` directly on a function argument is ignored. Consider using a reference type instead. [INFO] [stderr] --> src/main.rs:547:27 [INFO] [stderr] | [INFO] [stderr] 547 | fn mcts_select(&self, ref tt: &HashMap) -> MCTS_tree { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/main.rs:559:28 [INFO] [stderr] | [INFO] [stderr] 559 | let mut nx_board = self.board_state.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.board_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/main.rs:596:28 [INFO] [stderr] | [INFO] [stderr] 596 | let mut simboard = self.board_state.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.board_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:619:12 [INFO] [stderr] | [INFO] [stderr] 619 | if self.board_state.empty_inter().len() == 0 { //TODO replace by legal move [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.board_state.empty_inter().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: using `clone` on a `Copy` type [INFO] [stderr] --> src/main.rs:623:29 [INFO] [stderr] | [INFO] [stderr] 623 | let mut tree_hash = th.clone(); [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `th` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:629:53 [INFO] [stderr] | [INFO] [stderr] 629 | println!("count of potential moves:\t{:?}", tt.get(&tree_hash).unwrap().board_state.empty_inter().len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:630:52 [INFO] [stderr] | [INFO] [stderr] 630 | println!("count of children moves:\t{:?}", tt.get(&tree_hash).unwrap().children.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:632:15 [INFO] [stderr] | [INFO] [stderr] 632 | while tt.get(&tree_hash).unwrap().board_state.empty_inter().len() == 0 && tt.get(&tree_hash).unwrap().children.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tt.get(&tree_hash).unwrap().board_state.empty_inter().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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:632:15 [INFO] [stderr] | [INFO] [stderr] 632 | while tt.get(&tree_hash).unwrap().board_state.empty_inter().len() == 0 && tt.get(&tree_hash).unwrap().children.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:632:83 [INFO] [stderr] | [INFO] [stderr] 632 | while tt.get(&tree_hash).unwrap().board_state.empty_inter().len() == 0 && tt.get(&tree_hash).unwrap().children.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tt.get(&tree_hash).unwrap().children.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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:632:83 [INFO] [stderr] | [INFO] [stderr] 632 | while tt.get(&tree_hash).unwrap().board_state.empty_inter().len() == 0 && tt.get(&tree_hash).unwrap().children.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:677:12 [INFO] [stderr] | [INFO] [stderr] 677 | if tt.get(&tree_hash).unwrap().simulate()==tt.get(&tree_hash).unwrap().nx_player { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:677:52 [INFO] [stderr] | [INFO] [stderr] 677 | if tt.get(&tree_hash).unwrap().simulate()==tt.get(&tree_hash).unwrap().nx_player { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:689:23 [INFO] [stderr] | [INFO] [stderr] 689 | let nx_move = tt.get(&tree_hash) [INFO] [stderr] | _______________________^ [INFO] [stderr] 690 | | .unwrap() [INFO] [stderr] | |_________________________________^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:692:34 [INFO] [stderr] | [INFO] [stderr] 692 | .map(|x| tt.get(x).unwrap().clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try this: `&tt[x]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:697:43 [INFO] [stderr] | [INFO] [stderr] 697 | println!("count children:\t{:?}", tt.get(&tree_hash) [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 698 | | .unwrap() [INFO] [stderr] | |_________________________________^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:727:5 [INFO] [stderr] | [INFO] [stderr] 727 | / fn index<'a>(&'a self, idx: usize) -> &'a Zobrist { [INFO] [stderr] 728 | | &self.random_hashes[idx] [INFO] [stderr] 729 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/main.rs:793:9 [INFO] [stderr] | [INFO] [stderr] 793 | / stdin() [INFO] [stderr] 794 | | .read_line(&mut input) [INFO] [stderr] 795 | | .ok() [INFO] [stderr] 796 | | .expect("Failed to read line."); [INFO] [stderr] | |___________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rusty_go`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: unused import: `BufRead` [INFO] [stderr] --> src/main.rs:19:22 [INFO] [stderr] | [INFO] [stderr] 19 | use std::io::{stdin, BufRead}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/main.rs:659:13 [INFO] [stderr] | [INFO] [stderr] 659 | let mut tree = MCTS_tree { [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `SCORE_TO_BEAT` [INFO] [stderr] --> src/main.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | const SCORE_TO_BEAT: i16 = 361; //Number of Intersections (used for half-step counting) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/main.rs:525:5 [INFO] [stderr] | [INFO] [stderr] 525 | fn new() -> MCTS_tree{ [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: float has excessive precision [INFO] [stderr] --> src/main.rs:24:29 [INFO] [stderr] | [INFO] [stderr] 24 | const UCT_EXPLO_BIAS: f32 = 1.4142135623730951; //sqrt(2) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.414_213_5` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::excessive_precision)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#excessive_precision [INFO] [stderr] [INFO] [stderr] error: approximate value of `f{32, 64}::consts::SQRT_2` found. Consider using it directly [INFO] [stderr] --> src/main.rs:24:29 [INFO] [stderr] | [INFO] [stderr] 24 | const UCT_EXPLO_BIAS: f32 = 1.4142135623730951; //sqrt(2) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::approx_constant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/main.rs:235:30 [INFO] [stderr] | [INFO] [stderr] 235 | let mut scoreboard = self.clone(); [INFO] [stderr] | ^^^^^^^^^^^^ help: try dereferencing it: `*self` [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] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/main.rs:241:33 [INFO] [stderr] | [INFO] [stderr] 241 | / scoreboard.neighbors(x) [INFO] [stderr] 242 | | .iter() [INFO] [stderr] 243 | | .map(|&y| y) [INFO] [stderr] | |____________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 241 | scoreboard.neighbors(x) [INFO] [stderr] 242 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/main.rs:250:33 [INFO] [stderr] | [INFO] [stderr] 250 | / scoreboard.neighbors(x) [INFO] [stderr] 251 | | .iter() [INFO] [stderr] 252 | | .map(|&y| y) [INFO] [stderr] | |____________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 250 | scoreboard.neighbors(x) [INFO] [stderr] 251 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:285:40 [INFO] [stderr] | [INFO] [stderr] 285 | match PartialOrd::partial_cmp(&(black_score as f32),&(KOMI + (white_score as f32))) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f32::from(black_score)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/main.rs:285:70 [INFO] [stderr] | [INFO] [stderr] 285 | match PartialOrd::partial_cmp(&(black_score as f32),&(KOMI + (white_score as f32))) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try: `f32::from(white_score)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `b` [INFO] [stderr] --> src/main.rs:306:18 [INFO] [stderr] | [INFO] [stderr] 306 | for i in 0..21 * 21 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 306 | for (i, ) in b.iter_mut().enumerate().take(21 * 21) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:322:5 [INFO] [stderr] | [INFO] [stderr] 322 | / fn index<'a>(&'a self, idx: usize) -> &'a Intersection { [INFO] [stderr] 323 | | &self.board[idx] [INFO] [stderr] 324 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:329:5 [INFO] [stderr] | [INFO] [stderr] 329 | / fn index_mut<'a>(&'a mut self, idx: usize) -> &'a mut Intersection { [INFO] [stderr] 330 | | self.board.index_mut(idx) [INFO] [stderr] 331 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] error: use of `#[inline]` on trait method `neighbors` which has no body [INFO] [stderr] --> src/main.rs:358:5 [INFO] [stderr] | [INFO] [stderr] 358 | #[inline] [INFO] [stderr] | _____-^^^^^^^^ [INFO] [stderr] 359 | | fn neighbors(&self, pos: u16) -> [u16; 4]; [INFO] [stderr] | |____- help: remove [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::inline_fn_without_body)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inline_fn_without_body [INFO] [stderr] [INFO] [stderr] warning: this `.filter_map` can be written more simply using `.filter` [INFO] [stderr] --> src/main.rs:368:6 [INFO] [stderr] | [INFO] [stderr] 368 | self.neighbors(candidate).iter() [INFO] [stderr] | _____________________^ [INFO] [stderr] 369 | | .filter_map(|idx| match idx { [INFO] [stderr] 370 | | _ if (|| valid.iter().any(|x| *x == *idx))() => None, //https://www.reddit.com/r/rust/comments/2ztiag/cannot_mutably_borrow_in_a_pattern_guard/ [INFO] [stderr] 371 | | _ if self.index(*idx as usize)==color => Some(idx), [INFO] [stderr] 372 | | _ => None, [INFO] [stderr] 373 | | }) [INFO] [stderr] | |______________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_filter_map)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/main.rs:384:17 [INFO] [stderr] | [INFO] [stderr] 384 | / self.neighbors(x) [INFO] [stderr] 385 | | .iter() [INFO] [stderr] 386 | | .map(|&y| y) [INFO] [stderr] | |________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 384 | self.neighbors(x) [INFO] [stderr] 385 | .iter().cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:393:5 [INFO] [stderr] | [INFO] [stderr] 393 | fn capture<'a>(&'a mut self, pos: u16) -> &'a mut Self; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:401:5 [INFO] [stderr] | [INFO] [stderr] 401 | / fn capture<'a>(&'a mut self, pos: u16) -> &'a mut Board19 { [INFO] [stderr] 402 | | for i in self.group(pos) { [INFO] [stderr] 403 | | self[i as usize] = Intersection::Empty; [INFO] [stderr] 404 | | } [INFO] [stderr] 405 | | self [INFO] [stderr] 406 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/main.rs:412:21 [INFO] [stderr] | [INFO] [stderr] 412 | let boardsize = 0..s + 1 + 1; [INFO] [stderr] | ^^^^^^^^^^^^ help: use: `0..=s + 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:457:5 [INFO] [stderr] | [INFO] [stderr] 457 | fn moveplayer<'a>(&'a mut self, pos: usize) -> bool; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:458:5 [INFO] [stderr] | [INFO] [stderr] 458 | fn movecore<'a>(&'a mut self, coord: usize); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:482:5 [INFO] [stderr] | [INFO] [stderr] 482 | / fn movecore<'a>(&'a mut self, coord: usize){ [INFO] [stderr] 483 | | let mut c: Vec = self.neighbors(coord as u16) [INFO] [stderr] 484 | | .into_iter() [INFO] [stderr] 485 | | .filter(|&i| { [INFO] [stderr] ... | [INFO] [stderr] 494 | | } [INFO] [stderr] 495 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/main.rs:483:31 [INFO] [stderr] | [INFO] [stderr] 483 | let mut c: Vec = self.neighbors(coord as u16) [INFO] [stderr] | _______________________________^ [INFO] [stderr] 484 | | .into_iter() [INFO] [stderr] 485 | | .filter(|&i| { [INFO] [stderr] 486 | | self[*i as usize] == self.next_player && [INFO] [stderr] 487 | | self.pseudo_lib(*i) == 0 [INFO] [stderr] 488 | | }) [INFO] [stderr] 489 | | .map(|&x| x) [INFO] [stderr] | |______________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] help: Consider calling the dedicated `cloned` method [INFO] [stderr] | [INFO] [stderr] 483 | let mut c: Vec = self.neighbors(coord as u16) [INFO] [stderr] 484 | .into_iter() [INFO] [stderr] 485 | .filter(|&i| { [INFO] [stderr] 486 | self[*i as usize] == self.next_player && [INFO] [stderr] 487 | self.pseudo_lib(*i) == 0 [INFO] [stderr] 488 | }).cloned() [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/main.rs:484:36 [INFO] [stderr] | [INFO] [stderr] 484 | .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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:497:5 [INFO] [stderr] | [INFO] [stderr] 497 | / fn moveplayer<'a>(&'a mut self, coord: usize) -> bool { [INFO] [stderr] 498 | | if self.is_player_move_valid(coord) { [INFO] [stderr] 499 | | self[coord as usize] = self.next_player; [INFO] [stderr] 500 | | self.next_player = self.flip_color(); [INFO] [stderr] ... | [INFO] [stderr] 506 | | true [INFO] [stderr] 507 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: type `MCTS_tree` should have a camel case name such as `MctsTree` [INFO] [stderr] --> src/main.rs:511:1 [INFO] [stderr] | [INFO] [stderr] 511 | / struct MCTS_tree{ [INFO] [stderr] 512 | | board_state: Board19, [INFO] [stderr] 513 | | nx_player: Intersection, [INFO] [stderr] 514 | | board_hash: u16, [INFO] [stderr] ... | [INFO] [stderr] 521 | | last_move: u16, [INFO] [stderr] 522 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_camel_case_types)] on by default [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/main.rs:542:33 [INFO] [stderr] | [INFO] [stderr] 542 | fn uct(&self, &parent_sims: &u32) -> f32 { [INFO] [stderr] | ^^^^ help: consider passing by value instead: `u32` [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: `ref` directly on a function argument is ignored. Consider using a reference type instead. [INFO] [stderr] --> src/main.rs:547:27 [INFO] [stderr] | [INFO] [stderr] 547 | fn mcts_select(&self, ref tt: &HashMap) -> MCTS_tree { [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/main.rs:559:28 [INFO] [stderr] | [INFO] [stderr] 559 | let mut nx_board = self.board_state.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.board_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/main.rs:596:28 [INFO] [stderr] | [INFO] [stderr] 596 | let mut simboard = self.board_state.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.board_state` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:619:12 [INFO] [stderr] | [INFO] [stderr] 619 | if self.board_state.empty_inter().len() == 0 { //TODO replace by legal move [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.board_state.empty_inter().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: using `clone` on a `Copy` type [INFO] [stderr] --> src/main.rs:623:29 [INFO] [stderr] | [INFO] [stderr] 623 | let mut tree_hash = th.clone(); [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `th` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:629:53 [INFO] [stderr] | [INFO] [stderr] 629 | println!("count of potential moves:\t{:?}", tt.get(&tree_hash).unwrap().board_state.empty_inter().len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:630:52 [INFO] [stderr] | [INFO] [stderr] 630 | println!("count of children moves:\t{:?}", tt.get(&tree_hash).unwrap().children.len()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:632:15 [INFO] [stderr] | [INFO] [stderr] 632 | while tt.get(&tree_hash).unwrap().board_state.empty_inter().len() == 0 && tt.get(&tree_hash).unwrap().children.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `tt.get(&tree_hash).unwrap().board_state.empty_inter().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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:632:15 [INFO] [stderr] | [INFO] [stderr] 632 | while tt.get(&tree_hash).unwrap().board_state.empty_inter().len() == 0 && tt.get(&tree_hash).unwrap().children.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/main.rs:632:83 [INFO] [stderr] | [INFO] [stderr] 632 | while tt.get(&tree_hash).unwrap().board_state.empty_inter().len() == 0 && tt.get(&tree_hash).unwrap().children.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!tt.get(&tree_hash).unwrap().children.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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:632:83 [INFO] [stderr] | [INFO] [stderr] 632 | while tt.get(&tree_hash).unwrap().board_state.empty_inter().len() == 0 && tt.get(&tree_hash).unwrap().children.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:677:12 [INFO] [stderr] | [INFO] [stderr] 677 | if tt.get(&tree_hash).unwrap().simulate()==tt.get(&tree_hash).unwrap().nx_player { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:677:52 [INFO] [stderr] | [INFO] [stderr] 677 | if tt.get(&tree_hash).unwrap().simulate()==tt.get(&tree_hash).unwrap().nx_player { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:689:23 [INFO] [stderr] | [INFO] [stderr] 689 | let nx_move = tt.get(&tree_hash) [INFO] [stderr] | _______________________^ [INFO] [stderr] 690 | | .unwrap() [INFO] [stderr] | |_________________________________^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:692:34 [INFO] [stderr] | [INFO] [stderr] 692 | .map(|x| tt.get(x).unwrap().clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try this: `&tt[x]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/main.rs:697:43 [INFO] [stderr] | [INFO] [stderr] 697 | println!("count children:\t{:?}", tt.get(&tree_hash) [INFO] [stderr] | ___________________________________________^ [INFO] [stderr] 698 | | .unwrap() [INFO] [stderr] | |_________________________________^ help: try this: `&tt[&tree_hash]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/main.rs:727:5 [INFO] [stderr] | [INFO] [stderr] 727 | / fn index<'a>(&'a self, idx: usize) -> &'a Zobrist { [INFO] [stderr] 728 | | &self.random_hashes[idx] [INFO] [stderr] 729 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/main.rs:793:9 [INFO] [stderr] | [INFO] [stderr] 793 | / stdin() [INFO] [stderr] 794 | | .read_line(&mut input) [INFO] [stderr] 795 | | .ok() [INFO] [stderr] 796 | | .expect("Failed to read line."); [INFO] [stderr] | |___________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ok_expect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `rusty_go`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "4d7cc257fc0c932c8f8d823f3962e439a21155b10486a533520533d96d375e46"` [INFO] running `"docker" "rm" "-f" "4d7cc257fc0c932c8f8d823f3962e439a21155b10486a533520533d96d375e46"` [INFO] [stdout] 4d7cc257fc0c932c8f8d823f3962e439a21155b10486a533520533d96d375e46