[INFO] updating cached repository timokau/rust-tic_tac_toe [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/timokau/rust-tic_tac_toe [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/timokau/rust-tic_tac_toe" "work/ex/clippy-test-run/sources/stable/gh/timokau/rust-tic_tac_toe"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/timokau/rust-tic_tac_toe'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/timokau/rust-tic_tac_toe" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/timokau/rust-tic_tac_toe"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/timokau/rust-tic_tac_toe'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 5f5fcd42cdea0fb1bcc7eb4593f6f7d70c8e26b7 [INFO] sha for GitHub repo timokau/rust-tic_tac_toe: 5f5fcd42cdea0fb1bcc7eb4593f6f7d70c8e26b7 [INFO] validating manifest of timokau/rust-tic_tac_toe 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 timokau/rust-tic_tac_toe 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 timokau/rust-tic_tac_toe [INFO] finished frobbing timokau/rust-tic_tac_toe [INFO] frobbed toml for timokau/rust-tic_tac_toe written to work/ex/clippy-test-run/sources/stable/gh/timokau/rust-tic_tac_toe/Cargo.toml [INFO] started frobbing timokau/rust-tic_tac_toe [INFO] finished frobbing timokau/rust-tic_tac_toe [INFO] frobbed toml for timokau/rust-tic_tac_toe written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/timokau/rust-tic_tac_toe/Cargo.toml [INFO] crate timokau/rust-tic_tac_toe 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 timokau/rust-tic_tac_toe against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/timokau/rust-tic_tac_toe:/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 -Dclippy::into_iter_on_array" "-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] 5d16aea4a56797fd2fab09342341c6a969a6fbe271777cc878549da1c6638aba [INFO] running `"docker" "start" "-a" "5d16aea4a56797fd2fab09342341c6a969a6fbe271777cc878549da1c6638aba"` [INFO] [stderr] Checking tic_tac_toe v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/game/grid.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | column_count: column_count, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `column_count` [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/game/grid.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | row_count: row_count, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `row_count` [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/player/terminal.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/player/ki.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/player/ki.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | row: row, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `row` [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/player/ki.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | column: column, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `column` [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/game/grid.rs:26:13 [INFO] [stderr] | [INFO] [stderr] 26 | column_count: column_count, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `column_count` [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/game/grid.rs:27:13 [INFO] [stderr] | [INFO] [stderr] 27 | row_count: row_count, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `row_count` [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/player/terminal.rs:19:13 [INFO] [stderr] | [INFO] [stderr] 19 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/player/ki.rs:13:13 [INFO] [stderr] | [INFO] [stderr] 13 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/player/ki.rs:35:13 [INFO] [stderr] | [INFO] [stderr] 35 | row: row, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `row` [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/player/ki.rs:36:13 [INFO] [stderr] | [INFO] [stderr] 36 | column: column, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `column` [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: unneeded return statement [INFO] [stderr] --> src/game/grid.rs:58:17 [INFO] [stderr] | [INFO] [stderr] 58 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [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] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/game/grid.rs:60:39 [INFO] [stderr] | [INFO] [stderr] 60 | &mut CellState::Set(_) => return false, [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/game/grid.rs:58:17 [INFO] [stderr] | [INFO] [stderr] 58 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [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] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/game/grid.rs:60:39 [INFO] [stderr] | [INFO] [stderr] 60 | &mut CellState::Set(_) => return false, [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/game/grid.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | / match cell { [INFO] [stderr] 56 | | &mut CellState::Unset => { [INFO] [stderr] 57 | | *cell = CellState::Set(player); [INFO] [stderr] 58 | | return true; [INFO] [stderr] 59 | | }, [INFO] [stderr] 60 | | &mut CellState::Set(_) => return false, [INFO] [stderr] 61 | | } [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] 55 | match *cell { [INFO] [stderr] 56 | CellState::Unset => { [INFO] [stderr] 57 | *cell = CellState::Set(player); [INFO] [stderr] 58 | return true; [INFO] [stderr] 59 | }, [INFO] [stderr] 60 | CellState::Set(_) => return false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/game/grid.rs:55:9 [INFO] [stderr] | [INFO] [stderr] 55 | / match cell { [INFO] [stderr] 56 | | &mut CellState::Unset => { [INFO] [stderr] 57 | | *cell = CellState::Set(player); [INFO] [stderr] 58 | | return true; [INFO] [stderr] 59 | | }, [INFO] [stderr] 60 | | &mut CellState::Set(_) => return false, [INFO] [stderr] 61 | | } [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] 55 | match *cell { [INFO] [stderr] 56 | CellState::Unset => { [INFO] [stderr] 57 | *cell = CellState::Set(player); [INFO] [stderr] 58 | return true; [INFO] [stderr] 59 | }, [INFO] [stderr] 60 | CellState::Set(_) => return false, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/game/grid.rs:79:30 [INFO] [stderr] | [INFO] [stderr] 79 | let string = match self.get_cell(row_nr, cell_nr) { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 80 | | &CellState::Unset => format!("_"), [INFO] [stderr] 81 | | &CellState::Set(PlayerId(id)) => format!("{}", id), [INFO] [stderr] 82 | | }; [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] 79 | let string = match *self.get_cell(row_nr, cell_nr) { [INFO] [stderr] 80 | CellState::Unset => format!("_"), [INFO] [stderr] 81 | CellState::Set(PlayerId(id)) => format!("{}", id), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/game/grid.rs:80:42 [INFO] [stderr] | [INFO] [stderr] 80 | &CellState::Unset => format!("_"), [INFO] [stderr] | ^^^^^^^^^^^^ help: consider using .to_string(): `"_".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: use of `or` followed by a function call [INFO] [stderr] --> src/game/grid_observer.rs:8:10 [INFO] [stderr] | [INFO] [stderr] 8 | .or(check_diagonal(&grid)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_else(|| check_diagonal(&grid))` [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: use of `or` followed by a function call [INFO] [stderr] --> src/game/grid_observer.rs:7:10 [INFO] [stderr] | [INFO] [stderr] 7 | .or(check_vertical(&grid)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_else(|| check_vertical(&grid))` [INFO] [stderr] | [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/game/grid.rs:79:30 [INFO] [stderr] | [INFO] [stderr] 79 | let string = match self.get_cell(row_nr, cell_nr) { [INFO] [stderr] | ______________________________^ [INFO] [stderr] 80 | | &CellState::Unset => format!("_"), [INFO] [stderr] 81 | | &CellState::Set(PlayerId(id)) => format!("{}", id), [INFO] [stderr] 82 | | }; [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] 79 | let string = match *self.get_cell(row_nr, cell_nr) { [INFO] [stderr] 80 | CellState::Unset => format!("_"), [INFO] [stderr] 81 | CellState::Set(PlayerId(id)) => format!("{}", id), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/game/grid.rs:80:42 [INFO] [stderr] | [INFO] [stderr] 80 | &CellState::Unset => format!("_"), [INFO] [stderr] | ^^^^^^^^^^^^ help: consider using .to_string(): `"_".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: use of `or` followed by a function call [INFO] [stderr] --> src/game/grid_observer.rs:62:10 [INFO] [stderr] | [INFO] [stderr] 62 | .or(check_bottom_up_diagonal(grid, startrow, startcolumn)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_else(|| check_bottom_up_diagonal(grid, startrow, startcolumn))` [INFO] [stderr] | [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 don't need to add `&` to all patterns [INFO] [stderr] --> src/game/grid.rs:100:9 [INFO] [stderr] | [INFO] [stderr] 100 | / match grid.get_cell(0, 0) { [INFO] [stderr] 101 | | &CellState::Unset => return, [INFO] [stderr] 102 | | &CellState::Set(_) => panic!("Cell in a new grid is set even though it shouldn't."), [INFO] [stderr] 103 | | } [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] 100 | match *grid.get_cell(0, 0) { [INFO] [stderr] 101 | CellState::Unset => return, [INFO] [stderr] 102 | CellState::Set(_) => panic!("Cell in a new grid is set even though it shouldn't."), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: an inclusive range would be more readable [INFO] [stderr] --> src/game/grid_observer.rs:88:21 [INFO] [stderr] | [INFO] [stderr] 88 | let rows_iter = (0 .. startrow + 1).rev(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: use: `(0..=startrow)` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/game/grid.rs:110:13 [INFO] [stderr] | [INFO] [stderr] 110 | / match grid.get_cell(0, 0) { [INFO] [stderr] 111 | | &CellState::Unset => panic!("Cell should be set after calling set_cell"), [INFO] [stderr] 112 | | &CellState::Set(PlayerId(1)) => return, [INFO] [stderr] 113 | | &CellState::Set(_) => panic!("Cell is set by the wrong player"), [INFO] [stderr] 114 | | } [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] 110 | match *grid.get_cell(0, 0) { [INFO] [stderr] 111 | CellState::Unset => panic!("Cell should be set after calling set_cell"), [INFO] [stderr] 112 | CellState::Set(PlayerId(1)) => return, [INFO] [stderr] 113 | CellState::Set(_) => panic!("Cell is set by the wrong player"), [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/game/grid_observer.rs:100:21 [INFO] [stderr] | [INFO] [stderr] 100 | fn check_cell(cell: &CellState, streak_player: &mut u32, streak_length: &mut u32) { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `CellState` [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/game/grid_observer.rs:101:5 [INFO] [stderr] | [INFO] [stderr] 101 | / match cell { [INFO] [stderr] 102 | | &CellState::Unset => *streak_length = 0, [INFO] [stderr] 103 | | &CellState::Set(PlayerId(id)) if id == *streak_player => *streak_length += 1, [INFO] [stderr] 104 | | &CellState::Set(PlayerId(id)) => { [INFO] [stderr] ... | [INFO] [stderr] 107 | | } [INFO] [stderr] 108 | | } [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] 101 | match *cell { [INFO] [stderr] 102 | CellState::Unset => *streak_length = 0, [INFO] [stderr] 103 | CellState::Set(PlayerId(id)) if id == *streak_player => *streak_length += 1, [INFO] [stderr] 104 | CellState::Set(PlayerId(id)) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/player/terminal.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / io::stdin() [INFO] [stderr] 32 | | .read_line(&mut input) [INFO] [stderr] 33 | | .ok() [INFO] [stderr] 34 | | .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] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/player/terminal.rs:39:26 [INFO] [stderr] | [INFO] [stderr] 39 | let row: usize = split[0] [INFO] [stderr] | __________________________^ [INFO] [stderr] 40 | | .parse() [INFO] [stderr] 41 | | .ok() [INFO] [stderr] 42 | | .expect("failed to parse the input"); [INFO] [stderr] | |________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/player/terminal.rs:44:29 [INFO] [stderr] | [INFO] [stderr] 44 | let column: usize = split[1] [INFO] [stderr] | _____________________________^ [INFO] [stderr] 45 | | .parse() [INFO] [stderr] 46 | | .ok() [INFO] [stderr] 47 | | .expect("failed to parse the input"); [INFO] [stderr] | |________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: use of `or` followed by a function call [INFO] [stderr] --> src/game/grid_observer.rs:8:10 [INFO] [stderr] | [INFO] [stderr] 8 | .or(check_diagonal(&grid)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_else(|| check_diagonal(&grid))` [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: use of `or` followed by a function call [INFO] [stderr] --> src/game/grid_observer.rs:7:10 [INFO] [stderr] | [INFO] [stderr] 7 | .or(check_vertical(&grid)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_else(|| check_vertical(&grid))` [INFO] [stderr] | [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: use of `or` followed by a function call [INFO] [stderr] --> src/game/grid_observer.rs:62:10 [INFO] [stderr] | [INFO] [stderr] 62 | .or(check_bottom_up_diagonal(grid, startrow, startcolumn)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `or_else(|| check_bottom_up_diagonal(grid, startrow, startcolumn))` [INFO] [stderr] | [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: an inclusive range would be more readable [INFO] [stderr] --> src/game/grid_observer.rs:88:21 [INFO] [stderr] | [INFO] [stderr] 88 | let rows_iter = (0 .. startrow + 1).rev(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: use: `(0..=startrow)` [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/game/grid_observer.rs:100:21 [INFO] [stderr] | [INFO] [stderr] 100 | fn check_cell(cell: &CellState, streak_player: &mut u32, streak_length: &mut u32) { [INFO] [stderr] | ^^^^^^^^^^ help: consider passing by value instead: `CellState` [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/game/grid_observer.rs:101:5 [INFO] [stderr] | [INFO] [stderr] 101 | / match cell { [INFO] [stderr] 102 | | &CellState::Unset => *streak_length = 0, [INFO] [stderr] 103 | | &CellState::Set(PlayerId(id)) if id == *streak_player => *streak_length += 1, [INFO] [stderr] 104 | | &CellState::Set(PlayerId(id)) => { [INFO] [stderr] ... | [INFO] [stderr] 107 | | } [INFO] [stderr] 108 | | } [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] 101 | match *cell { [INFO] [stderr] 102 | CellState::Unset => *streak_length = 0, [INFO] [stderr] 103 | CellState::Set(PlayerId(id)) if id == *streak_player => *streak_length += 1, [INFO] [stderr] 104 | CellState::Set(PlayerId(id)) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/player/terminal.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / io::stdin() [INFO] [stderr] 32 | | .read_line(&mut input) [INFO] [stderr] 33 | | .ok() [INFO] [stderr] 34 | | .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] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/player/terminal.rs:39:26 [INFO] [stderr] | [INFO] [stderr] 39 | let row: usize = split[0] [INFO] [stderr] | __________________________^ [INFO] [stderr] 40 | | .parse() [INFO] [stderr] 41 | | .ok() [INFO] [stderr] 42 | | .expect("failed to parse the input"); [INFO] [stderr] | |________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result` [INFO] [stderr] --> src/player/terminal.rs:44:29 [INFO] [stderr] | [INFO] [stderr] 44 | let column: usize = split[1] [INFO] [stderr] | _____________________________^ [INFO] [stderr] 45 | | .parse() [INFO] [stderr] 46 | | .ok() [INFO] [stderr] 47 | | .expect("failed to parse the input"); [INFO] [stderr] | |________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ok_expect [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/player/ki.rs:128:9 [INFO] [stderr] | [INFO] [stderr] 128 | / match grid.get_cell(0, 0) { [INFO] [stderr] 129 | | &CellState::Unset => panic!("The ki didn't do anything."), [INFO] [stderr] 130 | | &CellState::Set(PlayerId(KI_ID)) => return, [INFO] [stderr] 131 | | &CellState::Set(PlayerId(id)) => [INFO] [stderr] 132 | | panic!("The ki with the {} made a turn for player {}.", KI_ID, id), [INFO] [stderr] 133 | | } [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] 128 | match *grid.get_cell(0, 0) { [INFO] [stderr] 129 | CellState::Unset => panic!("The ki didn't do anything."), [INFO] [stderr] 130 | CellState::Set(PlayerId(KI_ID)) => return, [INFO] [stderr] 131 | CellState::Set(PlayerId(id)) => [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 0.95s [INFO] running `"docker" "inspect" "5d16aea4a56797fd2fab09342341c6a969a6fbe271777cc878549da1c6638aba"` [INFO] running `"docker" "rm" "-f" "5d16aea4a56797fd2fab09342341c6a969a6fbe271777cc878549da1c6638aba"` [INFO] [stdout] 5d16aea4a56797fd2fab09342341c6a969a6fbe271777cc878549da1c6638aba