[INFO] cloning repository https://github.com/Parxer/adventofcode-23 [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Parxer/adventofcode-23" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FParxer%2Fadventofcode-23", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FParxer%2Fadventofcode-23'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 512b2a3ca7d9d606ae201b46b8dfcfc1d3b0f065 [INFO] linting Parxer/adventofcode-23 against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FParxer%2Fadventofcode-23" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Parxer/adventofcode-23 [INFO] finished tweaking git repo https://github.com/Parxer/adventofcode-23 [INFO] tweaked toml for git repo https://github.com/Parxer/adventofcode-23 written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Parxer/adventofcode-23 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/Parxer/adventofcode-23 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] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded clap_derive v3.2.25 [INFO] [stderr] Downloaded rustix v0.38.26 [INFO] [stderr] Downloaded aocf v0.1.21 [INFO] [stderr] Downloaded ring v0.17.6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] 41516fc40e380b3be3ac2a50433a520dbca82637be3a41c0959cce2e914a4cb3 [INFO] running `Command { std: "docker" "start" "-a" "41516fc40e380b3be3ac2a50433a520dbca82637be3a41c0959cce2e914a4cb3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "41516fc40e380b3be3ac2a50433a520dbca82637be3a41c0959cce2e914a4cb3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "41516fc40e380b3be3ac2a50433a520dbca82637be3a41c0959cce2e914a4cb3", kill_on_drop: false }` [INFO] [stdout] 41516fc40e380b3be3ac2a50433a520dbca82637be3a41c0959cce2e914a4cb3 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] a5e51999db61adfb7496483d281efc65c67181c7857d32681beb647a92556425 [INFO] running `Command { std: "docker" "start" "-a" "a5e51999db61adfb7496483d281efc65c67181c7857d32681beb647a92556425", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.150 [INFO] [stderr] Checking memchr v2.6.4 [INFO] [stderr] Compiling crossbeam-utils v0.8.16 [INFO] [stderr] Compiling crossbeam-epoch v0.9.15 [INFO] [stderr] Compiling num-traits v0.2.17 [INFO] [stderr] Checking getrandom v0.2.11 [INFO] [stderr] Checking miniz_oxide v0.7.1 [INFO] [stderr] Compiling unicode-xid v0.2.4 [INFO] [stderr] Compiling rustls v0.21.9 [INFO] [stderr] Compiling rustix v0.38.26 [INFO] [stderr] Checking gimli v0.28.1 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Checking unicode-bidi v0.3.13 [INFO] [stderr] Compiling serde v1.0.193 [INFO] [stderr] Checking log v0.4.20 [INFO] [stderr] Checking rustc-demangle v0.1.23 [INFO] [stderr] Checking os_str_bytes v6.6.1 [INFO] [stderr] Checking regex-syntax v0.8.2 [INFO] [stderr] Compiling rayon-core v1.12.0 [INFO] [stderr] Checking indexmap v1.9.3 [INFO] [stderr] Checking flate2 v1.0.28 [INFO] [stderr] Compiling syn v2.0.39 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking idna v0.5.0 [INFO] [stderr] Checking clap_lex v0.2.4 [INFO] [stderr] Compiling num-integer v0.1.45 [INFO] [stderr] Checking termcolor v1.4.0 [INFO] [stderr] Compiling cc v1.0.83 [INFO] [stderr] Checking base64 v0.21.5 [INFO] [stderr] Checking webpki-roots v0.25.3 [INFO] [stderr] Checking textwrap v0.16.0 [INFO] [stderr] Checking aho-corasick v1.1.2 [INFO] [stderr] Checking object v0.32.1 [INFO] [stderr] Checking strsim v0.10.0 [INFO] [stderr] Checking url v2.5.0 [INFO] [stderr] Checking iana-time-zone v0.1.58 [INFO] [stderr] Checking colored v2.1.0 [INFO] [stderr] Checking itertools v0.12.0 [INFO] [stderr] Checking crossbeam-deque v0.8.3 [INFO] [stderr] Checking chrono v0.4.31 [INFO] [stderr] Checking rayon v1.8.0 [INFO] [stderr] Compiling ring v0.17.6 [INFO] [stderr] Compiling backtrace v0.3.69 [INFO] [stderr] Checking tempfile v3.8.1 [INFO] [stderr] Checking regex-automata v0.4.3 [INFO] [stderr] Compiling serde_derive v1.0.193 [INFO] [stderr] Checking addr2line v0.21.0 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Compiling synstructure v0.12.6 [INFO] [stderr] Checking serde_json v1.0.108 [INFO] [stderr] Compiling failure_derive v0.1.8 [INFO] [stderr] Compiling clap_derive v3.2.25 [INFO] [stderr] Checking regex v1.10.2 [INFO] [stderr] Checking failure v0.1.8 [INFO] [stderr] Checking clap v3.2.25 [INFO] [stderr] Checking rustls-webpki v0.101.7 [INFO] [stderr] Checking sct v0.7.1 [INFO] [stderr] Checking ureq v2.9.1 [INFO] [stderr] Checking aocf v0.1.21 [INFO] [stderr] Checking aoc23 v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/days/day05/mod.rs:11:15 [INFO] [stdout] | [INFO] [stdout] 11 | const STEPS: &'static [&'static str] = &["soil", "fertilizer", "water", "light", "temperature", "humidity", "location"]; [INFO] [stdout] | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/days/day05/mod.rs:11:25 [INFO] [stdout] | [INFO] [stdout] 11 | const STEPS: &'static [&'static str] = &["soil", "fertilizer", "water", "light", "temperature", "humidity", "location"]; [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::debug` [INFO] [stdout] --> src/days/day12/mod.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::debug; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::env` [INFO] [stdout] --> src/days/day03/mod.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::env; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/days/day05/mod.rs:11:15 [INFO] [stdout] | [INFO] [stdout] 11 | const STEPS: &'static [&'static str] = &["soil", "fertilizer", "water", "light", "temperature", "humidity", "location"]; [INFO] [stdout] | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/days/day05/mod.rs:11:25 [INFO] [stdout] | [INFO] [stdout] 11 | const STEPS: &'static [&'static str] = &["soil", "fertilizer", "water", "light", "temperature", "humidity", "location"]; [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::env` [INFO] [stdout] --> src/days/day06/mod.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::env; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs::File` [INFO] [stdout] --> src/days/day06/mod.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fs::File; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::Read` [INFO] [stdout] --> src/days/day06/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::Read; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::env` [INFO] [stdout] --> src/days/day07/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::env; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs::File` [INFO] [stdout] --> src/days/day08/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::fs::File; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::Read` [INFO] [stdout] --> src/days/day08/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use std::io::Read; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::env` [INFO] [stdout] --> src/days/day11/mod.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::env; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs::File` [INFO] [stdout] --> src/days/day11/mod.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fs::File; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::Read` [INFO] [stdout] --> src/days/day11/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::Read; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::env` [INFO] [stdout] --> src/days/day12/mod.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::env; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs::File` [INFO] [stdout] --> src/days/day12/mod.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fs::File; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::io::Read` [INFO] [stdout] --> src/days/day12/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::io::Read; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::debug` [INFO] [stdout] --> src/days/day12/mod.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::debug; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `result` is never read [INFO] [stdout] --> src/days/day11/mod.rs:18:27 [INFO] [stdout] | [INFO] [stdout] 18 | let mut result: u64 = 0; [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: importing legacy numeric constants [INFO] [stdout] --> src/days/day01/mod.rs:2:16 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{env, usize}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: remove this import [INFO] [stdout] = note: then `usize::` will resolve to the respective associated constant [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] = note: `#[warn(clippy::legacy_numeric_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/days/day01/mod.rs:40:12 [INFO] [stdout] | [INFO] [stdout] 40 | if !(env::var("AOC_DEBUG").is_ok()) { continue } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `env::var("AOC_DEBUG").is_err()` [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 `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/days/day01/mod.rs:16:19 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn run(input: &String, part: Part) -> String { [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] 16 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 16 + pub fn run(input: &str, part: Part) -> String { [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/days/day02/mod.rs:32:19 [INFO] [stdout] | [INFO] [stdout] 32 | pub fn run(input: &String, part: Part) -> String { [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] 32 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 32 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/days/day02/mod.rs:49:27 [INFO] [stdout] | [INFO] [stdout] 49 | let num = u32::from_str_radix(color_iter.next().unwrap(), 10).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `color_iter.next().unwrap().parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] = note: `#[warn(clippy::from_str_radix_10)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/days/day02/mod.rs:70:31 [INFO] [stdout] | [INFO] [stdout] 70 | result += u32::from_str_radix(game_num, 10).expect("Failed to parse game num"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `game_num.parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.fold` can be written more succinctly using another method [INFO] [stdout] --> src/days/day02/mod.rs:74:42 [INFO] [stdout] | [INFO] [stdout] 74 | result += rgb_max.iter().fold(1, |pow, item | item * pow); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `product::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stdout] = note: `#[warn(clippy::unnecessary_fold)]` 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/days/day03/mod.rs:16:19 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn run(input: &String, part: Part) -> String { [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] 16 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 16 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/days/day03/mod.rs:17:38 [INFO] [stdout] | [INFO] [stdout] 17 | if part == Part::Second { return format!("N/A") } [INFO] [stdout] | ^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"N/A".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `i` is used as a loop counter [INFO] [stdout] --> src/days/day03/mod.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | for line in input.lines() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (i, line) in input.lines().enumerate()` [INFO] [stdout] | [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: use of `char::is_digit` with literal radix of 10 [INFO] [stdout] --> src/days/day03/mod.rs:27:42 [INFO] [stdout] | [INFO] [stdout] 27 | let mut started_reading_number = line.chars().next().unwrap().is_digit(10); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `line.chars().next().unwrap().is_ascii_digit()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#is_digit_ascii_radix [INFO] [stdout] = note: `#[warn(clippy::is_digit_ascii_radix)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `char::is_digit` with literal radix of 10 [INFO] [stdout] --> src/days/day03/mod.rs:31:28 [INFO] [stdout] | [INFO] [stdout] 31 | let is_digit = c.is_digit(10); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `c.is_ascii_digit()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#is_digit_ascii_radix [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/days/day03/mod.rs:41:28 [INFO] [stdout] | [INFO] [stdout] 41 | value: u32::from_str_radix(&line[start[1]..=end[1]], 10).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `line[start[1]..=end[1]].parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/days/day03/mod.rs:53:24 [INFO] [stdout] | [INFO] [stdout] 53 | value: u32::from_str_radix(&line[start[1]..=end[1]], 10).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `line[start[1]..=end[1]].parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/days/day04/mod.rs:9:19 [INFO] [stdout] | [INFO] [stdout] 9 | pub fn run(input: &String, part: Part) -> String { [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] 9 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 9 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/days/day04/mod.rs:36:39 [INFO] [stdout] | [INFO] [stdout] 36 | card_counts[i] += 1 * card_counts[index]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `card_counts[index]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.fold` can be written more succinctly using another method [INFO] [stdout] --> src/days/day04/mod.rs:46:59 [INFO] [stdout] | [INFO] [stdout] 46 | if part == Part::Second { result = card_counts.iter().fold(0, |sum, item| item + sum); } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `sum::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/days/day05/mod.rs:13:19 [INFO] [stdout] | [INFO] [stdout] 13 | pub fn run(input: &String, part: Part) -> String { [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] 13 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 13 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/days/day05/mod.rs:73:15 [INFO] [stdout] | [INFO] [stdout] 73 | result += values.iter().min().ok_or_else(|| 0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 73 - result += values.iter().min().ok_or_else(|| 0).unwrap(); [INFO] [stdout] 73 + result += values.iter().min().ok_or(0).unwrap(); [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/days/day06/mod.rs:18:19 [INFO] [stdout] | [INFO] [stdout] 18 | pub fn run(input: &String, part: Part) -> String { [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] 18 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 18 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/days/day06/mod.rs:21:25 [INFO] [stdout] | [INFO] [stdout] 21 | let mut line_iter = input.lines().into_iter(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `input.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: found `.or(Some(…)).unwrap()` [INFO] [stdout] --> src/days/day07/mod.rs:32:31 [INFO] [stdout] | [INFO] [stdout] 32 | rest.to_digit(10).or(Some(0)).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or(0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_then_unwrap [INFO] [stdout] = note: `#[warn(clippy::or_then_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/days/day07/mod.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 59 | if hand.chars().find(|c| *c == 'J') == None { return get_hand_type(hand) } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `hand.chars().find(|c| *c == 'J').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: iterating on a map's values [INFO] [stdout] --> src/days/day07/mod.rs:74:32 [INFO] [stdout] | [INFO] [stdout] 74 | let mut hand: Vec = hand.chars().fold(HashMap::::new(), |mut h, x | { [INFO] [stdout] | ________________________________^ [INFO] [stdout] 75 | | *h.entry(x).or_default() += 1; [INFO] [stdout] 76 | | h [INFO] [stdout] 77 | | }).into_iter().map(|(_, val)| val).collect(); [INFO] [stdout] | |______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_kv_map [INFO] [stdout] = note: `#[warn(clippy::iter_kv_map)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 74 ~ let mut hand: Vec = hand.chars().fold(HashMap::::new(), |mut h, x | { [INFO] [stdout] 75 + *h.entry(x).or_default() += 1; [INFO] [stdout] 76 + h [INFO] [stdout] 77 ~ }).into_values().collect(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/days/day07/mod.rs:81:5 [INFO] [stdout] | [INFO] [stdout] 81 | / match max_two[0] { [INFO] [stdout] 82 | | &5 => { HandType::FiveOfAKind }, [INFO] [stdout] 83 | | &4 => { HandType::FourOfAKind }, [INFO] [stdout] 84 | | &3 => { if *max_two[1] == 2 { HandType::FullHouse } else { HandType::ThreeOfAKind } }, [INFO] [stdout] 85 | | &2 => { if *max_two[1] == 2 { HandType::TwoPair } else { HandType::OnePair } }, [INFO] [stdout] 86 | | _ => HandType::HighCard [INFO] [stdout] 87 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] = note: `#[warn(clippy::match_ref_pats)]` on by default [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 81 ~ match *max_two[0] { [INFO] [stdout] 82 ~ 5 => { HandType::FiveOfAKind }, [INFO] [stdout] 83 ~ 4 => { HandType::FourOfAKind }, [INFO] [stdout] 84 ~ 3 => { if *max_two[1] == 2 { HandType::FullHouse } else { HandType::ThreeOfAKind } }, [INFO] [stdout] 85 ~ 2 => { if *max_two[1] == 2 { HandType::TwoPair } else { HandType::OnePair } }, [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/days/day07/mod.rs:90:19 [INFO] [stdout] | [INFO] [stdout] 90 | pub fn run(input: &String, part: Part) -> String { [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] 90 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 90 + pub fn run(input: &str, part: Part) -> String { [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/days/day08/mod.rs:10:19 [INFO] [stdout] | [INFO] [stdout] 10 | pub fn run(input: &String, part: Part) -> String { [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] 10 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 10 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day09/mod.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | / return if !new_steps.iter().any(|&s| s != 0) { steps[0] } else { match part { [INFO] [stdout] 16 | | Part::First => { steps.last().unwrap() + get_next_step(new_steps, part) } [INFO] [stdout] 17 | | Part::Second => { steps[0] - get_next_step(new_steps, part) } [INFO] [stdout] 18 | | } } [INFO] [stdout] | |_______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 15 ~ if !new_steps.iter().any(|&s| s != 0) { steps[0] } else { match part { [INFO] [stdout] 16 + Part::First => { steps.last().unwrap() + get_next_step(new_steps, part) } [INFO] [stdout] 17 + Part::Second => { steps[0] - get_next_step(new_steps, part) } [INFO] [stdout] 18 + } } [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/days/day09/mod.rs:21:19 [INFO] [stdout] | [INFO] [stdout] 21 | pub fn run(input: &String, part: Part) -> String { [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] 21 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 21 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day10/mod.rs:33:27 [INFO] [stdout] | [INFO] [stdout] 33 | None => { return None; } [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 33 - None => { return None; } [INFO] [stdout] 33 + None => { None} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day10/mod.rs:35:21 [INFO] [stdout] | [INFO] [stdout] 35 | return Some(ret)} [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 35 - return Some(ret)} [INFO] [stdout] 35 + Some(ret)} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `result` is never read [INFO] [stdout] --> src/days/day11/mod.rs:18:27 [INFO] [stdout] | [INFO] [stdout] 18 | let mut result: u64 = 0; [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) 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/days/day10/mod.rs:52:19 [INFO] [stdout] | [INFO] [stdout] 52 | pub fn run(input: &String, part: Part) -> String { [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] 52 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 52 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/days/day10/mod.rs:59:12 [INFO] [stdout] | [INFO] [stdout] 59 | if start == None { [INFO] [stdout] | ^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `start.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] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/days/day10/mod.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | if path.len() == 0 { return format!("No route found!") } [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.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: useless use of `format!` [INFO] [stdout] --> src/days/day10/mod.rs:68:33 [INFO] [stdout] | [INFO] [stdout] 68 | if path.len() == 0 { return format!("No route found!") } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"No route found!".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/days/day10/mod.rs:83:16 [INFO] [stdout] | [INFO] [stdout] 83 | if path_length % 2 == 0 { path_length -= 1; } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace with: `path_length.is_multiple_of(2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/days/day10/mod.rs:84:22 [INFO] [stdout] | [INFO] [stdout] 84 | result = (u32::try_from(path_length).unwrap() +1 ) / 2; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `u32::try_from(path_length).unwrap().div_ceil(2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `grid` [INFO] [stdout] --> src/days/day10/mod.rs:88:22 [INFO] [stdout] | [INFO] [stdout] 88 | for x in 0..grid.len() { [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] 88 - for x in 0..grid.len() { [INFO] [stdout] 88 + for (x, ) in grid.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `yy` is only used to index `grid` [INFO] [stdout] --> src/days/day10/mod.rs:96:43 [INFO] [stdout] | [INFO] [stdout] 96 | ... for yy in y+1..grid[x].len() { [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 [INFO] [stdout] | [INFO] [stdout] 96 - for yy in y+1..grid[x].len() { [INFO] [stdout] 96 + for in grid.iter().take(grid[x].len()).skip(y+1) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `yy` is only used to index `grid` [INFO] [stdout] --> src/days/day10/mod.rs:105:43 [INFO] [stdout] | [INFO] [stdout] 105 | ... for yy in y+1..grid[x].len() { [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 [INFO] [stdout] | [INFO] [stdout] 105 - for yy in y+1..grid[x].len() { [INFO] [stdout] 105 + for in grid.iter().take(grid[x].len()).skip(y+1) { [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/days/day11/mod.rs:16:35 [INFO] [stdout] | [INFO] [stdout] 16 | fn run_with_expansion_rate(input: &String, expansion_rate: usize) -> String { [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] 16 - fn run_with_expansion_rate(input: &String, expansion_rate: usize) -> String { [INFO] [stdout] 16 + fn run_with_expansion_rate(input: &str, expansion_rate: usize) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `r` is only used to index `grid` [INFO] [stdout] --> src/days/day11/mod.rs:35:18 [INFO] [stdout] | [INFO] [stdout] 35 | for r in 0..grid.len() { [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 [INFO] [stdout] | [INFO] [stdout] 35 - for r in 0..grid.len() { [INFO] [stdout] 35 + for in &grid { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `r` is used to index `grid` [INFO] [stdout] --> src/days/day11/mod.rs:44:14 [INFO] [stdout] | [INFO] [stdout] 44 | for r in 0..grid.len() { [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] 44 - for r in 0..grid.len() { [INFO] [stdout] 44 + for (r, ) in grid.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `c` is used to index `grid` [INFO] [stdout] --> src/days/day11/mod.rs:45:18 [INFO] [stdout] | [INFO] [stdout] 45 | for c in 0..grid[r].len() { [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] 45 - for c in 0..grid[r].len() { [INFO] [stdout] 45 + for (c, ) in grid.iter().enumerate().take(grid[r].len()) { [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/days/day12/mod.rs:11:19 [INFO] [stdout] | [INFO] [stdout] 11 | pub fn run(input: &String, part: Part) -> String { [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] 11 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 11 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/days/day12/mod.rs:12:38 [INFO] [stdout] | [INFO] [stdout] 12 | if part == Part::Second { return format!("N/A"); } // TODO: delete later [INFO] [stdout] | ^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"N/A".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day12/mod.rs:25:31 [INFO] [stdout] | [INFO] [stdout] 25 | None => { return None } [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 25 - None => { return None } [INFO] [stdout] 25 + None => { None } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day12/mod.rs:27:52 [INFO] [stdout] | [INFO] [stdout] 27 | if *count != num_missing { return None } [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 27 - if *count != num_missing { return None } [INFO] [stdout] 27 + if *count != num_missing { None } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:33:8 [INFO] [stdout] | [INFO] [stdout] 33 | if days.len() == 0 { days.push(today.day()); } [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `days.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] [INFO] [stdout] [INFO] [stdout] warning: importing legacy numeric constants [INFO] [stdout] --> src/days/day01/mod.rs:2:16 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{env, usize}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: remove this import [INFO] [stdout] = note: then `usize::` will resolve to the respective associated constant [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#legacy_numeric_constants [INFO] [stdout] = note: `#[warn(clippy::legacy_numeric_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/days/day01/mod.rs:40:12 [INFO] [stdout] | [INFO] [stdout] 40 | if !(env::var("AOC_DEBUG").is_ok()) { continue } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `env::var("AOC_DEBUG").is_err()` [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 `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/days/day01/mod.rs:16:19 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn run(input: &String, part: Part) -> String { [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] 16 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 16 + pub fn run(input: &str, part: Part) -> String { [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/days/day02/mod.rs:32:19 [INFO] [stdout] | [INFO] [stdout] 32 | pub fn run(input: &String, part: Part) -> String { [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] 32 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 32 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/days/day02/mod.rs:49:27 [INFO] [stdout] | [INFO] [stdout] 49 | let num = u32::from_str_radix(color_iter.next().unwrap(), 10).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `color_iter.next().unwrap().parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] = note: `#[warn(clippy::from_str_radix_10)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/days/day02/mod.rs:70:31 [INFO] [stdout] | [INFO] [stdout] 70 | result += u32::from_str_radix(game_num, 10).expect("Failed to parse game num"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `game_num.parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.fold` can be written more succinctly using another method [INFO] [stdout] --> src/days/day02/mod.rs:74:42 [INFO] [stdout] | [INFO] [stdout] 74 | result += rgb_max.iter().fold(1, |pow, item | item * pow); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `product::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stdout] = note: `#[warn(clippy::unnecessary_fold)]` 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/days/day03/mod.rs:16:19 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn run(input: &String, part: Part) -> String { [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] 16 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 16 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/days/day03/mod.rs:17:38 [INFO] [stdout] | [INFO] [stdout] 17 | if part == Part::Second { return format!("N/A") } [INFO] [stdout] | ^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"N/A".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `i` is used as a loop counter [INFO] [stdout] --> src/days/day03/mod.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | for line in input.lines() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `for (i, line) in input.lines().enumerate()` [INFO] [stdout] | [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: use of `char::is_digit` with literal radix of 10 [INFO] [stdout] --> src/days/day03/mod.rs:27:42 [INFO] [stdout] | [INFO] [stdout] 27 | let mut started_reading_number = line.chars().next().unwrap().is_digit(10); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `line.chars().next().unwrap().is_ascii_digit()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#is_digit_ascii_radix [INFO] [stdout] = note: `#[warn(clippy::is_digit_ascii_radix)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `char::is_digit` with literal radix of 10 [INFO] [stdout] --> src/days/day03/mod.rs:31:28 [INFO] [stdout] | [INFO] [stdout] 31 | let is_digit = c.is_digit(10); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `c.is_ascii_digit()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#is_digit_ascii_radix [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/days/day03/mod.rs:41:28 [INFO] [stdout] | [INFO] [stdout] 41 | value: u32::from_str_radix(&line[start[1]..=end[1]], 10).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `line[start[1]..=end[1]].parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `from_str_radix` can be replaced with a call to `str::parse` [INFO] [stdout] --> src/days/day03/mod.rs:53:24 [INFO] [stdout] | [INFO] [stdout] 53 | value: u32::from_str_radix(&line[start[1]..=end[1]], 10).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `line[start[1]..=end[1]].parse::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_str_radix_10 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/days/day04/mod.rs:9:19 [INFO] [stdout] | [INFO] [stdout] 9 | pub fn run(input: &String, part: Part) -> String { [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] 9 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 9 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this operation has no effect [INFO] [stdout] --> src/days/day04/mod.rs:36:39 [INFO] [stdout] | [INFO] [stdout] 36 | card_counts[i] += 1 * card_counts[index]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider reducing it to: `card_counts[index]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_op [INFO] [stdout] = note: `#[warn(clippy::identity_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.fold` can be written more succinctly using another method [INFO] [stdout] --> src/days/day04/mod.rs:46:59 [INFO] [stdout] | [INFO] [stdout] 46 | if part == Part::Second { result = card_counts.iter().fold(0, |sum, item| item + sum); } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `sum::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/days/day05/mod.rs:13:19 [INFO] [stdout] | [INFO] [stdout] 13 | pub fn run(input: &String, part: Part) -> String { [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] 13 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 13 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/days/day05/mod.rs:73:15 [INFO] [stdout] | [INFO] [stdout] 73 | result += values.iter().min().ok_or_else(|| 0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 73 - result += values.iter().min().ok_or_else(|| 0).unwrap(); [INFO] [stdout] 73 + result += values.iter().min().ok_or(0).unwrap(); [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/days/day06/mod.rs:18:19 [INFO] [stdout] | [INFO] [stdout] 18 | pub fn run(input: &String, part: Part) -> String { [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] 18 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 18 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/days/day06/mod.rs:21:25 [INFO] [stdout] | [INFO] [stdout] 21 | let mut line_iter = input.lines().into_iter(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `input.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: found `.or(Some(…)).unwrap()` [INFO] [stdout] --> src/days/day07/mod.rs:32:31 [INFO] [stdout] | [INFO] [stdout] 32 | rest.to_digit(10).or(Some(0)).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or(0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_then_unwrap [INFO] [stdout] = note: `#[warn(clippy::or_then_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/days/day07/mod.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 59 | if hand.chars().find(|c| *c == 'J') == None { return get_hand_type(hand) } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `hand.chars().find(|c| *c == 'J').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: iterating on a map's values [INFO] [stdout] --> src/days/day07/mod.rs:74:32 [INFO] [stdout] | [INFO] [stdout] 74 | let mut hand: Vec = hand.chars().fold(HashMap::::new(), |mut h, x | { [INFO] [stdout] | ________________________________^ [INFO] [stdout] 75 | | *h.entry(x).or_default() += 1; [INFO] [stdout] 76 | | h [INFO] [stdout] 77 | | }).into_iter().map(|(_, val)| val).collect(); [INFO] [stdout] | |______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_kv_map [INFO] [stdout] = note: `#[warn(clippy::iter_kv_map)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 74 ~ let mut hand: Vec = hand.chars().fold(HashMap::::new(), |mut h, x | { [INFO] [stdout] 75 + *h.entry(x).or_default() += 1; [INFO] [stdout] 76 + h [INFO] [stdout] 77 ~ }).into_values().collect(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/days/day07/mod.rs:81:5 [INFO] [stdout] | [INFO] [stdout] 81 | / match max_two[0] { [INFO] [stdout] 82 | | &5 => { HandType::FiveOfAKind }, [INFO] [stdout] 83 | | &4 => { HandType::FourOfAKind }, [INFO] [stdout] 84 | | &3 => { if *max_two[1] == 2 { HandType::FullHouse } else { HandType::ThreeOfAKind } }, [INFO] [stdout] 85 | | &2 => { if *max_two[1] == 2 { HandType::TwoPair } else { HandType::OnePair } }, [INFO] [stdout] 86 | | _ => HandType::HighCard [INFO] [stdout] 87 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] = note: `#[warn(clippy::match_ref_pats)]` on by default [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 81 ~ match *max_two[0] { [INFO] [stdout] 82 ~ 5 => { HandType::FiveOfAKind }, [INFO] [stdout] 83 ~ 4 => { HandType::FourOfAKind }, [INFO] [stdout] 84 ~ 3 => { if *max_two[1] == 2 { HandType::FullHouse } else { HandType::ThreeOfAKind } }, [INFO] [stdout] 85 ~ 2 => { if *max_two[1] == 2 { HandType::TwoPair } else { HandType::OnePair } }, [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/days/day07/mod.rs:90:19 [INFO] [stdout] | [INFO] [stdout] 90 | pub fn run(input: &String, part: Part) -> String { [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] 90 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 90 + pub fn run(input: &str, part: Part) -> String { [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/days/day08/mod.rs:10:19 [INFO] [stdout] | [INFO] [stdout] 10 | pub fn run(input: &String, part: Part) -> String { [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] 10 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 10 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day09/mod.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | / return if !new_steps.iter().any(|&s| s != 0) { steps[0] } else { match part { [INFO] [stdout] 16 | | Part::First => { steps.last().unwrap() + get_next_step(new_steps, part) } [INFO] [stdout] 17 | | Part::Second => { steps[0] - get_next_step(new_steps, part) } [INFO] [stdout] 18 | | } } [INFO] [stdout] | |_______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 15 ~ if !new_steps.iter().any(|&s| s != 0) { steps[0] } else { match part { [INFO] [stdout] 16 + Part::First => { steps.last().unwrap() + get_next_step(new_steps, part) } [INFO] [stdout] 17 + Part::Second => { steps[0] - get_next_step(new_steps, part) } [INFO] [stdout] 18 + } } [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/days/day09/mod.rs:21:19 [INFO] [stdout] | [INFO] [stdout] 21 | pub fn run(input: &String, part: Part) -> String { [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] 21 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 21 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day10/mod.rs:33:27 [INFO] [stdout] | [INFO] [stdout] 33 | None => { return None; } [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 33 - None => { return None; } [INFO] [stdout] 33 + None => { None} [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day10/mod.rs:35:21 [INFO] [stdout] | [INFO] [stdout] 35 | return Some(ret)} [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 35 - return Some(ret)} [INFO] [stdout] 35 + Some(ret)} [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/days/day10/mod.rs:52:19 [INFO] [stdout] | [INFO] [stdout] 52 | pub fn run(input: &String, part: Part) -> String { [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] 52 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 52 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/days/day10/mod.rs:59:12 [INFO] [stdout] | [INFO] [stdout] 59 | if start == None { [INFO] [stdout] | ^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `start.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] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/days/day10/mod.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | if path.len() == 0 { return format!("No route found!") } [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `path.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: useless use of `format!` [INFO] [stdout] --> src/days/day10/mod.rs:68:33 [INFO] [stdout] | [INFO] [stdout] 68 | if path.len() == 0 { return format!("No route found!") } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"No route found!".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/days/day10/mod.rs:83:16 [INFO] [stdout] | [INFO] [stdout] 83 | if path_length % 2 == 0 { path_length -= 1; } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace with: `path_length.is_multiple_of(2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/days/day10/mod.rs:84:22 [INFO] [stdout] | [INFO] [stdout] 84 | result = (u32::try_from(path_length).unwrap() +1 ) / 2; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `u32::try_from(path_length).unwrap().div_ceil(2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `x` is used to index `grid` [INFO] [stdout] --> src/days/day10/mod.rs:88:22 [INFO] [stdout] | [INFO] [stdout] 88 | for x in 0..grid.len() { [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] 88 - for x in 0..grid.len() { [INFO] [stdout] 88 + for (x, ) in grid.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `yy` is only used to index `grid` [INFO] [stdout] --> src/days/day10/mod.rs:96:43 [INFO] [stdout] | [INFO] [stdout] 96 | ... for yy in y+1..grid[x].len() { [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 [INFO] [stdout] | [INFO] [stdout] 96 - for yy in y+1..grid[x].len() { [INFO] [stdout] 96 + for in grid.iter().take(grid[x].len()).skip(y+1) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `yy` is only used to index `grid` [INFO] [stdout] --> src/days/day10/mod.rs:105:43 [INFO] [stdout] | [INFO] [stdout] 105 | ... for yy in y+1..grid[x].len() { [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 [INFO] [stdout] | [INFO] [stdout] 105 - for yy in y+1..grid[x].len() { [INFO] [stdout] 105 + for in grid.iter().take(grid[x].len()).skip(y+1) { [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/days/day11/mod.rs:16:35 [INFO] [stdout] | [INFO] [stdout] 16 | fn run_with_expansion_rate(input: &String, expansion_rate: usize) -> String { [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] 16 - fn run_with_expansion_rate(input: &String, expansion_rate: usize) -> String { [INFO] [stdout] 16 + fn run_with_expansion_rate(input: &str, expansion_rate: usize) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `r` is only used to index `grid` [INFO] [stdout] --> src/days/day11/mod.rs:35:18 [INFO] [stdout] | [INFO] [stdout] 35 | for r in 0..grid.len() { [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 [INFO] [stdout] | [INFO] [stdout] 35 - for r in 0..grid.len() { [INFO] [stdout] 35 + for in &grid { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `r` is used to index `grid` [INFO] [stdout] --> src/days/day11/mod.rs:44:14 [INFO] [stdout] | [INFO] [stdout] 44 | for r in 0..grid.len() { [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] 44 - for r in 0..grid.len() { [INFO] [stdout] 44 + for (r, ) in grid.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `c` is used to index `grid` [INFO] [stdout] --> src/days/day11/mod.rs:45:18 [INFO] [stdout] | [INFO] [stdout] 45 | for c in 0..grid[r].len() { [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] 45 - for c in 0..grid[r].len() { [INFO] [stdout] 45 + for (c, ) in grid.iter().enumerate().take(grid[r].len()) { [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/days/day12/mod.rs:11:19 [INFO] [stdout] | [INFO] [stdout] 11 | pub fn run(input: &String, part: Part) -> String { [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] 11 - pub fn run(input: &String, part: Part) -> String { [INFO] [stdout] 11 + pub fn run(input: &str, part: Part) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/days/day12/mod.rs:12:38 [INFO] [stdout] | [INFO] [stdout] 12 | if part == Part::Second { return format!("N/A"); } // TODO: delete later [INFO] [stdout] | ^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"N/A".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day12/mod.rs:25:31 [INFO] [stdout] | [INFO] [stdout] 25 | None => { return None } [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 25 - None => { return None } [INFO] [stdout] 25 + None => { None } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/days/day12/mod.rs:27:52 [INFO] [stdout] | [INFO] [stdout] 27 | if *count != num_missing { return None } [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 27 - if *count != num_missing { return None } [INFO] [stdout] 27 + if *count != num_missing { None } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:33:8 [INFO] [stdout] | [INFO] [stdout] 33 | if days.len() == 0 { days.push(today.day()); } [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `days.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] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 20.79s [INFO] running `Command { std: "docker" "inspect" "a5e51999db61adfb7496483d281efc65c67181c7857d32681beb647a92556425", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a5e51999db61adfb7496483d281efc65c67181c7857d32681beb647a92556425", kill_on_drop: false }` [INFO] [stdout] a5e51999db61adfb7496483d281efc65c67181c7857d32681beb647a92556425