[INFO] cloning repository https://github.com/Hamatti/adventofcode-2020 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Hamatti/adventofcode-2020" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FHamatti%2Fadventofcode-2020", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FHamatti%2Fadventofcode-2020'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 12884b79c2fce397413e3d9a42ad7fe707fab0e5 [INFO] linting Hamatti/adventofcode-2020 against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FHamatti%2Fadventofcode-2020" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Hamatti/adventofcode-2020 [INFO] finished tweaking git repo https://github.com/Hamatti/adventofcode-2020 [INFO] tweaked toml for git repo https://github.com/Hamatti/adventofcode-2020 written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Hamatti/adventofcode-2020 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/Hamatti/adventofcode-2020 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] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] a128d0078aab9b577bc78e094871f4c9de550c918b2fbb96e745b3b429ecb1f0 [INFO] running `Command { std: "docker" "start" "-a" "a128d0078aab9b577bc78e094871f4c9de550c918b2fbb96e745b3b429ecb1f0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "a128d0078aab9b577bc78e094871f4c9de550c918b2fbb96e745b3b429ecb1f0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a128d0078aab9b577bc78e094871f4c9de550c918b2fbb96e745b3b429ecb1f0", kill_on_drop: false }` [INFO] [stdout] a128d0078aab9b577bc78e094871f4c9de550c918b2fbb96e745b3b429ecb1f0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] 2e230f510b5c03207a52cdc046ff68cf44c0ef50d4932ef59f64818e6132a742 [INFO] running `Command { std: "docker" "start" "-a" "2e230f510b5c03207a52cdc046ff68cf44c0ef50d4932ef59f64818e6132a742", kill_on_drop: false }` [INFO] [stderr] Compiling memchr v2.3.4 [INFO] [stderr] Checking regex-syntax v0.6.21 [INFO] [stderr] Checking thread_local v1.0.1 [INFO] [stderr] Checking aho-corasick v0.7.15 [INFO] [stderr] Checking regex v1.4.2 [INFO] [stderr] Checking adventofcode-2020 v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/bin/day08.rs:8:61 [INFO] [stdout] | [INFO] [stdout] 8 | let input: Vec = buffer.lines().into_iter().map(|inp| String::from(inp)).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::from` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day03.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | solve_slope(&input, Slope::new(3, 1)) [INFO] [stdout] | ^^^^^^ help: change this to: `input` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day03.rs:91:45 [INFO] [stdout] | [INFO] [stdout] 91 | slope_difficulties.push(solve_slope(&input, *slope).unwrap()); [INFO] [stdout] | ^^^^^^ help: change this to: `input` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/bin/day08.rs:8:30 [INFO] [stdout] | [INFO] [stdout] 8 | let input: Vec = buffer.lines().into_iter().map(|inp| String::from(inp)).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `buffer.lines()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day08.rs:15:22 [INFO] [stdout] | [INFO] [stdout] 15 | fn first_part(input: &Vec) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 15 - fn first_part(input: &Vec) -> Option { [INFO] [stdout] 15 + fn first_part(input: &[String]) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day08.rs:50:32 [INFO] [stdout] | [INFO] [stdout] 50 | fn second_part(original_input: &Vec) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 50 ~ fn second_part(original_input: &[String]) -> Option { [INFO] [stdout] 51 | let mut last_checked_idx: usize = 0; [INFO] [stdout] 52 ~ let mut input = original_input.to_owned(); [INFO] [stdout] 53 | let mut result: Option; [INFO] [stdout] ... [INFO] [stdout] 67 | last_checked_idx = found.unwrap() + last_checked_idx + 1; [INFO] [stdout] 68 ~ input = original_input.to_owned(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/bin/day08.rs:62:20 [INFO] [stdout] | [INFO] [stdout] 62 | if found == None { [INFO] [stdout] | ^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `found.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/bin/day08.rs:69:49 [INFO] [stdout] | [INFO] [stdout] 69 | input[last_checked_idx] = input[last_checked_idx as usize].replace(&replace_from, &replace_to); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `last_checked_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day08.rs:78:25 [INFO] [stdout] | [INFO] [stdout] 78 | fn run_program(program: &Vec) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 78 - fn run_program(program: &Vec) -> Option { [INFO] [stdout] 78 + fn run_program(program: &[String]) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bin/day05.rs:40:12 [INFO] [stdout] | [INFO] [stdout] 40 | if !(seat_ids[idx] == seat_ids[idx + 1] - 1) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(seat_ids[idx] != seat_ids[idx + 1] - 1)` [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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day05.rs:38:30 [INFO] [stdout] | [INFO] [stdout] 38 | fn find_my_seat_id(seat_ids: &Vec) -> Option { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 38 - fn find_my_seat_id(seat_ids: &Vec) -> Option { [INFO] [stdout] 38 + fn find_my_seat_id(seat_ids: &[u32]) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/bin/day05.rs:71:5 [INFO] [stdout] | [INFO] [stdout] 69 | let seat_id = max_row * 8 + max_col; [INFO] [stdout] | ------------------------------------ unnecessary `let` binding [INFO] [stdout] 70 | [INFO] [stdout] 71 | seat_id [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 69 ~ [INFO] [stdout] 70 | [INFO] [stdout] 71 ~ max_row * 8 + max_col [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `idx` is used as a loop counter [INFO] [stdout] --> src/bin/day05.rs:55:5 [INFO] [stdout] | [INFO] [stdout] 55 | for chr in boarding_pass.chars() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (idx, chr) in (0_u32..).zip(boarding_pass.chars())` [INFO] [stdout] | [INFO] [stdout] = note: `idx` is of type `u32`, making it ineligible for `Iterator::enumerate` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bin/day05.rs:40:12 [INFO] [stdout] | [INFO] [stdout] 40 | if !(seat_ids[idx] == seat_ids[idx + 1] - 1) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `(seat_ids[idx] != seat_ids[idx + 1] - 1)` [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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day05.rs:38:30 [INFO] [stdout] | [INFO] [stdout] 38 | fn find_my_seat_id(seat_ids: &Vec) -> Option { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 38 - fn find_my_seat_id(seat_ids: &Vec) -> Option { [INFO] [stdout] 38 + fn find_my_seat_id(seat_ids: &[u32]) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/bin/day05.rs:71:5 [INFO] [stdout] | [INFO] [stdout] 69 | let seat_id = max_row * 8 + max_col; [INFO] [stdout] | ------------------------------------ unnecessary `let` binding [INFO] [stdout] 70 | [INFO] [stdout] 71 | seat_id [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 69 ~ [INFO] [stdout] 70 | [INFO] [stdout] 71 ~ max_row * 8 + max_col [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `idx` is used as a loop counter [INFO] [stdout] --> src/bin/day05.rs:55:5 [INFO] [stdout] | [INFO] [stdout] 55 | for chr in boarding_pass.chars() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (idx, chr) in (0_u32..).zip(boarding_pass.chars())` [INFO] [stdout] | [INFO] [stdout] = note: `idx` is of type `u32`, making it ineligible for `Iterator::enumerate` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Split<'_, &str>` [INFO] [stdout] --> src/bin/day06.rs:8:34 [INFO] [stdout] | [INFO] [stdout] 8 | let groups: Vec> = buffer [INFO] [stdout] | __________________________________^ [INFO] [stdout] 9 | | .split("\n\n") [INFO] [stdout] 10 | | .into_iter() [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 8 ~ let groups: Vec> = buffer [INFO] [stdout] 9 + .split("\n\n") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Split<'_, &str>` [INFO] [stdout] --> src/bin/day06.rs:11:23 [INFO] [stdout] | [INFO] [stdout] 11 | .map(|groups| groups.split("\n").into_iter().collect()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `groups.split("\n")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/day06.rs:48:33 [INFO] [stdout] | [INFO] [stdout] 48 | .filter(|k| (&sets).into_iter().all(|s| s.contains(k))) [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/bin/day04.rs:15:12 [INFO] [stdout] | [INFO] [stdout] 15 | if *line == "" { [INFO] [stdout] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day04.rs:20:39 [INFO] [stdout] | [INFO] [stdout] 20 | current_passport.push_str(&line); [INFO] [stdout] | ^^^^^ help: change this to: `line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/bin/day04.rs:21:13 [INFO] [stdout] | [INFO] [stdout] 21 | current_passport.push_str(" "); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `current_passport.push(' ')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day04.rs:35:62 [INFO] [stdout] | [INFO] [stdout] 35 | let parsed: HashMap = parse_passport(&passport); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `passport` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day04.rs:44:29 [INFO] [stdout] | [INFO] [stdout] 44 | fn parse_passport(passport: &String) -> HashMap { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 44 - fn parse_passport(passport: &String) -> HashMap { [INFO] [stdout] 44 + fn parse_passport(passport: &str) -> HashMap { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/day04.rs:49:12 [INFO] [stdout] | [INFO] [stdout] 49 | if part.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `part.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day04.rs:60:24 [INFO] [stdout] | [INFO] [stdout] 60 | fn validate_field(key: &String, value: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 60 - fn validate_field(key: &String, value: &String) -> bool { [INFO] [stdout] 60 + fn validate_field(key: &str, value: &String) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day04.rs:60:40 [INFO] [stdout] | [INFO] [stdout] 60 | fn validate_field(key: &String, value: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 60 ~ fn validate_field(key: &String, value: &str) -> bool { [INFO] [stdout] 61 | match &key[..] { [INFO] [stdout] ... [INFO] [stdout] 91 | } [INFO] [stdout] 92 ~ "ecl" => ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"].contains(&value), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:65:31 [INFO] [stdout] | [INFO] [stdout] 65 | correct_length && value >= 1920 && value <= 2002 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(1920..=2002).contains(&value)` [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: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:70:31 [INFO] [stdout] | [INFO] [stdout] 70 | correct_length && value >= 2010 && value <= 2020 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(2010..=2020).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:75:31 [INFO] [stdout] | [INFO] [stdout] 75 | correct_length && value >= 2020 && value <= 2030 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(2020..=2030).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:80:24 [INFO] [stdout] | [INFO] [stdout] 80 | return value >= 150 && value <= 193; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(150..=193).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:84:24 [INFO] [stdout] | [INFO] [stdout] 84 | return value >= 59 && value <= 76; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(59..=76).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/bin/day04.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 123 | / if parsed.keys().len() == 7 { [INFO] [stdout] 124 | | if parsed.contains_key("cid") { [INFO] [stdout] 125 | | continue; [INFO] [stdout] 126 | | } [INFO] [stdout] 127 | | } [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] 123 ~ if parsed.keys().len() == 7 [INFO] [stdout] 124 ~ && parsed.contains_key("cid") { [INFO] [stdout] 125 | continue; [INFO] [stdout] 126 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day04.rs:131:32 [INFO] [stdout] | [INFO] [stdout] 131 | if !validate_field(&k, &v) { [INFO] [stdout] | ^^ help: change this to: `k` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day04.rs:131:36 [INFO] [stdout] | [INFO] [stdout] 131 | if !validate_field(&k, &v) { [INFO] [stdout] | ^^ help: change this to: `v` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:179:9 [INFO] [stdout] | [INFO] [stdout] 179 | / assert_eq!( [INFO] [stdout] 180 | | validate_field(&String::from("byr"), &String::from("1919")), [INFO] [stdout] 181 | | false [INFO] [stdout] 182 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 179 ~ assert!( [INFO] [stdout] 180 ~ !validate_field(&String::from("byr"), &String::from("1919")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:183:9 [INFO] [stdout] | [INFO] [stdout] 183 | / assert_eq!( [INFO] [stdout] 184 | | validate_field(&String::from("byr"), &String::from("1920")), [INFO] [stdout] 185 | | true [INFO] [stdout] 186 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 183 ~ assert!( [INFO] [stdout] 184 ~ validate_field(&String::from("byr"), &String::from("1920")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:187:9 [INFO] [stdout] | [INFO] [stdout] 187 | / assert_eq!( [INFO] [stdout] 188 | | validate_field(&String::from("byr"), &String::from("2002")), [INFO] [stdout] 189 | | true [INFO] [stdout] 190 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 187 ~ assert!( [INFO] [stdout] 188 ~ validate_field(&String::from("byr"), &String::from("2002")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | / assert_eq!( [INFO] [stdout] 192 | | validate_field(&String::from("byr"), &String::from("2003")), [INFO] [stdout] 193 | | false [INFO] [stdout] 194 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 191 ~ assert!( [INFO] [stdout] 192 ~ !validate_field(&String::from("byr"), &String::from("2003")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/bin/day04.rs:15:12 [INFO] [stdout] | [INFO] [stdout] 15 | if *line == "" { [INFO] [stdout] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day04.rs:20:39 [INFO] [stdout] | [INFO] [stdout] 20 | current_passport.push_str(&line); [INFO] [stdout] | ^^^^^ help: change this to: `line` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/bin/day04.rs:21:13 [INFO] [stdout] | [INFO] [stdout] 21 | current_passport.push_str(" "); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `current_passport.push(' ')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day04.rs:35:62 [INFO] [stdout] | [INFO] [stdout] 35 | let parsed: HashMap = parse_passport(&passport); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `passport` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day04.rs:44:29 [INFO] [stdout] | [INFO] [stdout] 44 | fn parse_passport(passport: &String) -> HashMap { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 44 - fn parse_passport(passport: &String) -> HashMap { [INFO] [stdout] 44 + fn parse_passport(passport: &str) -> HashMap { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:199:9 [INFO] [stdout] | [INFO] [stdout] 199 | / assert_eq!( [INFO] [stdout] 200 | | validate_field(&String::from("iyr"), &String::from("2009")), [INFO] [stdout] 201 | | false [INFO] [stdout] 202 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 199 ~ assert!( [INFO] [stdout] 200 ~ !validate_field(&String::from("iyr"), &String::from("2009")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:203:9 [INFO] [stdout] | [INFO] [stdout] 203 | / assert_eq!( [INFO] [stdout] 204 | | validate_field(&String::from("iyr"), &String::from("2010")), [INFO] [stdout] 205 | | true [INFO] [stdout] 206 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 203 ~ assert!( [INFO] [stdout] 204 ~ validate_field(&String::from("iyr"), &String::from("2010")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:207:9 [INFO] [stdout] | [INFO] [stdout] 207 | / assert_eq!( [INFO] [stdout] 208 | | validate_field(&String::from("iyr"), &String::from("2020")), [INFO] [stdout] 209 | | true [INFO] [stdout] 210 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 207 ~ assert!( [INFO] [stdout] 208 ~ validate_field(&String::from("iyr"), &String::from("2020")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/day04.rs:49:12 [INFO] [stdout] | [INFO] [stdout] 49 | if part.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `part.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:211:9 [INFO] [stdout] | [INFO] [stdout] 211 | / assert_eq!( [INFO] [stdout] 212 | | validate_field(&String::from("iyr"), &String::from("2021")), [INFO] [stdout] 213 | | false [INFO] [stdout] 214 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 211 ~ assert!( [INFO] [stdout] 212 ~ !validate_field(&String::from("iyr"), &String::from("2021")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:219:9 [INFO] [stdout] | [INFO] [stdout] 219 | / assert_eq!( [INFO] [stdout] 220 | | validate_field(&String::from("eyr"), &String::from("2019")), [INFO] [stdout] 221 | | false [INFO] [stdout] 222 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 219 ~ assert!( [INFO] [stdout] 220 ~ !validate_field(&String::from("eyr"), &String::from("2019")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:223:9 [INFO] [stdout] | [INFO] [stdout] 223 | / assert_eq!( [INFO] [stdout] 224 | | validate_field(&String::from("eyr"), &String::from("2020")), [INFO] [stdout] 225 | | true [INFO] [stdout] 226 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 223 ~ assert!( [INFO] [stdout] 224 ~ validate_field(&String::from("eyr"), &String::from("2020")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:227:9 [INFO] [stdout] | [INFO] [stdout] 227 | / assert_eq!( [INFO] [stdout] 228 | | validate_field(&String::from("eyr"), &String::from("2030")), [INFO] [stdout] 229 | | true [INFO] [stdout] 230 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 227 ~ assert!( [INFO] [stdout] 228 ~ validate_field(&String::from("eyr"), &String::from("2030")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:231:9 [INFO] [stdout] | [INFO] [stdout] 231 | / assert_eq!( [INFO] [stdout] 232 | | validate_field(&String::from("eyr"), &String::from("2031")), [INFO] [stdout] 233 | | false [INFO] [stdout] 234 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 231 ~ assert!( [INFO] [stdout] 232 ~ !validate_field(&String::from("eyr"), &String::from("2031")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:239:9 [INFO] [stdout] | [INFO] [stdout] 239 | / assert_eq!( [INFO] [stdout] 240 | | validate_field(&String::from("hgt"), &String::from("149cm")), [INFO] [stdout] 241 | | false [INFO] [stdout] 242 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 239 ~ assert!( [INFO] [stdout] 240 ~ !validate_field(&String::from("hgt"), &String::from("149cm")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:243:9 [INFO] [stdout] | [INFO] [stdout] 243 | / assert_eq!( [INFO] [stdout] 244 | | validate_field(&String::from("hgt"), &String::from("150cm")), [INFO] [stdout] 245 | | true [INFO] [stdout] 246 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 243 ~ assert!( [INFO] [stdout] 244 ~ validate_field(&String::from("hgt"), &String::from("150cm")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:247:9 [INFO] [stdout] | [INFO] [stdout] 247 | / assert_eq!( [INFO] [stdout] 248 | | validate_field(&String::from("hgt"), &String::from("193cm")), [INFO] [stdout] 249 | | true [INFO] [stdout] 250 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 247 ~ assert!( [INFO] [stdout] 248 ~ validate_field(&String::from("hgt"), &String::from("193cm")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:251:9 [INFO] [stdout] | [INFO] [stdout] 251 | / assert_eq!( [INFO] [stdout] 252 | | validate_field(&String::from("hgt"), &String::from("194cm")), [INFO] [stdout] 253 | | false [INFO] [stdout] 254 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 251 ~ assert!( [INFO] [stdout] 252 ~ !validate_field(&String::from("hgt"), &String::from("194cm")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:256:9 [INFO] [stdout] | [INFO] [stdout] 256 | / assert_eq!( [INFO] [stdout] 257 | | validate_field(&String::from("hgt"), &String::from("58in")), [INFO] [stdout] 258 | | false [INFO] [stdout] 259 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 256 ~ assert!( [INFO] [stdout] 257 ~ !validate_field(&String::from("hgt"), &String::from("58in")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:260:9 [INFO] [stdout] | [INFO] [stdout] 260 | / assert_eq!( [INFO] [stdout] 261 | | validate_field(&String::from("hgt"), &String::from("59in")), [INFO] [stdout] 262 | | true [INFO] [stdout] 263 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 260 ~ assert!( [INFO] [stdout] 261 ~ validate_field(&String::from("hgt"), &String::from("59in")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:264:9 [INFO] [stdout] | [INFO] [stdout] 264 | / assert_eq!( [INFO] [stdout] 265 | | validate_field(&String::from("hgt"), &String::from("76in")), [INFO] [stdout] 266 | | true [INFO] [stdout] 267 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 264 ~ assert!( [INFO] [stdout] 265 ~ validate_field(&String::from("hgt"), &String::from("76in")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day03.rs:84:17 [INFO] [stdout] | [INFO] [stdout] 84 | solve_slope(&input, Slope::new(3, 1)) [INFO] [stdout] | ^^^^^^ help: change this to: `input` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day03.rs:91:45 [INFO] [stdout] | [INFO] [stdout] 91 | slope_difficulties.push(solve_slope(&input, *slope).unwrap()); [INFO] [stdout] | ^^^^^^ help: change this to: `input` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:268:9 [INFO] [stdout] | [INFO] [stdout] 268 | / assert_eq!( [INFO] [stdout] 269 | | validate_field(&String::from("hgt"), &String::from("77in")), [INFO] [stdout] 270 | | false [INFO] [stdout] 271 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 268 ~ assert!( [INFO] [stdout] 269 ~ !validate_field(&String::from("hgt"), &String::from("77in")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:273:9 [INFO] [stdout] | [INFO] [stdout] 273 | / assert_eq!( [INFO] [stdout] 274 | | validate_field(&String::from("hgt"), &String::from("76")), [INFO] [stdout] 275 | | false [INFO] [stdout] 276 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 273 ~ assert!( [INFO] [stdout] 274 ~ !validate_field(&String::from("hgt"), &String::from("76")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:277:9 [INFO] [stdout] | [INFO] [stdout] 277 | / assert_eq!( [INFO] [stdout] 278 | | validate_field(&String::from("hgt"), &String::from("193")), [INFO] [stdout] 279 | | false [INFO] [stdout] 280 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 277 ~ assert!( [INFO] [stdout] 278 ~ !validate_field(&String::from("hgt"), &String::from("193")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:285:9 [INFO] [stdout] | [INFO] [stdout] 285 | / assert_eq!( [INFO] [stdout] 286 | | validate_field(&String::from("hcl"), &String::from("ccc999")), [INFO] [stdout] 287 | | false [INFO] [stdout] 288 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 285 ~ assert!( [INFO] [stdout] 286 ~ !validate_field(&String::from("hcl"), &String::from("ccc999")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:289:9 [INFO] [stdout] | [INFO] [stdout] 289 | / assert_eq!( [INFO] [stdout] 290 | | validate_field(&String::from("hcl"), &String::from("#ccc999")), [INFO] [stdout] 291 | | true [INFO] [stdout] 292 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 289 ~ assert!( [INFO] [stdout] 290 ~ validate_field(&String::from("hcl"), &String::from("#ccc999")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day04.rs:60:24 [INFO] [stdout] | [INFO] [stdout] 60 | fn validate_field(key: &String, value: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 60 - fn validate_field(key: &String, value: &String) -> bool { [INFO] [stdout] 60 + fn validate_field(key: &str, value: &String) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day04.rs:60:40 [INFO] [stdout] | [INFO] [stdout] 60 | fn validate_field(key: &String, value: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 60 ~ fn validate_field(key: &String, value: &str) -> bool { [INFO] [stdout] 61 | match &key[..] { [INFO] [stdout] ... [INFO] [stdout] 91 | } [INFO] [stdout] 92 ~ "ecl" => ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"].contains(&value), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:65:31 [INFO] [stdout] | [INFO] [stdout] 65 | correct_length && value >= 1920 && value <= 2002 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(1920..=2002).contains(&value)` [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: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:70:31 [INFO] [stdout] | [INFO] [stdout] 70 | correct_length && value >= 2010 && value <= 2020 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(2010..=2020).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:75:31 [INFO] [stdout] | [INFO] [stdout] 75 | correct_length && value >= 2020 && value <= 2030 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(2020..=2030).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:293:9 [INFO] [stdout] | [INFO] [stdout] 293 | / assert_eq!( [INFO] [stdout] 294 | | validate_field(&String::from("hcl"), &String::from("#000000")), [INFO] [stdout] 295 | | true [INFO] [stdout] 296 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 293 ~ assert!( [INFO] [stdout] 294 ~ validate_field(&String::from("hcl"), &String::from("#000000")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:297:9 [INFO] [stdout] | [INFO] [stdout] 297 | / assert_eq!( [INFO] [stdout] 298 | | validate_field(&String::from("hcl"), &String::from("#abvc")), [INFO] [stdout] 299 | | false [INFO] [stdout] 300 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 297 ~ assert!( [INFO] [stdout] 298 ~ !validate_field(&String::from("hcl"), &String::from("#abvc")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:305:9 [INFO] [stdout] | [INFO] [stdout] 305 | / assert_eq!( [INFO] [stdout] 306 | | validate_field(&String::from("ecl"), &String::from("amb")), [INFO] [stdout] 307 | | true [INFO] [stdout] 308 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 305 ~ assert!( [INFO] [stdout] 306 ~ validate_field(&String::from("ecl"), &String::from("amb")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:309:9 [INFO] [stdout] | [INFO] [stdout] 309 | / assert_eq!( [INFO] [stdout] 310 | | validate_field(&String::from("ecl"), &String::from("blu")), [INFO] [stdout] 311 | | true [INFO] [stdout] 312 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 309 ~ assert!( [INFO] [stdout] 310 ~ validate_field(&String::from("ecl"), &String::from("blu")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:313:9 [INFO] [stdout] | [INFO] [stdout] 313 | / assert_eq!( [INFO] [stdout] 314 | | validate_field(&String::from("ecl"), &String::from("brn")), [INFO] [stdout] 315 | | true [INFO] [stdout] 316 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 313 ~ assert!( [INFO] [stdout] 314 ~ validate_field(&String::from("ecl"), &String::from("brn")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:317:9 [INFO] [stdout] | [INFO] [stdout] 317 | / assert_eq!( [INFO] [stdout] 318 | | validate_field(&String::from("ecl"), &String::from("gry")), [INFO] [stdout] 319 | | true [INFO] [stdout] 320 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 317 ~ assert!( [INFO] [stdout] 318 ~ validate_field(&String::from("ecl"), &String::from("gry")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:80:24 [INFO] [stdout] | [INFO] [stdout] 80 | return value >= 150 && value <= 193; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(150..=193).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/bin/day04.rs:84:24 [INFO] [stdout] | [INFO] [stdout] 84 | return value >= 59 && value <= 76; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(59..=76).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:321:9 [INFO] [stdout] | [INFO] [stdout] 321 | / assert_eq!( [INFO] [stdout] 322 | | validate_field(&String::from("ecl"), &String::from("grn")), [INFO] [stdout] 323 | | true [INFO] [stdout] 324 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 321 ~ assert!( [INFO] [stdout] 322 ~ validate_field(&String::from("ecl"), &String::from("grn")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:325:9 [INFO] [stdout] | [INFO] [stdout] 325 | / assert_eq!( [INFO] [stdout] 326 | | validate_field(&String::from("ecl"), &String::from("hzl")), [INFO] [stdout] 327 | | true [INFO] [stdout] 328 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 325 ~ assert!( [INFO] [stdout] 326 ~ validate_field(&String::from("ecl"), &String::from("hzl")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:329:9 [INFO] [stdout] | [INFO] [stdout] 329 | / assert_eq!( [INFO] [stdout] 330 | | validate_field(&String::from("ecl"), &String::from("oth")), [INFO] [stdout] 331 | | true [INFO] [stdout] 332 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 329 ~ assert!( [INFO] [stdout] 330 ~ validate_field(&String::from("ecl"), &String::from("oth")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:333:9 [INFO] [stdout] | [INFO] [stdout] 333 | / assert_eq!( [INFO] [stdout] 334 | | validate_field(&String::from("ecl"), &String::from("wrong")), [INFO] [stdout] 335 | | false [INFO] [stdout] 336 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 333 ~ assert!( [INFO] [stdout] 334 ~ !validate_field(&String::from("ecl"), &String::from("wrong")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:337:9 [INFO] [stdout] | [INFO] [stdout] 337 | / assert_eq!( [INFO] [stdout] 338 | | validate_field(&String::from("ecl"), &String::from("01234")), [INFO] [stdout] 339 | | false [INFO] [stdout] 340 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 337 ~ assert!( [INFO] [stdout] 338 ~ !validate_field(&String::from("ecl"), &String::from("01234")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/bin/day04.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 123 | / if parsed.keys().len() == 7 { [INFO] [stdout] 124 | | if parsed.contains_key("cid") { [INFO] [stdout] 125 | | continue; [INFO] [stdout] 126 | | } [INFO] [stdout] 127 | | } [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] 123 ~ if parsed.keys().len() == 7 [INFO] [stdout] 124 ~ && parsed.contains_key("cid") { [INFO] [stdout] 125 | continue; [INFO] [stdout] 126 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day04.rs:131:32 [INFO] [stdout] | [INFO] [stdout] 131 | if !validate_field(&k, &v) { [INFO] [stdout] | ^^ help: change this to: `k` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:345:9 [INFO] [stdout] | [INFO] [stdout] 345 | / assert_eq!( [INFO] [stdout] 346 | | validate_field(&String::from("pid"), &String::from("012345678")), [INFO] [stdout] 347 | | true [INFO] [stdout] 348 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 345 ~ assert!( [INFO] [stdout] 346 ~ validate_field(&String::from("pid"), &String::from("012345678")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/day04.rs:131:36 [INFO] [stdout] | [INFO] [stdout] 131 | if !validate_field(&k, &v) { [INFO] [stdout] | ^^ help: change this to: `v` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:349:9 [INFO] [stdout] | [INFO] [stdout] 349 | / assert_eq!( [INFO] [stdout] 350 | | validate_field(&String::from("pid"), &String::from("1234")), [INFO] [stdout] 351 | | false [INFO] [stdout] 352 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 349 ~ assert!( [INFO] [stdout] 350 ~ !validate_field(&String::from("pid"), &String::from("1234")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:353:9 [INFO] [stdout] | [INFO] [stdout] 353 | / assert_eq!( [INFO] [stdout] 354 | | validate_field(&String::from("pid"), &String::from("01234567F")), [INFO] [stdout] 355 | | false [INFO] [stdout] 356 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 353 ~ assert!( [INFO] [stdout] 354 ~ !validate_field(&String::from("pid"), &String::from("01234567F")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:361:9 [INFO] [stdout] | [INFO] [stdout] 361 | / assert_eq!( [INFO] [stdout] 362 | | validate_field(&String::from("cid"), &String::from("012345678")), [INFO] [stdout] 363 | | true [INFO] [stdout] 364 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 361 ~ assert!( [INFO] [stdout] 362 ~ validate_field(&String::from("cid"), &String::from("012345678")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:365:9 [INFO] [stdout] | [INFO] [stdout] 365 | / assert_eq!( [INFO] [stdout] 366 | | validate_field(&String::from("cid"), &String::from("1234")), [INFO] [stdout] 367 | | true [INFO] [stdout] 368 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 365 ~ assert!( [INFO] [stdout] 366 ~ validate_field(&String::from("cid"), &String::from("1234")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:369:9 [INFO] [stdout] | [INFO] [stdout] 369 | / assert_eq!( [INFO] [stdout] 370 | | validate_field(&String::from("cid"), &String::from("01234567F")), [INFO] [stdout] 371 | | true [INFO] [stdout] 372 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 369 ~ assert!( [INFO] [stdout] 370 ~ validate_field(&String::from("cid"), &String::from("01234567F")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> src/bin/day04.rs:373:9 [INFO] [stdout] | [INFO] [stdout] 373 | / assert_eq!( [INFO] [stdout] 374 | | validate_field(&String::from("cid"), &String::from("")), [INFO] [stdout] 375 | | true [INFO] [stdout] 376 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 373 ~ assert!( [INFO] [stdout] 374 ~ validate_field(&String::from("cid"), &String::from("")) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/bin/day08.rs:8:61 [INFO] [stdout] | [INFO] [stdout] 8 | let input: Vec = buffer.lines().into_iter().map(|inp| String::from(inp)).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::from` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/bin/day08.rs:8:30 [INFO] [stdout] | [INFO] [stdout] 8 | let input: Vec = buffer.lines().into_iter().map(|inp| String::from(inp)).collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `buffer.lines()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day08.rs:15:22 [INFO] [stdout] | [INFO] [stdout] 15 | fn first_part(input: &Vec) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 15 - fn first_part(input: &Vec) -> Option { [INFO] [stdout] 15 + fn first_part(input: &[String]) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day08.rs:50:32 [INFO] [stdout] | [INFO] [stdout] 50 | fn second_part(original_input: &Vec) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 50 ~ fn second_part(original_input: &[String]) -> Option { [INFO] [stdout] 51 | let mut last_checked_idx: usize = 0; [INFO] [stdout] 52 ~ let mut input = original_input.to_owned(); [INFO] [stdout] 53 | let mut result: Option; [INFO] [stdout] ... [INFO] [stdout] 67 | last_checked_idx = found.unwrap() + last_checked_idx + 1; [INFO] [stdout] 68 ~ input = original_input.to_owned(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/bin/day08.rs:62:20 [INFO] [stdout] | [INFO] [stdout] 62 | if found == None { [INFO] [stdout] | ^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `found.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`usize` -> `usize`) [INFO] [stdout] --> src/bin/day08.rs:69:49 [INFO] [stdout] | [INFO] [stdout] 69 | input[last_checked_idx] = input[last_checked_idx as usize].replace(&replace_from, &replace_to); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `last_checked_idx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/day08.rs:78:25 [INFO] [stdout] | [INFO] [stdout] 78 | fn run_program(program: &Vec) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 78 - fn run_program(program: &Vec) -> Option { [INFO] [stdout] 78 + fn run_program(program: &[String]) -> Option { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Split<'_, &str>` [INFO] [stdout] --> src/bin/day06.rs:8:34 [INFO] [stdout] | [INFO] [stdout] 8 | let groups: Vec> = buffer [INFO] [stdout] | __________________________________^ [INFO] [stdout] 9 | | .split("\n\n") [INFO] [stdout] 10 | | .into_iter() [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 8 ~ let groups: Vec> = buffer [INFO] [stdout] 9 + .split("\n\n") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Split<'_, &str>` [INFO] [stdout] --> src/bin/day06.rs:11:23 [INFO] [stdout] | [INFO] [stdout] 11 | .map(|groups| groups.split("\n").into_iter().collect()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `groups.split("\n")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/day06.rs:48:33 [INFO] [stdout] | [INFO] [stdout] 48 | .filter(|k| (&sets).into_iter().all(|s| s.contains(k))) [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.17s [INFO] running `Command { std: "docker" "inspect" "2e230f510b5c03207a52cdc046ff68cf44c0ef50d4932ef59f64818e6132a742", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2e230f510b5c03207a52cdc046ff68cf44c0ef50d4932ef59f64818e6132a742", kill_on_drop: false }` [INFO] [stdout] 2e230f510b5c03207a52cdc046ff68cf44c0ef50d4932ef59f64818e6132a742