[INFO] cloning repository https://github.com/japinol7/small-rust-projects [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/japinol7/small-rust-projects" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjapinol7%2Fsmall-rust-projects", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjapinol7%2Fsmall-rust-projects'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] d468d6b49945e0bd463ae23b7bf2e0e023e33ad2 [INFO] linting japinol7/small-rust-projects against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjapinol7%2Fsmall-rust-projects" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/japinol7/small-rust-projects [INFO] finished tweaking git repo https://github.com/japinol7/small-rust-projects [INFO] tweaked toml for git repo https://github.com/japinol7/small-rust-projects written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/japinol7/small-rust-projects on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/japinol7/small-rust-projects already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded ferris-says v0.3.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] d916ab954cace04859a93b56ab2efcfb52a21bf4637edeeb6a8f179b63654854 [INFO] running `Command { std: "docker" "start" "-a" "d916ab954cace04859a93b56ab2efcfb52a21bf4637edeeb6a8f179b63654854", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "d916ab954cace04859a93b56ab2efcfb52a21bf4637edeeb6a8f179b63654854", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "d916ab954cace04859a93b56ab2efcfb52a21bf4637edeeb6a8f179b63654854", kill_on_drop: false }` [INFO] [stdout] d916ab954cace04859a93b56ab2efcfb52a21bf4637edeeb6a8f179b63654854 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 658ae41804e5b387b6fefe235b9c446625ed94b4855958fb1fc6324144f70bfd [INFO] running `Command { std: "docker" "start" "-a" "658ae41804e5b387b6fefe235b9c446625ed94b4855958fb1fc6324144f70bfd", kill_on_drop: false }` [INFO] [stderr] Compiling memchr v2.7.4 [INFO] [stderr] Compiling winnow v0.7.11 [INFO] [stderr] Compiling relative-path v1.9.3 [INFO] [stderr] Compiling indexmap v2.9.0 [INFO] [stderr] Checking futures-timer v3.0.3 [INFO] [stderr] Checking unicode-linebreak v0.1.5 [INFO] [stderr] Checking smawk v0.3.2 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Checking quicksort_int v0.1.0 (/opt/rustwide/workdir/projects/various/src/quicksort_int) [INFO] [stderr] Checking quicksort v0.1.0 (/opt/rustwide/workdir/projects/various/src/quicksort) [INFO] [stderr] Compiling syn v2.0.101 [INFO] [stderr] Compiling rstest_macros v0.25.0 [INFO] [stderr] Checking textwrap v0.16.2 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Checking ferris-says v0.3.2 [INFO] [stderr] Checking hello_world_rust v0.1.0 (/opt/rustwide/workdir/projects/various/src/hello_world_rust) [INFO] [stderr] Compiling proc-macro-crate v3.3.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling thiserror-impl v2.0.12 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking thiserror v2.0.12 [INFO] [stderr] Checking game_of_life v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/game_of_life/game_of_life_take_01) [INFO] [stderr] Checking mine_field v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/mine_field/mine_field_take_01) [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/src/lib.rs:107:17 [INFO] [stdout] | [INFO] [stdout] 107 | / if i < self.initial_pattern.len() && j < self.initial_pattern[i].len() { [INFO] [stdout] 108 | | if let Some(ch) = self.initial_pattern[i].chars().nth(j) { [INFO] [stdout] 109 | | if ch.to_string() == self.cell_alive { [INFO] [stdout] 110 | | self.grid[i][j] = 1; [INFO] [stdout] ... | [INFO] [stdout] 115 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 107 ~ if i < self.initial_pattern.len() && j < self.initial_pattern[i].len() [INFO] [stdout] 108 ~ && let Some(ch) = self.initial_pattern[i].chars().nth(j) { [INFO] [stdout] 109 | if ch.to_string() == self.cell_alive { [INFO] [stdout] ... [INFO] [stdout] 113 | } [INFO] [stdout] 114 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `y` is used to index `new_grid` [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/src/lib.rs:165:18 [INFO] [stdout] | [INFO] [stdout] 165 | for y in 0..self.rows { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 165 - for y in 0..self.rows { [INFO] [stdout] 165 + for (y, ) in new_grid.iter_mut().enumerate().take(self.rows) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `new_grid` [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/src/lib.rs:166:22 [INFO] [stdout] | [INFO] [stdout] 166 | for x in 0..self.cols { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 166 - for x in 0..self.cols { [INFO] [stdout] 166 + for (x, ) in new_grid.iter_mut().enumerate().take(self.cols) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/src/lib.rs:171:24 [INFO] [stdout] | [INFO] [stdout] 171 | if neighbors < 2 || neighbors > 3 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(2..=3).contains(&neighbors)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> projects/cyber_dojo/mine_field/mine_field_take_01/src/lib.rs:121:9 [INFO] [stdout] | [INFO] [stdout] 121 | write!(f, "{} {}\n", self.n_rows, self.n_columns)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] = note: `#[warn(clippy::write_with_newline)]` on by default [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 121 - write!(f, "{} {}\n", self.n_rows, self.n_columns)?; [INFO] [stdout] 121 + writeln!(f, "{} {}", self.n_rows, self.n_columns)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> projects/cyber_dojo/mine_field/mine_field_take_01/src/lib.rs:127:13 [INFO] [stdout] | [INFO] [stdout] 127 | write!(f, "\n")?; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 127 - write!(f, "\n")?; [INFO] [stdout] 127 + writeln!(f)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> projects/cyber_dojo/mine_field/mine_field_take_01/src/lib.rs:121:9 [INFO] [stdout] | [INFO] [stdout] 121 | write!(f, "{} {}\n", self.n_rows, self.n_columns)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] = note: `#[warn(clippy::write_with_newline)]` on by default [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 121 - write!(f, "{} {}\n", self.n_rows, self.n_columns)?; [INFO] [stdout] 121 + writeln!(f, "{} {}", self.n_rows, self.n_columns)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> projects/cyber_dojo/mine_field/mine_field_take_01/src/lib.rs:127:13 [INFO] [stdout] | [INFO] [stdout] 127 | write!(f, "\n")?; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 127 - write!(f, "\n")?; [INFO] [stdout] 127 + writeln!(f)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/src/lib.rs:107:17 [INFO] [stdout] | [INFO] [stdout] 107 | / if i < self.initial_pattern.len() && j < self.initial_pattern[i].len() { [INFO] [stdout] 108 | | if let Some(ch) = self.initial_pattern[i].chars().nth(j) { [INFO] [stdout] 109 | | if ch.to_string() == self.cell_alive { [INFO] [stdout] 110 | | self.grid[i][j] = 1; [INFO] [stdout] ... | [INFO] [stdout] 115 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 107 ~ if i < self.initial_pattern.len() && j < self.initial_pattern[i].len() [INFO] [stdout] 108 ~ && let Some(ch) = self.initial_pattern[i].chars().nth(j) { [INFO] [stdout] 109 | if ch.to_string() == self.cell_alive { [INFO] [stdout] ... [INFO] [stdout] 113 | } [INFO] [stdout] 114 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `y` is used to index `new_grid` [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/src/lib.rs:165:18 [INFO] [stdout] | [INFO] [stdout] 165 | for y in 0..self.rows { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 165 - for y in 0..self.rows { [INFO] [stdout] 165 + for (y, ) in new_grid.iter_mut().enumerate().take(self.rows) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `new_grid` [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/src/lib.rs:166:22 [INFO] [stdout] | [INFO] [stdout] 166 | for x in 0..self.cols { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 166 - for x in 0..self.cols { [INFO] [stdout] 166 + for (x, ) in new_grid.iter_mut().enumerate().take(self.cols) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/src/lib.rs:171:24 [INFO] [stdout] | [INFO] [stdout] 171 | if neighbors < 2 || neighbors > 3 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(2..=3).contains(&neighbors)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `y` is used to index `expected` [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/tests/game_of_life_tests.rs:125:14 [INFO] [stdout] | [INFO] [stdout] 125 | for y in 0..4 { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 125 - for y in 0..4 { [INFO] [stdout] 125 + for (y, ) in expected.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `y` is used to index `expected` [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/tests/game_of_life_tests.rs:160:14 [INFO] [stdout] | [INFO] [stdout] 160 | for y in 0..4 { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 160 - for y in 0..4 { [INFO] [stdout] 160 + for (y, ) in expected.iter().enumerate().take(4) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `y` is used to index `expected` [INFO] [stdout] --> projects/cyber_dojo/game_of_life/game_of_life_take_01/tests/game_of_life_tests.rs:195:14 [INFO] [stdout] | [INFO] [stdout] 195 | for y in 0..4 { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 195 - for y in 0..4 { [INFO] [stdout] 195 + for (y, ) in expected.iter().enumerate().take(4) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking rstest v0.25.0 [INFO] [stderr] Checking lcd_digits v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/lcd_digits/lcd_digits_take_01) [INFO] [stderr] Checking balanced_parentheses v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/balanced_parentheses/balanced_parentheses_take_01) [INFO] [stderr] Checking leap_year v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/leap_year/leap_year_take_01) [INFO] [stderr] Checking roman_numerals v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/roman_numerals/roman_numerals_take_01) [INFO] [stderr] Checking isbn v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/isbn/isbn_take_01) [INFO] [stderr] Checking reverse_roman v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/reverse_roman/reverse_roman_take_01) [INFO] [stderr] Checking fizzbuzz v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/fizzbuzz/fizzbuzz_take_01) [INFO] [stderr] Checking print_diamond v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/print_diamond/print_diamond_take_01) [INFO] [stderr] Checking roman_numerals_full v0.1.0 (/opt/rustwide/workdir/projects/various/src/roman_numerals_full) [INFO] [stderr] Checking fizzbuzz_plus v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/fizzbuzz_plus/fizzbuzz_plus_take_01) [INFO] [stderr] Checking filename_range v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/filename_range/filename_range_take_01) [INFO] [stderr] Checking align_columns v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/align_columns/align_columns_take_01) [INFO] [stderr] Checking count_coins v0.1.0 (/opt/rustwide/workdir/projects/cyber_dojo/count_coins/count_coins_take_01) [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> projects/cyber_dojo/filename_range/filename_range_take_01/src/lib.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | / if let Some(word_idx) = text.find(word_to_keep) { [INFO] [stdout] 32 | | if 0 < word_idx && word_idx < right_mark { [INFO] [stdout] 33 | | let mut new_right_mark = word_idx; [INFO] [stdout] 34 | | if new_right_mark > 0 { [INFO] [stdout] ... | [INFO] [stdout] 42 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 31 ~ if let Some(word_idx) = text.find(word_to_keep) [INFO] [stdout] 32 ~ && 0 < word_idx && word_idx < right_mark { [INFO] [stdout] 33 | let mut new_right_mark = word_idx; [INFO] [stdout] ... [INFO] [stdout] 40 | return new_right_mark + left_mark; [INFO] [stdout] 41 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> projects/cyber_dojo/filename_range/filename_range_take_01/src/lib.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 47 | / if let Some(word_idx) = text.find(word_to_keep) { [INFO] [stdout] 48 | | if word_idx >= left_mark { [INFO] [stdout] 49 | | let mut new_left_mark = word_idx + word_to_keep.len(); [INFO] [stdout] 50 | | if new_left_mark < text.len() { [INFO] [stdout] ... | [INFO] [stdout] 58 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 47 ~ if let Some(word_idx) = text.find(word_to_keep) [INFO] [stdout] 48 ~ && word_idx >= left_mark { [INFO] [stdout] 49 | let mut new_left_mark = word_idx + word_to_keep.len(); [INFO] [stdout] ... [INFO] [stdout] 56 | return new_left_mark; [INFO] [stdout] 57 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `CountCoins` [INFO] [stdout] --> projects/cyber_dojo/count_coins/count_coins_take_01/src/lib.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | / pub fn new() -> Self { [INFO] [stdout] 21 | | CountCoins [INFO] [stdout] 22 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 18 + impl Default for CountCoins { [INFO] [stdout] 19 + fn default() -> Self { [INFO] [stdout] 20 + Self::new() [INFO] [stdout] 21 + } [INFO] [stdout] 22 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> projects/cyber_dojo/leap_year/leap_year_take_01/src/lib.rs:13:16 [INFO] [stdout] | [INFO] [stdout] 13 | return !(year % 100 == 0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `(year % 100 != 0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `LcdDigits` [INFO] [stdout] --> projects/cyber_dojo/lcd_digits/lcd_digits_take_01/src/lcd_digits.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | / pub fn new() -> Self { [INFO] [stdout] 21 | | LcdDigits [INFO] [stdout] 22 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 19 + impl Default for LcdDigits { [INFO] [stdout] 20 + fn default() -> Self { [INFO] [stdout] 21 + Self::new() [INFO] [stdout] 22 + } [INFO] [stdout] 23 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> projects/cyber_dojo/filename_range/filename_range_take_01/src/lib.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | / if let Some(word_idx) = text.find(word_to_keep) { [INFO] [stdout] 32 | | if 0 < word_idx && word_idx < right_mark { [INFO] [stdout] 33 | | let mut new_right_mark = word_idx; [INFO] [stdout] 34 | | if new_right_mark > 0 { [INFO] [stdout] ... | [INFO] [stdout] 42 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 31 ~ if let Some(word_idx) = text.find(word_to_keep) [INFO] [stdout] 32 ~ && 0 < word_idx && word_idx < right_mark { [INFO] [stdout] 33 | let mut new_right_mark = word_idx; [INFO] [stdout] ... [INFO] [stdout] 40 | return new_right_mark + left_mark; [INFO] [stdout] 41 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> projects/cyber_dojo/filename_range/filename_range_take_01/src/lib.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 47 | / if let Some(word_idx) = text.find(word_to_keep) { [INFO] [stdout] 48 | | if word_idx >= left_mark { [INFO] [stdout] 49 | | let mut new_left_mark = word_idx + word_to_keep.len(); [INFO] [stdout] 50 | | if new_left_mark < text.len() { [INFO] [stdout] ... | [INFO] [stdout] 58 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 47 ~ if let Some(word_idx) = text.find(word_to_keep) [INFO] [stdout] 48 ~ && word_idx >= left_mark { [INFO] [stdout] 49 | let mut new_left_mark = word_idx + word_to_keep.len(); [INFO] [stdout] ... [INFO] [stdout] 56 | return new_left_mark; [INFO] [stdout] 57 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `chars` [INFO] [stdout] --> projects/cyber_dojo/isbn/isbn_take_01/src/lib.rs:61:14 [INFO] [stdout] | [INFO] [stdout] 61 | for i in 0..chars.len() - 1 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 61 - for i in 0..chars.len() - 1 { [INFO] [stdout] 61 + for in chars.iter().take(chars.len() - 1) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `LcdDigits` [INFO] [stdout] --> projects/cyber_dojo/lcd_digits/lcd_digits_take_01/src/lcd_digits.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | / pub fn new() -> Self { [INFO] [stdout] 21 | | LcdDigits [INFO] [stdout] 22 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 19 + impl Default for LcdDigits { [INFO] [stdout] 20 + fn default() -> Self { [INFO] [stdout] 21 + Self::new() [INFO] [stdout] 22 + } [INFO] [stdout] 23 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `println!` args [INFO] [stdout] --> projects/cyber_dojo/print_diamond/print_diamond_take_01/src/main.rs:13:31 [INFO] [stdout] | [INFO] [stdout] 13 | println!("{}", diamond.to_string()); [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `println!` args [INFO] [stdout] --> projects/cyber_dojo/print_diamond/print_diamond_take_01/src/main.rs:13:31 [INFO] [stdout] | [INFO] [stdout] 13 | println!("{}", diamond.to_string()); [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> projects/cyber_dojo/leap_year/leap_year_take_01/src/lib.rs:13:16 [INFO] [stdout] | [INFO] [stdout] 13 | return !(year % 100 == 0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `(year % 100 != 0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `chars` [INFO] [stdout] --> projects/cyber_dojo/isbn/isbn_take_01/src/lib.rs:61:14 [INFO] [stdout] | [INFO] [stdout] 61 | for i in 0..chars.len() - 1 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 61 - for i in 0..chars.len() - 1 { [INFO] [stdout] 61 + for in chars.iter().take(chars.len() - 1) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `CountCoins` [INFO] [stdout] --> projects/cyber_dojo/count_coins/count_coins_take_01/src/lib.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | / pub fn new() -> Self { [INFO] [stdout] 21 | | CountCoins [INFO] [stdout] 22 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 18 + impl Default for CountCoins { [INFO] [stdout] 19 + fn default() -> Self { [INFO] [stdout] 20 + Self::new() [INFO] [stdout] 21 + } [INFO] [stdout] 22 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.38s [INFO] running `Command { std: "docker" "inspect" "658ae41804e5b387b6fefe235b9c446625ed94b4855958fb1fc6324144f70bfd", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "658ae41804e5b387b6fefe235b9c446625ed94b4855958fb1fc6324144f70bfd", kill_on_drop: false }` [INFO] [stdout] 658ae41804e5b387b6fefe235b9c446625ed94b4855958fb1fc6324144f70bfd