[INFO] updating cached repository unixpickle/locky-puzzle [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/unixpickle/locky-puzzle [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/unixpickle/locky-puzzle" "work/ex/clippy-test-run/sources/stable/gh/unixpickle/locky-puzzle"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/unixpickle/locky-puzzle'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/unixpickle/locky-puzzle" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/unixpickle/locky-puzzle"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/unixpickle/locky-puzzle'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 5d32998ca9bb9c21cd261a4fa8e579f5593f3fef [INFO] sha for GitHub repo unixpickle/locky-puzzle: 5d32998ca9bb9c21cd261a4fa8e579f5593f3fef [INFO] validating manifest of unixpickle/locky-puzzle 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 unixpickle/locky-puzzle 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 unixpickle/locky-puzzle [INFO] finished frobbing unixpickle/locky-puzzle [INFO] frobbed toml for unixpickle/locky-puzzle written to work/ex/clippy-test-run/sources/stable/gh/unixpickle/locky-puzzle/Cargo.toml [INFO] started frobbing unixpickle/locky-puzzle [INFO] finished frobbing unixpickle/locky-puzzle [INFO] frobbed toml for unixpickle/locky-puzzle written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/unixpickle/locky-puzzle/Cargo.toml [INFO] crate unixpickle/locky-puzzle 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 unixpickle/locky-puzzle 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-0/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/unixpickle/locky-puzzle:/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] 9b7ae2eab8088e179a51eb867099767d645bf6bff45c42a19a3f53147855b327 [INFO] running `"docker" "start" "-a" "9b7ae2eab8088e179a51eb867099767d645bf6bff45c42a19a3f53147855b327"` [INFO] [stderr] Checking bitflags v1.0.2 [INFO] [stderr] Checking atty v0.2.9 [INFO] [stderr] Checking clap v2.31.2 [INFO] [stderr] Checking locky-puzzle v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/heuristic.rs:84:13 [INFO] [stderr] | [INFO] [stderr] 84 | table: table, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `table` [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/move_gen.rs:51:21 [INFO] [stderr] | [INFO] [stderr] 51 | axis: axis, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `axis` [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/move_gen.rs:60:21 [INFO] [stderr] | [INFO] [stderr] 60 | axis: axis, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `axis` [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/moves.rs:138:13 [INFO] [stderr] | [INFO] [stderr] 138 | move_str: move_str [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `move_str` [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: 5th binding whose name is just one char [INFO] [stderr] --> src/moves.rs:249:9 [INFO] [stderr] | [INFO] [stderr] 249 | let r = 32; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: 6th binding whose name is just one char [INFO] [stderr] --> src/moves.rs:250:9 [INFO] [stderr] | [INFO] [stderr] 250 | let l = 40; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/heuristic.rs:84:13 [INFO] [stderr] | [INFO] [stderr] 84 | table: table, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `table` [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/move_gen.rs:51:21 [INFO] [stderr] | [INFO] [stderr] 51 | axis: axis, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `axis` [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/move_gen.rs:60:21 [INFO] [stderr] | [INFO] [stderr] 60 | axis: axis, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `axis` [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/moves.rs:138:13 [INFO] [stderr] | [INFO] [stderr] 138 | move_str: move_str [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `move_str` [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: 5th binding whose name is just one char [INFO] [stderr] --> src/moves.rs:249:9 [INFO] [stderr] | [INFO] [stderr] 249 | let r = 32; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::many_single_char_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: 6th binding whose name is just one char [INFO] [stderr] --> src/moves.rs:250:9 [INFO] [stderr] | [INFO] [stderr] 250 | let l = 40; [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#many_single_char_names [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/state.rs:97:20 [INFO] [stderr] | [INFO] [stderr] 97 | } else if sticker.direction != Direction::Neutral { [INFO] [stderr] | ____________________^ [INFO] [stderr] 98 | | if sticker.direction != direction { [INFO] [stderr] 99 | | return true; [INFO] [stderr] 100 | | } [INFO] [stderr] 101 | | } [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] 97 | } else if sticker.direction != Direction::Neutral && sticker.direction != direction { [INFO] [stderr] 98 | return true; [INFO] [stderr] 99 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/state.rs:97:20 [INFO] [stderr] | [INFO] [stderr] 97 | } else if sticker.direction != Direction::Neutral { [INFO] [stderr] | ____________________^ [INFO] [stderr] 98 | | if sticker.direction != direction { [INFO] [stderr] 99 | | return true; [INFO] [stderr] 100 | | } [INFO] [stderr] 101 | | } [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] 97 | } else if sticker.direction != Direction::Neutral && sticker.direction != direction { [INFO] [stderr] 98 | return true; [INFO] [stderr] 99 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/state.rs:133:5 [INFO] [stderr] | [INFO] [stderr] 133 | / fn ne(&self, other: &State) -> bool { [INFO] [stderr] 134 | | !(self == other) [INFO] [stderr] 135 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/state.rs:209:31 [INFO] [stderr] | [INFO] [stderr] 209 | pub fn standard_direction(&self) -> Direction { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/state.rs:212:9 [INFO] [stderr] | [INFO] [stderr] 212 | / match self { [INFO] [stderr] 213 | | &U => Counter, [INFO] [stderr] 214 | | &D => Clockwise, [INFO] [stderr] 215 | | &F => Clockwise, [INFO] [stderr] ... | [INFO] [stderr] 218 | | &L => Counter [INFO] [stderr] 219 | | } [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] 212 | match *self { [INFO] [stderr] 213 | U => Counter, [INFO] [stderr] 214 | D => Clockwise, [INFO] [stderr] 215 | F => Clockwise, [INFO] [stderr] 216 | B => Counter, [INFO] [stderr] 217 | R => Clockwise, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/state.rs:226:25 [INFO] [stderr] | [INFO] [stderr] 226 | write!(f, "{}", match self { [INFO] [stderr] | _________________________^ [INFO] [stderr] 227 | | &U => "U", [INFO] [stderr] 228 | | &D => "D", [INFO] [stderr] 229 | | &F => "F", [INFO] [stderr] ... | [INFO] [stderr] 232 | | &L => "L" [INFO] [stderr] 233 | | }) [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] 226 | write!(f, "{}", match *self { [INFO] [stderr] 227 | U => "U", [INFO] [stderr] 228 | D => "D", [INFO] [stderr] 229 | F => "F", [INFO] [stderr] 230 | B => "B", [INFO] [stderr] 231 | R => "R", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `move_gen::MoveGen` [INFO] [stderr] --> src/move_gen.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> MoveGen { [INFO] [stderr] 16 | | MoveGen{ [INFO] [stderr] 17 | | axis: Axis::UD, [INFO] [stderr] 18 | | axis_state: AxisState::Enabled [INFO] [stderr] 19 | | } [INFO] [stderr] 20 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 14 | impl Default for move_gen::MoveGen { [INFO] [stderr] 15 | fn default() -> Self { [INFO] [stderr] 16 | Self::new() [INFO] [stderr] 17 | } [INFO] [stderr] 18 | } [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/moves.rs:42:18 [INFO] [stderr] | [INFO] [stderr] 42 | pub fn apply(&self, state: &mut State) { [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] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/moves.rs:48:20 [INFO] [stderr] | [INFO] [stderr] 48 | pub fn inverse(&self) -> Move { [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] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/moves.rs:79:14 [INFO] [stderr] | [INFO] [stderr] 79 | .ok_or(ParseMoveError::new(s.to_owned())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ParseMoveError::new(s.to_owned()))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/moves.rs:77:9 [INFO] [stderr] | [INFO] [stderr] 77 | / ALL_MOVES.iter().find(|m| format!("{}", m) == s) [INFO] [stderr] 78 | | .map(|m| *m) [INFO] [stderr] | |________________________^ help: Consider calling the dedicated `cloned` method: `ALL_MOVES.iter().find(|m| format!("{}", m) == s).cloned()` [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] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/moves.rs:170:19 [INFO] [stderr] | [INFO] [stderr] 170 | fn apply_face(&self, stickers: &mut [Sticker]) { [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] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/moves.rs:179:19 [INFO] [stderr] | [INFO] [stderr] 179 | fn apply_ring(&self, state: &mut State, face: Face) { [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] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/moves.rs:196:19 [INFO] [stderr] | [INFO] [stderr] 196 | fn permute(&self, list: &mut [T]) { [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] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/moves.rs:198:9 [INFO] [stderr] | [INFO] [stderr] 198 | / match self { [INFO] [stderr] 199 | | &Clockwise => { [INFO] [stderr] 200 | | list.swap(0, 3); [INFO] [stderr] 201 | | list.swap(1, 3); [INFO] [stderr] ... | [INFO] [stderr] 212 | | } [INFO] [stderr] 213 | | } [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] 198 | match *self { [INFO] [stderr] 199 | Clockwise => { [INFO] [stderr] 200 | list.swap(0, 3); [INFO] [stderr] 201 | list.swap(1, 3); [INFO] [stderr] 202 | list.swap(2, 3); [INFO] [stderr] 203 | }, [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/moves.rs:217:28 [INFO] [stderr] | [INFO] [stderr] 217 | fn permute_indirect(&self, list: &mut [T], indices: &[usize]) { [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] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/moves.rs:219:9 [INFO] [stderr] | [INFO] [stderr] 219 | / match self { [INFO] [stderr] 220 | | &Clockwise => { [INFO] [stderr] 221 | | list.swap(indices[0], indices[3]); [INFO] [stderr] 222 | | list.swap(indices[1], indices[3]); [INFO] [stderr] ... | [INFO] [stderr] 233 | | } [INFO] [stderr] 234 | | } [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] 219 | match *self { [INFO] [stderr] 220 | Clockwise => { [INFO] [stderr] 221 | list.swap(indices[0], indices[3]); [INFO] [stderr] 222 | list.swap(indices[1], indices[3]); [INFO] [stderr] 223 | list.swap(indices[2], indices[3]); [INFO] [stderr] 224 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/multi_step.rs:133:9 [INFO] [stderr] | [INFO] [stderr] 133 | / match self { [INFO] [stderr] 134 | | &InvalidCorners => "invalid corners", [INFO] [stderr] 135 | | &InvalidEdges => "invalid edges", [INFO] [stderr] 136 | | &InvalidState => "invalid cube state" [INFO] [stderr] 137 | | } [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] 133 | match *self { [INFO] [stderr] 134 | InvalidCorners => "invalid corners", [INFO] [stderr] 135 | InvalidEdges => "invalid edges", [INFO] [stderr] 136 | InvalidState => "invalid cube state" [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/proj.rs:83:1 [INFO] [stderr] | [INFO] [stderr] 83 | / impl Hash for LockProj { [INFO] [stderr] 84 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 85 | | state.write(&self.packed_faces); [INFO] [stderr] 86 | | } [INFO] [stderr] 87 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/proj.rs:43:21 [INFO] [stderr] | [INFO] [stderr] 43 | #[derive(Clone, Eq, PartialEq)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `face_idx * 8` [INFO] [stderr] --> src/proj.rs:120:21 [INFO] [stderr] | [INFO] [stderr] 120 | s.0[face_idx * 8 + 0].face, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/proj.rs:135:1 [INFO] [stderr] | [INFO] [stderr] 135 | / impl Hash for CornerProj { [INFO] [stderr] 136 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 137 | | self.lock.hash(state); [INFO] [stderr] 138 | | state.write(&self.packed_corners); [INFO] [stderr] 139 | | } [INFO] [stderr] 140 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/proj.rs:90:21 [INFO] [stderr] | [INFO] [stderr] 90 | #[derive(Clone, Eq, PartialEq)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: the loop variable `face_idx` is used to index `axes` [INFO] [stderr] --> src/proj.rs:174:25 [INFO] [stderr] | [INFO] [stderr] 174 | for face_idx in 0..6 { [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] 174 | for (face_idx, ) in axes.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/proj.rs:185:1 [INFO] [stderr] | [INFO] [stderr] 185 | / impl Hash for ArrowAxisProj { [INFO] [stderr] 186 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 187 | | self.lock.hash(state); [INFO] [stderr] 188 | | state.write(&self.packed_axes); [INFO] [stderr] 189 | | } [INFO] [stderr] 190 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/proj.rs:143:21 [INFO] [stderr] | [INFO] [stderr] 143 | #[derive(Clone, Eq, PartialEq)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/scramble.rs:34:11 [INFO] [stderr] | [INFO] [stderr] 34 | while next_options.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!next_options.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: replacing an `Option` with `None` [INFO] [stderr] --> src/thread.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | replace(&mut f_once, None).unwrap()() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider `Option::take()` instead: `f_once.take()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::mem_replace_option_with_none)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_option_with_none [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/thread.rs:33:24 [INFO] [stderr] | [INFO] [stderr] 33 | handle = spawn(move || f()); [INFO] [stderr] | ^^^^^^^^^^^ help: remove closure as shown: `f` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `locky-puzzle`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: re-implementing `PartialEq::ne` is unnecessary [INFO] [stderr] --> src/state.rs:133:5 [INFO] [stderr] | [INFO] [stderr] 133 | / fn ne(&self, other: &State) -> bool { [INFO] [stderr] 134 | | !(self == other) [INFO] [stderr] 135 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::partialeq_ne_impl)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_ne_impl [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/state.rs:209:31 [INFO] [stderr] | [INFO] [stderr] 209 | pub fn standard_direction(&self) -> Direction { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/state.rs:212:9 [INFO] [stderr] | [INFO] [stderr] 212 | / match self { [INFO] [stderr] 213 | | &U => Counter, [INFO] [stderr] 214 | | &D => Clockwise, [INFO] [stderr] 215 | | &F => Clockwise, [INFO] [stderr] ... | [INFO] [stderr] 218 | | &L => Counter [INFO] [stderr] 219 | | } [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] 212 | match *self { [INFO] [stderr] 213 | U => Counter, [INFO] [stderr] 214 | D => Clockwise, [INFO] [stderr] 215 | F => Clockwise, [INFO] [stderr] 216 | B => Counter, [INFO] [stderr] 217 | R => Clockwise, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/state.rs:226:25 [INFO] [stderr] | [INFO] [stderr] 226 | write!(f, "{}", match self { [INFO] [stderr] | _________________________^ [INFO] [stderr] 227 | | &U => "U", [INFO] [stderr] 228 | | &D => "D", [INFO] [stderr] 229 | | &F => "F", [INFO] [stderr] ... | [INFO] [stderr] 232 | | &L => "L" [INFO] [stderr] 233 | | }) [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] 226 | write!(f, "{}", match *self { [INFO] [stderr] 227 | U => "U", [INFO] [stderr] 228 | D => "D", [INFO] [stderr] 229 | F => "F", [INFO] [stderr] 230 | B => "B", [INFO] [stderr] 231 | R => "R", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `move_gen::MoveGen` [INFO] [stderr] --> src/move_gen.rs:15:5 [INFO] [stderr] | [INFO] [stderr] 15 | / pub fn new() -> MoveGen { [INFO] [stderr] 16 | | MoveGen{ [INFO] [stderr] 17 | | axis: Axis::UD, [INFO] [stderr] 18 | | axis_state: AxisState::Enabled [INFO] [stderr] 19 | | } [INFO] [stderr] 20 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 14 | impl Default for move_gen::MoveGen { [INFO] [stderr] 15 | fn default() -> Self { [INFO] [stderr] 16 | Self::new() [INFO] [stderr] 17 | } [INFO] [stderr] 18 | } [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/moves.rs:42:18 [INFO] [stderr] | [INFO] [stderr] 42 | pub fn apply(&self, state: &mut State) { [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] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/moves.rs:48:20 [INFO] [stderr] | [INFO] [stderr] 48 | pub fn inverse(&self) -> Move { [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] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/moves.rs:79:14 [INFO] [stderr] | [INFO] [stderr] 79 | .ok_or(ParseMoveError::new(s.to_owned())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| ParseMoveError::new(s.to_owned()))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/moves.rs:77:9 [INFO] [stderr] | [INFO] [stderr] 77 | / ALL_MOVES.iter().find(|m| format!("{}", m) == s) [INFO] [stderr] 78 | | .map(|m| *m) [INFO] [stderr] | |________________________^ help: Consider calling the dedicated `cloned` method: `ALL_MOVES.iter().find(|m| format!("{}", m) == s).cloned()` [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] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/moves.rs:170:19 [INFO] [stderr] | [INFO] [stderr] 170 | fn apply_face(&self, stickers: &mut [Sticker]) { [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] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/moves.rs:179:19 [INFO] [stderr] | [INFO] [stderr] 179 | fn apply_ring(&self, state: &mut State, face: Face) { [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] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/moves.rs:196:19 [INFO] [stderr] | [INFO] [stderr] 196 | fn permute(&self, list: &mut [T]) { [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] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/moves.rs:198:9 [INFO] [stderr] | [INFO] [stderr] 198 | / match self { [INFO] [stderr] 199 | | &Clockwise => { [INFO] [stderr] 200 | | list.swap(0, 3); [INFO] [stderr] 201 | | list.swap(1, 3); [INFO] [stderr] ... | [INFO] [stderr] 212 | | } [INFO] [stderr] 213 | | } [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] 198 | match *self { [INFO] [stderr] 199 | Clockwise => { [INFO] [stderr] 200 | list.swap(0, 3); [INFO] [stderr] 201 | list.swap(1, 3); [INFO] [stderr] 202 | list.swap(2, 3); [INFO] [stderr] 203 | }, [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/moves.rs:217:28 [INFO] [stderr] | [INFO] [stderr] 217 | fn permute_indirect(&self, list: &mut [T], indices: &[usize]) { [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] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/moves.rs:219:9 [INFO] [stderr] | [INFO] [stderr] 219 | / match self { [INFO] [stderr] 220 | | &Clockwise => { [INFO] [stderr] 221 | | list.swap(indices[0], indices[3]); [INFO] [stderr] 222 | | list.swap(indices[1], indices[3]); [INFO] [stderr] ... | [INFO] [stderr] 233 | | } [INFO] [stderr] 234 | | } [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] 219 | match *self { [INFO] [stderr] 220 | Clockwise => { [INFO] [stderr] 221 | list.swap(indices[0], indices[3]); [INFO] [stderr] 222 | list.swap(indices[1], indices[3]); [INFO] [stderr] 223 | list.swap(indices[2], indices[3]); [INFO] [stderr] 224 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/multi_step.rs:133:9 [INFO] [stderr] | [INFO] [stderr] 133 | / match self { [INFO] [stderr] 134 | | &InvalidCorners => "invalid corners", [INFO] [stderr] 135 | | &InvalidEdges => "invalid edges", [INFO] [stderr] 136 | | &InvalidState => "invalid cube state" [INFO] [stderr] 137 | | } [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] 133 | match *self { [INFO] [stderr] 134 | InvalidCorners => "invalid corners", [INFO] [stderr] 135 | InvalidEdges => "invalid edges", [INFO] [stderr] 136 | InvalidState => "invalid cube state" [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/proj.rs:83:1 [INFO] [stderr] | [INFO] [stderr] 83 | / impl Hash for LockProj { [INFO] [stderr] 84 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 85 | | state.write(&self.packed_faces); [INFO] [stderr] 86 | | } [INFO] [stderr] 87 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::derive_hash_xor_eq)] on by default [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/proj.rs:43:21 [INFO] [stderr] | [INFO] [stderr] 43 | #[derive(Clone, Eq, PartialEq)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: the operation is ineffective. Consider reducing it to `face_idx * 8` [INFO] [stderr] --> src/proj.rs:120:21 [INFO] [stderr] | [INFO] [stderr] 120 | s.0[face_idx * 8 + 0].face, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_op)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/proj.rs:135:1 [INFO] [stderr] | [INFO] [stderr] 135 | / impl Hash for CornerProj { [INFO] [stderr] 136 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 137 | | self.lock.hash(state); [INFO] [stderr] 138 | | state.write(&self.packed_corners); [INFO] [stderr] 139 | | } [INFO] [stderr] 140 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/proj.rs:90:21 [INFO] [stderr] | [INFO] [stderr] 90 | #[derive(Clone, Eq, PartialEq)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: the loop variable `face_idx` is used to index `axes` [INFO] [stderr] --> src/proj.rs:174:25 [INFO] [stderr] | [INFO] [stderr] 174 | for face_idx in 0..6 { [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] 174 | for (face_idx, ) in axes.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: you are implementing `Hash` explicitly but have derived `PartialEq` [INFO] [stderr] --> src/proj.rs:185:1 [INFO] [stderr] | [INFO] [stderr] 185 | / impl Hash for ArrowAxisProj { [INFO] [stderr] 186 | | fn hash(&self, state: &mut H) { [INFO] [stderr] 187 | | self.lock.hash(state); [INFO] [stderr] 188 | | state.write(&self.packed_axes); [INFO] [stderr] 189 | | } [INFO] [stderr] 190 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] note: `PartialEq` implemented here [INFO] [stderr] --> src/proj.rs:143:21 [INFO] [stderr] | [INFO] [stderr] 143 | #[derive(Clone, Eq, PartialEq)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_hash_xor_eq [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/scramble.rs:34:11 [INFO] [stderr] | [INFO] [stderr] 34 | while next_options.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!next_options.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: replacing an `Option` with `None` [INFO] [stderr] --> src/thread.rs:18:13 [INFO] [stderr] | [INFO] [stderr] 18 | replace(&mut f_once, None).unwrap()() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider `Option::take()` instead: `f_once.take()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::mem_replace_option_with_none)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mem_replace_option_with_none [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/thread.rs:33:24 [INFO] [stderr] | [INFO] [stderr] 33 | handle = spawn(move || f()); [INFO] [stderr] | ^^^^^^^^^^^ help: remove closure as shown: `f` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `locky-puzzle`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "9b7ae2eab8088e179a51eb867099767d645bf6bff45c42a19a3f53147855b327"` [INFO] running `"docker" "rm" "-f" "9b7ae2eab8088e179a51eb867099767d645bf6bff45c42a19a3f53147855b327"` [INFO] [stdout] 9b7ae2eab8088e179a51eb867099767d645bf6bff45c42a19a3f53147855b327