[INFO] crate ku 0.1.0 is already in cache [INFO] extracting crate ku 0.1.0 into work/ex/clippy-test-run/sources/stable/reg/ku/0.1.0 [INFO] extracting crate ku 0.1.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ku/0.1.0 [INFO] validating manifest of ku-0.1.0 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 ku-0.1.0 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 ku-0.1.0 [INFO] finished frobbing ku-0.1.0 [INFO] frobbed toml for ku-0.1.0 written to work/ex/clippy-test-run/sources/stable/reg/ku/0.1.0/Cargo.toml [INFO] started frobbing ku-0.1.0 [INFO] finished frobbing ku-0.1.0 [INFO] frobbed toml for ku-0.1.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ku/0.1.0/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 ku-0.1.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-2/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/ku/0.1.0:/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] 73323d7b3528229f94daf5c56ee38ccc150289a61189fc0fa59fac9087715f86 [INFO] running `"docker" "start" "-a" "73323d7b3528229f94daf5c56ee38ccc150289a61189fc0fa59fac9087715f86"` [INFO] [stderr] Checking ku v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/sudoku.rs:384:13 [INFO] [stderr] | [INFO] [stderr] 384 | write!(f, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/sudoku.rs:629:5 [INFO] [stderr] | [INFO] [stderr] 629 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/sudoku.rs:651:5 [INFO] [stderr] | [INFO] [stderr] 651 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/sudoku.rs:384:13 [INFO] [stderr] | [INFO] [stderr] 384 | write!(f, "\n")?; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/sudoku.rs:629:5 [INFO] [stderr] | [INFO] [stderr] 629 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/sudoku.rs:651:5 [INFO] [stderr] | [INFO] [stderr] 651 | #[cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#[rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `first_box` [INFO] [stderr] --> src/gen.rs:71:22 [INFO] [stderr] | [INFO] [stderr] 71 | for i in 0..axis { [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] 71 | for (i, ) in first_box.iter().enumerate().take(axis) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/gen.rs:96:13 [INFO] [stderr] | [INFO] [stderr] 96 | / match puzzle.score() { [INFO] [stderr] 97 | | Some(score) => { [INFO] [stderr] 98 | | if score > current { [INFO] [stderr] 99 | | let difficulty: Difficulty = score.into(); [INFO] [stderr] ... | [INFO] [stderr] 113 | | _ => {} [INFO] [stderr] 114 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 96 | if let Some(score) = puzzle.score() { [INFO] [stderr] 97 | if score > current { [INFO] [stderr] 98 | let difficulty: Difficulty = score.into(); [INFO] [stderr] 99 | if difficulty > target { [INFO] [stderr] 100 | // We overshot the target difficulty [INFO] [stderr] 101 | continue; [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/sol.rs:109:22 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn eliminate(&self, value: usize) -> Option { [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/sol.rs:117:20 [INFO] [stderr] | [INFO] [stderr] 117 | pub fn freedom(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/sol.rs:127:21 [INFO] [stderr] | [INFO] [stderr] 127 | pub fn contains(&self, value: usize) -> 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] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/sol.rs:212:25 [INFO] [stderr] | [INFO] [stderr] 212 | / match element { [INFO] [stderr] 213 | | Some(Element(value)) => { [INFO] [stderr] 214 | | map.eliminate(point, value as usize); [INFO] [stderr] 215 | | } [INFO] [stderr] 216 | | None => {} [INFO] [stderr] 217 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 212 | if let Some(Element(value)) = element { [INFO] [stderr] 213 | map.eliminate(point, value as usize); [INFO] [stderr] 214 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: avoid using `collect()` when not needed [INFO] [stderr] --> src/sol.rs:300:9 [INFO] [stderr] | [INFO] [stderr] 300 | / .collect::>() [INFO] [stderr] 301 | | .len() [INFO] [stderr] | |______________^ help: replace with: `.count()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_collect [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f64 may become silently lossy if types change [INFO] [stderr] --> src/sol.rs:307:19 [INFO] [stderr] | [INFO] [stderr] 307 | 10.0_f64.powf((order as f64).powf(4.0).log10().ceil()) as usize [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from(order)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/sudoku.rs:115:17 [INFO] [stderr] | [INFO] [stderr] 115 | pub fn fold(&self, order: u8) -> 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: the loop variable `i` is used to index `self` [INFO] [stderr] --> src/sudoku.rs:118:18 [INFO] [stderr] | [INFO] [stderr] 118 | for i in 0..DIMENSIONS { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [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] 118 | for (i, ) in self.iter().enumerate().take(DIMENSIONS) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/sudoku.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | total = total % discriminant; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `total %= discriminant` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `self`. [INFO] [stderr] --> src/sudoku.rs:194:18 [INFO] [stderr] | [INFO] [stderr] 194 | for i in 0..DIMENSIONS - 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 194 | for in self.iter().take(DIMENSIONS - 1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `pos`. [INFO] [stderr] --> src/sudoku.rs:240:18 [INFO] [stderr] | [INFO] [stderr] 240 | for i in 0..DIMENSIONS { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [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] 240 | for in pos.iter().take(DIMENSIONS) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:244:21 [INFO] [stderr] | [INFO] [stderr] 244 | let order = self.order as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(self.order)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:252:26 [INFO] [stderr] | [INFO] [stderr] 252 | let dy = y as i32 - top_left[1] as i32; [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(y)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:252:37 [INFO] [stderr] | [INFO] [stderr] 252 | let dy = y as i32 - top_left[1] as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `i32::from(top_left[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:253:26 [INFO] [stderr] | [INFO] [stderr] 253 | let dx = x as i32 - top_left[0] as i32; [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(x)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:253:37 [INFO] [stderr] | [INFO] [stderr] 253 | let dx = x as i32 - top_left[0] as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `i32::from(top_left[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] error: this range is empty so this for loop will never run [INFO] [stderr] --> src/sudoku.rs:270:26 [INFO] [stderr] | [INFO] [stderr] 270 | for i in 2..DIMENSIONS { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::reverse_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#reverse_range_loop [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/sudoku.rs:301:18 [INFO] [stderr] | [INFO] [stderr] 301 | .map(|v| Group::Band(v)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Group::Band` [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] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sudoku.rs:409:20 [INFO] [stderr] | [INFO] [stderr] 409 | .split("\n") [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sudoku.rs:411:27 [INFO] [stderr] | [INFO] [stderr] 411 | row.split(" ") [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/sudoku.rs:412:55 [INFO] [stderr] | [INFO] [stderr] 412 | .map(|cell| cell.parse().ok().map(|value| Element(value))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Element` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `rows` [INFO] [stderr] --> src/sudoku.rs:428:18 [INFO] [stderr] | [INFO] [stderr] 428 | for j in 0..axis { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [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] 428 | for (j, ) in rows.iter().enumerate().take(axis) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `row` [INFO] [stderr] --> src/sudoku.rs:433:22 [INFO] [stderr] | [INFO] [stderr] 433 | for i in 0..axis { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [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] 433 | for (i, ) in row.iter().enumerate().take(axis) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `ku`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: the loop variable `i` is used to index `first_box` [INFO] [stderr] --> src/gen.rs:71:22 [INFO] [stderr] | [INFO] [stderr] 71 | for i in 0..axis { [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] 71 | for (i, ) in first_box.iter().enumerate().take(axis) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/gen.rs:96:13 [INFO] [stderr] | [INFO] [stderr] 96 | / match puzzle.score() { [INFO] [stderr] 97 | | Some(score) => { [INFO] [stderr] 98 | | if score > current { [INFO] [stderr] 99 | | let difficulty: Difficulty = score.into(); [INFO] [stderr] ... | [INFO] [stderr] 113 | | _ => {} [INFO] [stderr] 114 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 96 | if let Some(score) = puzzle.score() { [INFO] [stderr] 97 | if score > current { [INFO] [stderr] 98 | let difficulty: Difficulty = score.into(); [INFO] [stderr] 99 | if difficulty > target { [INFO] [stderr] 100 | // We overshot the target difficulty [INFO] [stderr] 101 | continue; [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/sol.rs:109:22 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn eliminate(&self, value: usize) -> Option { [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/sol.rs:117:20 [INFO] [stderr] | [INFO] [stderr] 117 | pub fn freedom(&self) -> 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: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/sol.rs:127:21 [INFO] [stderr] | [INFO] [stderr] 127 | pub fn contains(&self, value: usize) -> 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] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/sol.rs:212:25 [INFO] [stderr] | [INFO] [stderr] 212 | / match element { [INFO] [stderr] 213 | | Some(Element(value)) => { [INFO] [stderr] 214 | | map.eliminate(point, value as usize); [INFO] [stderr] 215 | | } [INFO] [stderr] 216 | | None => {} [INFO] [stderr] 217 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 212 | if let Some(Element(value)) = element { [INFO] [stderr] 213 | map.eliminate(point, value as usize); [INFO] [stderr] 214 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: avoid using `collect()` when not needed [INFO] [stderr] --> src/sol.rs:300:9 [INFO] [stderr] | [INFO] [stderr] 300 | / .collect::>() [INFO] [stderr] 301 | | .len() [INFO] [stderr] | |______________^ help: replace with: `.count()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_collect)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_collect [INFO] [stderr] [INFO] [stderr] warning: casting u8 to f64 may become silently lossy if types change [INFO] [stderr] --> src/sol.rs:307:19 [INFO] [stderr] | [INFO] [stderr] 307 | 10.0_f64.powf((order as f64).powf(4.0).log10().ceil()) as usize [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f64::from(order)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/sudoku.rs:115:17 [INFO] [stderr] | [INFO] [stderr] 115 | pub fn fold(&self, order: u8) -> 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: the loop variable `i` is used to index `self` [INFO] [stderr] --> src/sudoku.rs:118:18 [INFO] [stderr] | [INFO] [stderr] 118 | for i in 0..DIMENSIONS { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [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] 118 | for (i, ) in self.iter().enumerate().take(DIMENSIONS) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/sudoku.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | total = total % discriminant; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `total %= discriminant` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `self`. [INFO] [stderr] --> src/sudoku.rs:194:18 [INFO] [stderr] | [INFO] [stderr] 194 | for i in 0..DIMENSIONS - 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [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] 194 | for in self.iter().take(DIMENSIONS - 1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `pos`. [INFO] [stderr] --> src/sudoku.rs:240:18 [INFO] [stderr] | [INFO] [stderr] 240 | for i in 0..DIMENSIONS { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [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] 240 | for in pos.iter().take(DIMENSIONS) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:244:21 [INFO] [stderr] | [INFO] [stderr] 244 | let order = self.order as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try: `i32::from(self.order)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:252:26 [INFO] [stderr] | [INFO] [stderr] 252 | let dy = y as i32 - top_left[1] as i32; [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(y)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:252:37 [INFO] [stderr] | [INFO] [stderr] 252 | let dy = y as i32 - top_left[1] as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `i32::from(top_left[1])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:253:26 [INFO] [stderr] | [INFO] [stderr] 253 | let dx = x as i32 - top_left[0] as i32; [INFO] [stderr] | ^^^^^^^^ help: try: `i32::from(x)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to i32 may become silently lossy if types change [INFO] [stderr] --> src/sudoku.rs:253:37 [INFO] [stderr] | [INFO] [stderr] 253 | let dx = x as i32 - top_left[0] as i32; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try: `i32::from(top_left[0])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] error: this range is empty so this for loop will never run [INFO] [stderr] --> src/sudoku.rs:270:26 [INFO] [stderr] | [INFO] [stderr] 270 | for i in 2..DIMENSIONS { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::reverse_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#reverse_range_loop [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/sudoku.rs:301:18 [INFO] [stderr] | [INFO] [stderr] 301 | .map(|v| Group::Band(v)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Group::Band` [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] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sudoku.rs:409:20 [INFO] [stderr] | [INFO] [stderr] 409 | .split("\n") [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/sudoku.rs:411:27 [INFO] [stderr] | [INFO] [stderr] 411 | row.split(" ") [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/sudoku.rs:412:55 [INFO] [stderr] | [INFO] [stderr] 412 | .map(|cell| cell.parse().ok().map(|value| Element(value))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Element` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: the loop variable `j` is used to index `rows` [INFO] [stderr] --> src/sudoku.rs:428:18 [INFO] [stderr] | [INFO] [stderr] 428 | for j in 0..axis { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [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] 428 | for (j, ) in rows.iter().enumerate().take(axis) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `row` [INFO] [stderr] --> src/sudoku.rs:433:22 [INFO] [stderr] | [INFO] [stderr] 433 | for i in 0..axis { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [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] 433 | for (i, ) in row.iter().enumerate().take(axis) { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/sudoku.rs:521:71 [INFO] [stderr] | [INFO] [stderr] 521 | for vec in [vec![], vec![Some(Element(1)), Some(Element(2))]].into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::into_iter_on_array)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] error: this .into_iter() call is equivalent to .iter() and will not move the array [INFO] [stderr] --> src/sudoku.rs:531:77 [INFO] [stderr] | [INFO] [stderr] 531 | for vec in [vec![], vec![Some(Element(2)), Some(Element(6)), None]].into_iter() { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_array [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `ku`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "73323d7b3528229f94daf5c56ee38ccc150289a61189fc0fa59fac9087715f86"` [INFO] running `"docker" "rm" "-f" "73323d7b3528229f94daf5c56ee38ccc150289a61189fc0fa59fac9087715f86"` [INFO] [stdout] 73323d7b3528229f94daf5c56ee38ccc150289a61189fc0fa59fac9087715f86