[INFO] crate sudoku 0.7.0 is already in cache [INFO] extracting crate sudoku 0.7.0 into work/ex/clippy-test-run/sources/stable/reg/sudoku/0.7.0 [INFO] extracting crate sudoku 0.7.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/sudoku/0.7.0 [INFO] validating manifest of sudoku-0.7.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 sudoku-0.7.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 sudoku-0.7.0 [INFO] finished frobbing sudoku-0.7.0 [INFO] frobbed toml for sudoku-0.7.0 written to work/ex/clippy-test-run/sources/stable/reg/sudoku/0.7.0/Cargo.toml [INFO] started frobbing sudoku-0.7.0 [INFO] finished frobbing sudoku-0.7.0 [INFO] frobbed toml for sudoku-0.7.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/sudoku/0.7.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 sudoku-0.7.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/sudoku/0.7.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] 6c0bbf3465cb9a545bb6d3df6ff5c503450d15ec64bddb63849399359360b8b6 [INFO] running `"docker" "start" "-a" "6c0bbf3465cb9a545bb6d3df6ff5c503450d15ec64bddb63849399359360b8b6"` [INFO] [stderr] Compiling crunchy v0.2.1 [INFO] [stderr] Checking sudoku v0.7.0 (/opt/crater/workdir) [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/bitset.rs:257:19 [INFO] [stderr] | [INFO] [stderr] 257 | Cell => u128, 0o777_777_777___777_777_777___777_777_777, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider: `0o777_777_777_777_777_777_777_777_777` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::inconsistent_digit_grouping)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategy/solver.rs:435:10 [INFO] [stderr] | [INFO] [stderr] 435 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 436 | | if cell_mask.is_empty() { [INFO] [stderr] 437 | | return Err(Unsolvable) [INFO] [stderr] 438 | | } [INFO] [stderr] 439 | | } [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] 435 | } else if cell_mask.is_empty() { [INFO] [stderr] 436 | return Err(Unsolvable) [INFO] [stderr] 437 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategy/strategies/hidden_subsets.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | / if digit_set.len() == subset_size && total_poss_pos.len() == subset_size { [INFO] [stderr] 41 | | if on_subset(house, digit_set, total_poss_pos) { [INFO] [stderr] 42 | | return true; [INFO] [stderr] 43 | | } [INFO] [stderr] 44 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 40 | if digit_set.len() == subset_size && total_poss_pos.len() == subset_size && on_subset(house, digit_set, total_poss_pos) { [INFO] [stderr] 41 | return true; [INFO] [stderr] 42 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/board/positions.rs:393:21 [INFO] [stderr] | [INFO] [stderr] 393 | Col => |col| { 0o_001_001_001___001_001_001___001_001_001 << col.0 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider: `0o001_001_001_001_001_001_001_001_001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/board/positions.rs:429:24 [INFO] [stderr] | [INFO] [stderr] 429 | Stack => |stack| { 0o_007_007_007___007_007_007___007_007_007 << 3 * stack.0 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider: `0o007_007_007_007_007_007_007_007_007` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/bitset.rs:257:19 [INFO] [stderr] | [INFO] [stderr] 257 | Cell => u128, 0o777_777_777___777_777_777___777_777_777, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider: `0o777_777_777_777_777_777_777_777_777` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::inconsistent_digit_grouping)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/strategy/solver.rs:435:10 [INFO] [stderr] | [INFO] [stderr] 435 | } else { [INFO] [stderr] | ________________^ [INFO] [stderr] 436 | | if cell_mask.is_empty() { [INFO] [stderr] 437 | | return Err(Unsolvable) [INFO] [stderr] 438 | | } [INFO] [stderr] 439 | | } [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] 435 | } else if cell_mask.is_empty() { [INFO] [stderr] 436 | return Err(Unsolvable) [INFO] [stderr] 437 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this if statement can be collapsed [INFO] [stderr] --> src/strategy/strategies/hidden_subsets.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | / if digit_set.len() == subset_size && total_poss_pos.len() == subset_size { [INFO] [stderr] 41 | | if on_subset(house, digit_set, total_poss_pos) { [INFO] [stderr] 42 | | return true; [INFO] [stderr] 43 | | } [INFO] [stderr] 44 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [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] 40 | if digit_set.len() == subset_size && total_poss_pos.len() == subset_size && on_subset(house, digit_set, total_poss_pos) { [INFO] [stderr] 41 | return true; [INFO] [stderr] 42 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/board/positions.rs:393:21 [INFO] [stderr] | [INFO] [stderr] 393 | Col => |col| { 0o_001_001_001___001_001_001___001_001_001 << col.0 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider: `0o001_001_001_001_001_001_001_001_001` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: digits grouped inconsistently by underscores [INFO] [stderr] --> src/board/positions.rs:429:24 [INFO] [stderr] | [INFO] [stderr] 429 | Stack => |stack| { 0o_007_007_007___007_007_007___007_007_007 << 3 * stack.0 }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider: `0o007_007_007_007_007_007_007_007_007` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:553:8 [INFO] [stderr] | [INFO] [stderr] 553 | if rg_eliminations.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!rg_eliminations.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: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:589:8 [INFO] [stderr] | [INFO] [stderr] 589 | if rg_eliminations.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!rg_eliminations.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:626:8 [INFO] [stderr] | [INFO] [stderr] 626 | if rg_eliminations.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!rg_eliminations.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:679:8 [INFO] [stderr] | [INFO] [stderr] 679 | if rg_eliminations.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!rg_eliminations.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: item `strategy::deduction::Deductions` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/strategy/deduction.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | / impl Deductions { [INFO] [stderr] 35 | | /// Returns the number of deductions. [INFO] [stderr] 36 | | pub fn len(&self) -> usize { [INFO] [stderr] 37 | | self.deductions.len() [INFO] [stderr] ... | [INFO] [stderr] 52 | | } [INFO] [stderr] 53 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: the loop variable `chute_line` is only used to index `line_unique_digits`. [INFO] [stderr] --> src/strategy/strategies/locked_candidates.rs:42:31 [INFO] [stderr] | [INFO] [stderr] 42 | for chute_line in 0..3 { [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] 42 | for in &mut line_unique_digits { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `chute_field` is only used to index `block_unique_digits`. [INFO] [stderr] --> src/strategy/strategies/locked_candidates.rs:49:32 [INFO] [stderr] | [INFO] [stderr] 49 | for chute_field in 0..3 { [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] 49 | for in &mut block_unique_digits { [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/board/sudoku.rs:806:20 [INFO] [stderr] | [INFO] [stderr] 806 | fn num_to_opt(num: &u8) -> Option { [INFO] [stderr] | ^^^ help: consider passing by value instead: `u8` [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: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:553:8 [INFO] [stderr] | [INFO] [stderr] 553 | if rg_eliminations.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!rg_eliminations.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: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:589:8 [INFO] [stderr] | [INFO] [stderr] 589 | if rg_eliminations.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!rg_eliminations.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:626:8 [INFO] [stderr] | [INFO] [stderr] 626 | if rg_eliminations.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!rg_eliminations.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:679:8 [INFO] [stderr] | [INFO] [stderr] 679 | if rg_eliminations.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!rg_eliminations.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/strategy/solver.rs:879:12 [INFO] [stderr] | [INFO] [stderr] 879 | if unsolved.len() != 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!unsolved.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: item `strategy::deduction::Deductions` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/strategy/deduction.rs:34:1 [INFO] [stderr] | [INFO] [stderr] 34 | / impl Deductions { [INFO] [stderr] 35 | | /// Returns the number of deductions. [INFO] [stderr] 36 | | pub fn len(&self) -> usize { [INFO] [stderr] 37 | | self.deductions.len() [INFO] [stderr] ... | [INFO] [stderr] 52 | | } [INFO] [stderr] 53 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: the loop variable `chute_line` is only used to index `line_unique_digits`. [INFO] [stderr] --> src/strategy/strategies/locked_candidates.rs:42:31 [INFO] [stderr] | [INFO] [stderr] 42 | for chute_line in 0..3 { [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] 42 | for in &mut line_unique_digits { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `chute_field` is only used to index `block_unique_digits`. [INFO] [stderr] --> src/strategy/strategies/locked_candidates.rs:49:32 [INFO] [stderr] | [INFO] [stderr] 49 | for chute_field in 0..3 { [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] 49 | for in &mut block_unique_digits { [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/board/sudoku.rs:806:20 [INFO] [stderr] | [INFO] [stderr] 806 | fn num_to_opt(num: &u8) -> Option { [INFO] [stderr] | ^^^ help: consider passing by value instead: `u8` [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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> examples/project_euler.rs:20:65 [INFO] [stderr] | [INFO] [stderr] 20 | sum += array[..3].iter().fold(0, |acc, &num| acc * 10 + num as u32); [INFO] [stderr] | ^^^^^^^^^^ help: try: `u32::from(num)` [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] error[E0554]: #![feature] may not be used on the stable release channel [INFO] [stderr] --> benches/lib.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(test)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0554`. [INFO] [stderr] error: Could not compile `sudoku`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> tests/lib.rs:289:8 [INFO] [stderr] | [INFO] [stderr] 289 | if duplicates.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!duplicates.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] error: build failed [INFO] running `"docker" "inspect" "6c0bbf3465cb9a545bb6d3df6ff5c503450d15ec64bddb63849399359360b8b6"` [INFO] running `"docker" "rm" "-f" "6c0bbf3465cb9a545bb6d3df6ff5c503450d15ec64bddb63849399359360b8b6"` [INFO] [stdout] 6c0bbf3465cb9a545bb6d3df6ff5c503450d15ec64bddb63849399359360b8b6