[INFO] crate harmony 0.2.1 is already in cache [INFO] extracting crate harmony 0.2.1 into work/ex/clippy-test-run/sources/stable/reg/harmony/0.2.1 [INFO] extracting crate harmony 0.2.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/harmony/0.2.1 [INFO] validating manifest of harmony-0.2.1 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 harmony-0.2.1 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 harmony-0.2.1 [INFO] finished frobbing harmony-0.2.1 [INFO] frobbed toml for harmony-0.2.1 written to work/ex/clippy-test-run/sources/stable/reg/harmony/0.2.1/Cargo.toml [INFO] started frobbing harmony-0.2.1 [INFO] finished frobbing harmony-0.2.1 [INFO] frobbed toml for harmony-0.2.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/harmony/0.2.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [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 harmony-0.2.1 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/reg/harmony/0.2.1:/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] 49a68ec7f514d67bb54e24440972109654a818ee8c99ac6245e5b72ef4c639fb [INFO] running `"docker" "start" "-a" "49a68ec7f514d67bb54e24440972109654a818ee8c99ac6245e5b72ef4c639fb"` [INFO] [stderr] Checking harmony v0.2.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/lib.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | owner: owner [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `owner` [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/lib.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | size: size, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `size` [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/lib.rs:493:13 [INFO] [stderr] | [INFO] [stderr] 493 | state: state [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `state` [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/lib.rs:43:13 [INFO] [stderr] | [INFO] [stderr] 43 | owner: owner [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `owner` [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/lib.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | size: size, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `size` [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/lib.rs:493:13 [INFO] [stderr] | [INFO] [stderr] 493 | state: state [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `state` [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/lib.rs:271:9 [INFO] [stderr] | [INFO] [stderr] 271 | return harmonies; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `harmonies` [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/lib.rs:307:9 [INFO] [stderr] | [INFO] [stderr] 307 | return move_dir; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove `return` as shown: `move_dir` [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/lib.rs:411:9 [INFO] [stderr] | [INFO] [stderr] 411 | return deaths; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `deaths` [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: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:372:25 [INFO] [stderr] | [INFO] [stderr] 372 | / if self.get(x, y).is_some() { [INFO] [stderr] 373 | | if self.get(x, y).unwrap().state == *stage { [INFO] [stderr] 374 | | for harmony in self.clone().get_harmonies() { [INFO] [stderr] 375 | | if harmony.owner != self.get(x, y).unwrap().owner { [INFO] [stderr] ... | [INFO] [stderr] 396 | | } [INFO] [stderr] 397 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 372 | if self.get(x, y).is_some() && self.get(x, y).unwrap().state == *stage { [INFO] [stderr] 373 | for harmony in self.clone().get_harmonies() { [INFO] [stderr] 374 | if harmony.owner != self.get(x, y).unwrap().owner { [INFO] [stderr] 375 | if harmony.start.x == harmony.end.x && harmony.start.x == x { [INFO] [stderr] 376 | let lower = std::cmp::min(harmony.start.y, harmony.end.y); [INFO] [stderr] 377 | let upper = std::cmp::max(harmony.start.y, harmony.end.y); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/lib.rs:363:13 [INFO] [stderr] | [INFO] [stderr] 363 | let mut stages = [PlayState::Placed, PlayState::Static, PlayState::Moved]; [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: unneeded return statement [INFO] [stderr] --> src/lib.rs:271:9 [INFO] [stderr] | [INFO] [stderr] 271 | return harmonies; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `harmonies` [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/lib.rs:307:9 [INFO] [stderr] | [INFO] [stderr] 307 | return move_dir; [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: remove `return` as shown: `move_dir` [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/lib.rs:411:9 [INFO] [stderr] | [INFO] [stderr] 411 | return deaths; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `deaths` [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: this if statement can be collapsed [INFO] [stderr] --> src/lib.rs:372:25 [INFO] [stderr] | [INFO] [stderr] 372 | / if self.get(x, y).is_some() { [INFO] [stderr] 373 | | if self.get(x, y).unwrap().state == *stage { [INFO] [stderr] 374 | | for harmony in self.clone().get_harmonies() { [INFO] [stderr] 375 | | if harmony.owner != self.get(x, y).unwrap().owner { [INFO] [stderr] ... | [INFO] [stderr] 396 | | } [INFO] [stderr] 397 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 372 | if self.get(x, y).is_some() && self.get(x, y).unwrap().state == *stage { [INFO] [stderr] 373 | for harmony in self.clone().get_harmonies() { [INFO] [stderr] 374 | if harmony.owner != self.get(x, y).unwrap().owner { [INFO] [stderr] 375 | if harmony.start.x == harmony.end.x && harmony.start.x == x { [INFO] [stderr] 376 | let lower = std::cmp::min(harmony.start.y, harmony.end.y); [INFO] [stderr] 377 | let upper = std::cmp::max(harmony.start.y, harmony.end.y); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/lib.rs:26:16 [INFO] [stderr] | [INFO] [stderr] 26 | x: obj[0].into(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider removing `.into()`: `obj[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/lib.rs:27:16 [INFO] [stderr] | [INFO] [stderr] 27 | y: obj[1].into() [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider removing `.into()`: `obj[1]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:57:66 [INFO] [stderr] | [INFO] [stderr] 57 | } else if self.start == rhs.end && self.end == rhs.start { [INFO] [stderr] | __________________________________________________________________^ [INFO] [stderr] 58 | | true [INFO] [stderr] 59 | | } else { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:55:59 [INFO] [stderr] | [INFO] [stderr] 55 | if self.start == rhs.start && self.end == rhs.end { [INFO] [stderr] | ___________________________________________________________^ [INFO] [stderr] 56 | | true [INFO] [stderr] 57 | | } else if self.start == rhs.end && self.end == rhs.start { [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/lib.rs:57:16 [INFO] [stderr] | [INFO] [stderr] 57 | } else if self.start == rhs.end && self.end == rhs.start { [INFO] [stderr] | ________________^ [INFO] [stderr] 58 | | true [INFO] [stderr] 59 | | } else { [INFO] [stderr] 60 | | false [INFO] [stderr] 61 | | } [INFO] [stderr] | |_________^ help: you can reduce it to: `self.start == rhs.end && self.end == rhs.start` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:145:21 [INFO] [stderr] | [INFO] [stderr] 145 | / if let &Some(ref stone) = stone { [INFO] [stderr] 146 | | if **player == **stone { [INFO] [stderr] 147 | | Some((n, y, stone)) [INFO] [stderr] 148 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 152 | | None [INFO] [stderr] 153 | | } [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] 145 | if let Some(ref stone) = *stone { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:164:21 [INFO] [stderr] | [INFO] [stderr] 164 | / if let &Some(ref stone) = stone { [INFO] [stderr] 165 | | if **player == **stone { [INFO] [stderr] 166 | | Some((x, n, stone)) [INFO] [stderr] 167 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 171 | | None [INFO] [stderr] 172 | | } [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] 164 | if let Some(ref stone) = *stone { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A` should have a snake case name such as `a` [INFO] [stderr] --> src/lib.rs:199:14 [INFO] [stderr] | [INFO] [stderr] 199 | for (A, B) in harmonies.iter().combinations() { [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `B` should have a snake case name such as `b` [INFO] [stderr] --> src/lib.rs:199:17 [INFO] [stderr] | [INFO] [stderr] 199 | for (A, B) in harmonies.iter().combinations() { [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_lower` should have a snake case name such as `a_lower` [INFO] [stderr] --> src/lib.rs:204:29 [INFO] [stderr] | [INFO] [stderr] 204 | let A_lower = std::cmp::min(A.start.y, A.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_upper` should have a snake case name such as `a_upper` [INFO] [stderr] --> src/lib.rs:205:29 [INFO] [stderr] | [INFO] [stderr] 205 | let A_upper = std::cmp::max(A.start.y, A.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_lower` should have a snake case name such as `b_lower` [INFO] [stderr] --> src/lib.rs:206:29 [INFO] [stderr] | [INFO] [stderr] 206 | let B_lower = std::cmp::min(B.start.x, B.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_upper` should have a snake case name such as `b_upper` [INFO] [stderr] --> src/lib.rs:207:29 [INFO] [stderr] | [INFO] [stderr] 207 | let B_upper = std::cmp::max(B.start.x, B.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_lower` should have a snake case name such as `a_lower` [INFO] [stderr] --> src/lib.rs:217:29 [INFO] [stderr] | [INFO] [stderr] 217 | let A_lower = std::cmp::min(A.start.x, A.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_upper` should have a snake case name such as `a_upper` [INFO] [stderr] --> src/lib.rs:218:29 [INFO] [stderr] | [INFO] [stderr] 218 | let A_upper = std::cmp::max(A.start.x, A.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_lower` should have a snake case name such as `b_lower` [INFO] [stderr] --> src/lib.rs:219:29 [INFO] [stderr] | [INFO] [stderr] 219 | let B_lower = std::cmp::min(B.start.y, B.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_upper` should have a snake case name such as `b_upper` [INFO] [stderr] --> src/lib.rs:220:29 [INFO] [stderr] | [INFO] [stderr] 220 | let B_upper = std::cmp::max(B.start.y, B.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_lower` should have a snake case name such as `a_lower` [INFO] [stderr] --> src/lib.rs:231:33 [INFO] [stderr] | [INFO] [stderr] 231 | let A_lower = std::cmp::min(A.start.y, A.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_upper` should have a snake case name such as `a_upper` [INFO] [stderr] --> src/lib.rs:232:33 [INFO] [stderr] | [INFO] [stderr] 232 | let A_upper = std::cmp::max(A.start.y, A.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_lower` should have a snake case name such as `b_lower` [INFO] [stderr] --> src/lib.rs:233:33 [INFO] [stderr] | [INFO] [stderr] 233 | let B_lower = std::cmp::min(B.start.y, B.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_upper` should have a snake case name such as `b_upper` [INFO] [stderr] --> src/lib.rs:234:33 [INFO] [stderr] | [INFO] [stderr] 234 | let B_upper = std::cmp::max(B.start.y, B.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_lower` should have a snake case name such as `a_lower` [INFO] [stderr] --> src/lib.rs:246:33 [INFO] [stderr] | [INFO] [stderr] 246 | let A_lower = std::cmp::min(A.start.x, A.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_upper` should have a snake case name such as `a_upper` [INFO] [stderr] --> src/lib.rs:247:33 [INFO] [stderr] | [INFO] [stderr] 247 | let A_upper = std::cmp::max(A.start.x, A.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_lower` should have a snake case name such as `b_lower` [INFO] [stderr] --> src/lib.rs:248:33 [INFO] [stderr] | [INFO] [stderr] 248 | let B_lower = std::cmp::min(B.start.x, B.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_upper` should have a snake case name such as `b_upper` [INFO] [stderr] --> src/lib.rs:249:33 [INFO] [stderr] | [INFO] [stderr] 249 | let B_upper = std::cmp::max(B.start.x, B.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:406:13 [INFO] [stderr] | [INFO] [stderr] 406 | / if let &mut Some(ref mut stone) = stone { [INFO] [stderr] 407 | | stone.state = PlayState::Placed; [INFO] [stderr] 408 | | } [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] 406 | if let Some(ref mut stone) = *stone { [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/lib.rs:436:17 [INFO] [stderr] | [INFO] [stderr] 436 | fn is_horiz(&self) -> bool { [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:442:16 [INFO] [stderr] | [INFO] [stderr] 442 | fn is_vert(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `harmony`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/lib.rs:363:13 [INFO] [stderr] | [INFO] [stderr] 363 | let mut stages = [PlayState::Placed, PlayState::Static, PlayState::Moved]; [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/tests.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | let ref player1 = Player::new("LLBlumire"); [INFO] [stderr] | ----^^^^^^^^^^^---------------------------- help: try: `let player1 = &Player::new("LLBlumire");` [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/tests.rs:36:9 [INFO] [stderr] | [INFO] [stderr] 36 | let ref player2 = Player::new("Saschmb"); [INFO] [stderr] | ----^^^^^^^^^^^-------------------------- help: try: `let player2 = &Player::new("Saschmb");` [INFO] [stderr] | [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: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable [INFO] [stderr] --> src/tests.rs:59:35 [INFO] [stderr] | [INFO] [stderr] 59 | let harmonies: Vec = board.get_harmonies().iter().cloned().collect(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_cloned_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_cloned_collect [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/tests.rs:87:9 [INFO] [stderr] | [INFO] [stderr] 87 | let ref player1 = Player::new("LLBlumire"); [INFO] [stderr] | ----^^^^^^^^^^^---------------------------- help: try: `let player1 = &Player::new("LLBlumire");` [INFO] [stderr] | [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: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/tests.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | let ref player2 = Player::new("Saschmb"); [INFO] [stderr] | ----^^^^^^^^^^^-------------------------- help: try: `let player2 = &Player::new("Saschmb");` [INFO] [stderr] | [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: identical conversion [INFO] [stderr] --> src/lib.rs:26:16 [INFO] [stderr] | [INFO] [stderr] 26 | x: obj[0].into(), [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider removing `.into()`: `obj[0]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/lib.rs:27:16 [INFO] [stderr] | [INFO] [stderr] 27 | y: obj[1].into() [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider removing `.into()`: `obj[1]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] error: this `if` has identical blocks [INFO] [stderr] --> src/lib.rs:57:66 [INFO] [stderr] | [INFO] [stderr] 57 | } else if self.start == rhs.end && self.end == rhs.start { [INFO] [stderr] | __________________________________________________________________^ [INFO] [stderr] 58 | | true [INFO] [stderr] 59 | | } else { [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::if_same_then_else)] on by default [INFO] [stderr] note: same as this [INFO] [stderr] --> src/lib.rs:55:59 [INFO] [stderr] | [INFO] [stderr] 55 | if self.start == rhs.start && self.end == rhs.end { [INFO] [stderr] | ___________________________________________________________^ [INFO] [stderr] 56 | | true [INFO] [stderr] 57 | | } else if self.start == rhs.end && self.end == rhs.start { [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/lib.rs:57:16 [INFO] [stderr] | [INFO] [stderr] 57 | } else if self.start == rhs.end && self.end == rhs.start { [INFO] [stderr] | ________________^ [INFO] [stderr] 58 | | true [INFO] [stderr] 59 | | } else { [INFO] [stderr] 60 | | false [INFO] [stderr] 61 | | } [INFO] [stderr] | |_________^ help: you can reduce it to: `self.start == rhs.end && self.end == rhs.start` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:145:21 [INFO] [stderr] | [INFO] [stderr] 145 | / if let &Some(ref stone) = stone { [INFO] [stderr] 146 | | if **player == **stone { [INFO] [stderr] 147 | | Some((n, y, stone)) [INFO] [stderr] 148 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 152 | | None [INFO] [stderr] 153 | | } [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] 145 | if let Some(ref stone) = *stone { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:164:21 [INFO] [stderr] | [INFO] [stderr] 164 | / if let &Some(ref stone) = stone { [INFO] [stderr] 165 | | if **player == **stone { [INFO] [stderr] 166 | | Some((x, n, stone)) [INFO] [stderr] 167 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 171 | | None [INFO] [stderr] 172 | | } [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] 164 | if let Some(ref stone) = *stone { [INFO] [stderr] | ^^^^^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A` should have a snake case name such as `a` [INFO] [stderr] --> src/lib.rs:199:14 [INFO] [stderr] | [INFO] [stderr] 199 | for (A, B) in harmonies.iter().combinations() { [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_snake_case)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable `B` should have a snake case name such as `b` [INFO] [stderr] --> src/lib.rs:199:17 [INFO] [stderr] | [INFO] [stderr] 199 | for (A, B) in harmonies.iter().combinations() { [INFO] [stderr] | ^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_lower` should have a snake case name such as `a_lower` [INFO] [stderr] --> src/lib.rs:204:29 [INFO] [stderr] | [INFO] [stderr] 204 | let A_lower = std::cmp::min(A.start.y, A.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_upper` should have a snake case name such as `a_upper` [INFO] [stderr] --> src/lib.rs:205:29 [INFO] [stderr] | [INFO] [stderr] 205 | let A_upper = std::cmp::max(A.start.y, A.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_lower` should have a snake case name such as `b_lower` [INFO] [stderr] --> src/lib.rs:206:29 [INFO] [stderr] | [INFO] [stderr] 206 | let B_lower = std::cmp::min(B.start.x, B.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_upper` should have a snake case name such as `b_upper` [INFO] [stderr] --> src/lib.rs:207:29 [INFO] [stderr] | [INFO] [stderr] 207 | let B_upper = std::cmp::max(B.start.x, B.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_lower` should have a snake case name such as `a_lower` [INFO] [stderr] --> src/lib.rs:217:29 [INFO] [stderr] | [INFO] [stderr] 217 | let A_lower = std::cmp::min(A.start.x, A.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_upper` should have a snake case name such as `a_upper` [INFO] [stderr] --> src/lib.rs:218:29 [INFO] [stderr] | [INFO] [stderr] 218 | let A_upper = std::cmp::max(A.start.x, A.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_lower` should have a snake case name such as `b_lower` [INFO] [stderr] --> src/lib.rs:219:29 [INFO] [stderr] | [INFO] [stderr] 219 | let B_lower = std::cmp::min(B.start.y, B.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_upper` should have a snake case name such as `b_upper` [INFO] [stderr] --> src/lib.rs:220:29 [INFO] [stderr] | [INFO] [stderr] 220 | let B_upper = std::cmp::max(B.start.y, B.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_lower` should have a snake case name such as `a_lower` [INFO] [stderr] --> src/lib.rs:231:33 [INFO] [stderr] | [INFO] [stderr] 231 | let A_lower = std::cmp::min(A.start.y, A.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_upper` should have a snake case name such as `a_upper` [INFO] [stderr] --> src/lib.rs:232:33 [INFO] [stderr] | [INFO] [stderr] 232 | let A_upper = std::cmp::max(A.start.y, A.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_lower` should have a snake case name such as `b_lower` [INFO] [stderr] --> src/lib.rs:233:33 [INFO] [stderr] | [INFO] [stderr] 233 | let B_lower = std::cmp::min(B.start.y, B.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_upper` should have a snake case name such as `b_upper` [INFO] [stderr] --> src/lib.rs:234:33 [INFO] [stderr] | [INFO] [stderr] 234 | let B_upper = std::cmp::max(B.start.y, B.end.y); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_lower` should have a snake case name such as `a_lower` [INFO] [stderr] --> src/lib.rs:246:33 [INFO] [stderr] | [INFO] [stderr] 246 | let A_lower = std::cmp::min(A.start.x, A.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `A_upper` should have a snake case name such as `a_upper` [INFO] [stderr] --> src/lib.rs:247:33 [INFO] [stderr] | [INFO] [stderr] 247 | let A_upper = std::cmp::max(A.start.x, A.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_lower` should have a snake case name such as `b_lower` [INFO] [stderr] --> src/lib.rs:248:33 [INFO] [stderr] | [INFO] [stderr] 248 | let B_lower = std::cmp::min(B.start.x, B.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `B_upper` should have a snake case name such as `b_upper` [INFO] [stderr] --> src/lib.rs:249:33 [INFO] [stderr] | [INFO] [stderr] 249 | let B_upper = std::cmp::max(B.start.x, B.end.x); [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:406:13 [INFO] [stderr] | [INFO] [stderr] 406 | / if let &mut Some(ref mut stone) = stone { [INFO] [stderr] 407 | | stone.state = PlayState::Placed; [INFO] [stderr] 408 | | } [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] 406 | if let Some(ref mut stone) = *stone { [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/lib.rs:436:17 [INFO] [stderr] | [INFO] [stderr] 436 | fn is_horiz(&self) -> bool { [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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/lib.rs:442:16 [INFO] [stderr] | [INFO] [stderr] 442 | fn is_vert(&self) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [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] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `harmony`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "49a68ec7f514d67bb54e24440972109654a818ee8c99ac6245e5b72ef4c639fb"` [INFO] running `"docker" "rm" "-f" "49a68ec7f514d67bb54e24440972109654a818ee8c99ac6245e5b72ef4c639fb"` [INFO] [stdout] 49a68ec7f514d67bb54e24440972109654a818ee8c99ac6245e5b72ef4c639fb