[INFO] fetching crate loopers-common 0.2.0... [INFO] linting loopers-common-0.2.0 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate loopers-common 0.2.0 into /workspace/builds/worker-2-tc1/source [INFO] started tweaking crates.io crate loopers-common 0.2.0 [INFO] finished tweaking crates.io crate loopers-common 0.2.0 [INFO] tweaked toml for crates.io crate loopers-common 0.2.0 written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate loopers-common 0.2.0 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] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Locking 60 packages to latest compatible versions [INFO] [stderr] Adding derive_more v0.99.20 (available: v2.1.1) [INFO] [stderr] Adding fern v0.6.2 (available: v0.7.1) [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] Downloading crates ... [INFO] [stderr] Downloaded fern v0.6.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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] 591d3dec6bfc45e58283935b056c3021cb5ec79cb53e9c8823086734eece8df9 [INFO] running `Command { std: "docker" "start" "-a" "591d3dec6bfc45e58283935b056c3021cb5ec79cb53e9c8823086734eece8df9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "591d3dec6bfc45e58283935b056c3021cb5ec79cb53e9c8823086734eece8df9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "591d3dec6bfc45e58283935b056c3021cb5ec79cb53e9c8823086734eece8df9", kill_on_drop: false }` [INFO] [stdout] 591d3dec6bfc45e58283935b056c3021cb5ec79cb53e9c8823086734eece8df9 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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] d75de0d51c812b7e9164431bc9aff08e2d1c58d6cdcb4dc1d689a66d8cd9c32f [INFO] running `Command { std: "docker" "start" "-a" "d75de0d51c812b7e9164431bc9aff08e2d1c58d6cdcb4dc1d689a66d8cd9c32f", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.183 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Checking linux-raw-sys v0.12.1 [INFO] [stderr] Checking memchr v2.8.0 [INFO] [stderr] Checking once_cell v1.21.4 [INFO] [stderr] Checking ryu v1.0.23 [INFO] [stderr] Compiling convert_case v0.4.0 [INFO] [stderr] Checking crossbeam-queue v0.3.12 [INFO] [stderr] Checking fern v0.6.2 [INFO] [stderr] Checking csv-core v0.1.13 [INFO] [stderr] Checking tempfile v3.27.0 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling derive_more v0.99.20 [INFO] [stderr] Checking csv v1.4.0 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking loopers-common v0.2.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: field `level` is never read [INFO] [stdout] --> src/gui_channel.rs:79:5 [INFO] [stdout] | [INFO] [stdout] 76 | pub struct LogMessage { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 79 | level: LogLevel, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LogMessage` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:143:27 [INFO] [stdout] | [INFO] [stdout] 143 | let target_type = args.get(0).ok_or(format!("{} expects a target", command))?; [INFO] [stdout] | ^^^^^^^^^^^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/api.rs:176:24 [INFO] [stdout] | [INFO] [stdout] 176 | if f < -1.0 || f > 1.0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use: `!(-1.0..=1.0).contains(&f)` [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/api.rs:200:24 [INFO] [stdout] | [INFO] [stdout] 200 | if f < 0.0 || f > 1.0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: use: `!(0.0..=1.0).contains(&f)` [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: redundant closure [INFO] [stdout] --> src/api.rs:280:26 [INFO] [stdout] | [INFO] [stdout] 280 | .map(|t| FrameTime(t)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the tuple struct itself: `FrameTime` [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: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:277:27 [INFO] [stdout] | [INFO] [stdout] 277 | let arg = args [INFO] [stdout] | ___________________________^ [INFO] [stdout] 278 | | .get(0) [INFO] [stdout] | |___________________________^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:287:27 [INFO] [stdout] | [INFO] [stdout] 287 | let arg = args [INFO] [stdout] | ___________________________^ [INFO] [stdout] 288 | | .get(0) [INFO] [stdout] | |___________________________^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:300:27 [INFO] [stdout] | [INFO] [stdout] 300 | let arg = args.get(0).and_then(|s| u8::from_str(s).ok()).ok_or( [INFO] [stdout] | ^^^^^^^^^^^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:313:27 [INFO] [stdout] | [INFO] [stdout] 313 | let arg = args [INFO] [stdout] | ___________________________^ [INFO] [stdout] 314 | | .get(0) [INFO] [stdout] | |___________________________^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `as_ref` does nothing [INFO] [stdout] --> src/api.rs:315:41 [INFO] [stdout] | [INFO] [stdout] 315 | .and_then(|s| match s.as_ref() { [INFO] [stdout] | ^^^^^^^^^^ help: try: `s` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stdout] = note: `#[warn(clippy::useless_asref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:328:27 [INFO] [stdout] | [INFO] [stdout] 328 | let arg = args [INFO] [stdout] | ___________________________^ [INFO] [stdout] 329 | | .get(0) [INFO] [stdout] | |___________________________^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `as_ref` does nothing [INFO] [stdout] --> src/api.rs:330:41 [INFO] [stdout] | [INFO] [stdout] 330 | .and_then(|s| match s.as_ref() { [INFO] [stdout] | ^^^^^^^^^^ help: try: `s` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:344:27 [INFO] [stdout] | [INFO] [stdout] 344 | let arg = args.get(0).and_then(|s| u8::from_str(s).ok()).ok_or( [INFO] [stdout] | ^^^^^^^^^^^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/api.rs:407:9 [INFO] [stdout] | [INFO] [stdout] 407 | !(self.a || self.b || self.c || self.c) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 407 - !(self.a || self.b || self.c || self.c) [INFO] [stdout] 407 + !(self.a || self.b || self.c) [INFO] [stdout] | [INFO] [stdout] 407 - !(self.a || self.b || self.c || self.c) [INFO] [stdout] 407 + !self.a && !self.b && !self.c [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/api.rs:407:10 [INFO] [stdout] | [INFO] [stdout] 407 | !(self.a || self.b || self.c || self.c) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 407 - !(self.a || self.b || self.c || self.c) [INFO] [stdout] 407 + !!(!self.a && !self.b && !self.c) [INFO] [stdout] | [INFO] [stdout] 407 - !(self.a || self.b || self.c || self.c) [INFO] [stdout] 407 + !self.a || self.b || self.c [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Config` [INFO] [stdout] --> src/config.rs:82:5 [INFO] [stdout] | [INFO] [stdout] 82 | / pub fn new() -> Config { [INFO] [stdout] 83 | | Config { [INFO] [stdout] 84 | | midi_mappings: vec![], [INFO] [stdout] 85 | | } [INFO] [stdout] 86 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 81 + impl Default for Config { [INFO] [stdout] 82 + fn default() -> Self { [INFO] [stdout] 83 + Self::new() [INFO] [stdout] 84 + } [INFO] [stdout] 85 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `level` is never read [INFO] [stdout] --> src/gui_channel.rs:79:5 [INFO] [stdout] | [INFO] [stdout] 76 | pub struct LogMessage { [INFO] [stdout] | ---------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 79 | level: LogLevel, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LogMessage` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/config.rs:165:17 [INFO] [stdout] | [INFO] [stdout] 165 | Err(io::Error::new( [INFO] [stdout] | _________________^ [INFO] [stdout] 166 | | io::ErrorKind::Other, [INFO] [stdout] 167 | | format!("Failed to parse midi mappings from {}", name), [INFO] [stdout] 168 | | )) [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 165 ~ Err(io::Error::other( [INFO] [stdout] 166 ~ format!("Failed to parse midi mappings from {}", name), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/config.rs:183:28 [INFO] [stdout] | [INFO] [stdout] 183 | if c >= 1 && c <= 16 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: use: `(1..=16).contains(&c)` [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: you should consider adding a `Default` implementation for `LogMessage` [INFO] [stdout] --> src/gui_channel.rs:83:5 [INFO] [stdout] | [INFO] [stdout] 83 | / pub fn new() -> Self { [INFO] [stdout] 84 | | LogMessage { [INFO] [stdout] 85 | | buffer: ArrayVec::new(), [INFO] [stdout] 86 | | len: 0, [INFO] [stdout] ... | [INFO] [stdout] 89 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 82 + impl Default for LogMessage { [INFO] [stdout] 83 + fn default() -> Self { [INFO] [stdout] 84 + Self::new() [INFO] [stdout] 85 + } [INFO] [stdout] 86 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gui_channel.rs:167:52 [INFO] [stdout] | [INFO] [stdout] 167 | pub fn send_log(&mut self, message: LogMessage) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:143:27 [INFO] [stdout] | [INFO] [stdout] 143 | let target_type = args.get(0).ok_or(format!("{} expects a target", command))?; [INFO] [stdout] | ^^^^^^^^^^^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/api.rs:176:24 [INFO] [stdout] | [INFO] [stdout] 176 | if f < -1.0 || f > 1.0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: use: `!(-1.0..=1.0).contains(&f)` [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/api.rs:200:24 [INFO] [stdout] | [INFO] [stdout] 200 | if f < 0.0 || f > 1.0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: use: `!(0.0..=1.0).contains(&f)` [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: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/music.rs:243:11 [INFO] [stdout] | [INFO] [stdout] 243 | ((theta as f32 + 1.0) / 2.0) * PI / 2.0 [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `theta` [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: redundant closure [INFO] [stdout] --> src/api.rs:280:26 [INFO] [stdout] | [INFO] [stdout] 280 | .map(|t| FrameTime(t)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the tuple struct itself: `FrameTime` [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: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:277:27 [INFO] [stdout] | [INFO] [stdout] 277 | let arg = args [INFO] [stdout] | ___________________________^ [INFO] [stdout] 278 | | .get(0) [INFO] [stdout] | |___________________________^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:287:27 [INFO] [stdout] | [INFO] [stdout] 287 | let arg = args [INFO] [stdout] | ___________________________^ [INFO] [stdout] 288 | | .get(0) [INFO] [stdout] | |___________________________^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:300:27 [INFO] [stdout] | [INFO] [stdout] 300 | let arg = args.get(0).and_then(|s| u8::from_str(s).ok()).ok_or( [INFO] [stdout] | ^^^^^^^^^^^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:313:27 [INFO] [stdout] | [INFO] [stdout] 313 | let arg = args [INFO] [stdout] | ___________________________^ [INFO] [stdout] 314 | | .get(0) [INFO] [stdout] | |___________________________^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `as_ref` does nothing [INFO] [stdout] --> src/api.rs:315:41 [INFO] [stdout] | [INFO] [stdout] 315 | .and_then(|s| match s.as_ref() { [INFO] [stdout] | ^^^^^^^^^^ help: try: `s` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stdout] = note: `#[warn(clippy::useless_asref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:328:27 [INFO] [stdout] | [INFO] [stdout] 328 | let arg = args [INFO] [stdout] | ___________________________^ [INFO] [stdout] 329 | | .get(0) [INFO] [stdout] | |___________________________^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this call to `as_ref` does nothing [INFO] [stdout] --> src/api.rs:330:41 [INFO] [stdout] | [INFO] [stdout] 330 | .and_then(|s| match s.as_ref() { [INFO] [stdout] | ^^^^^^^^^^ help: try: `s` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `args.get(0)` [INFO] [stdout] --> src/api.rs:344:27 [INFO] [stdout] | [INFO] [stdout] 344 | let arg = args.get(0).and_then(|s| u8::from_str(s).ok()).ok_or( [INFO] [stdout] | ^^^^^^^^^^^ help: try: `args.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/api.rs:407:9 [INFO] [stdout] | [INFO] [stdout] 407 | !(self.a || self.b || self.c || self.c) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [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] help: try [INFO] [stdout] | [INFO] [stdout] 407 - !(self.a || self.b || self.c || self.c) [INFO] [stdout] 407 + !(self.a || self.b || self.c) [INFO] [stdout] | [INFO] [stdout] 407 - !(self.a || self.b || self.c || self.c) [INFO] [stdout] 407 + !self.a && !self.b && !self.c [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/api.rs:407:10 [INFO] [stdout] | [INFO] [stdout] 407 | !(self.a || self.b || self.c || self.c) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 407 - !(self.a || self.b || self.c || self.c) [INFO] [stdout] 407 + !!(!self.a && !self.b && !self.c) [INFO] [stdout] | [INFO] [stdout] 407 - !(self.a || self.b || self.c || self.c) [INFO] [stdout] 407 + !self.a || self.b || self.c [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/config.rs:37:25 [INFO] [stdout] | [INFO] [stdout] 37 | &File::open(&file.path()).unwrap(), [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `file.path()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Config` [INFO] [stdout] --> src/config.rs:82:5 [INFO] [stdout] | [INFO] [stdout] 82 | / pub fn new() -> Config { [INFO] [stdout] 83 | | Config { [INFO] [stdout] 84 | | midi_mappings: vec![], [INFO] [stdout] 85 | | } [INFO] [stdout] 86 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 81 + impl Default for Config { [INFO] [stdout] 82 + fn default() -> Self { [INFO] [stdout] 83 + Self::new() [INFO] [stdout] 84 + } [INFO] [stdout] 85 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/config.rs:165:17 [INFO] [stdout] | [INFO] [stdout] 165 | Err(io::Error::new( [INFO] [stdout] | _________________^ [INFO] [stdout] 166 | | io::ErrorKind::Other, [INFO] [stdout] 167 | | format!("Failed to parse midi mappings from {}", name), [INFO] [stdout] 168 | | )) [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 165 ~ Err(io::Error::other( [INFO] [stdout] 166 ~ format!("Failed to parse midi mappings from {}", name), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/config.rs:183:28 [INFO] [stdout] | [INFO] [stdout] 183 | if c >= 1 && c <= 16 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: use: `(1..=16).contains(&c)` [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: you should consider adding a `Default` implementation for `LogMessage` [INFO] [stdout] --> src/gui_channel.rs:83:5 [INFO] [stdout] | [INFO] [stdout] 83 | / pub fn new() -> Self { [INFO] [stdout] 84 | | LogMessage { [INFO] [stdout] 85 | | buffer: ArrayVec::new(), [INFO] [stdout] 86 | | len: 0, [INFO] [stdout] ... | [INFO] [stdout] 89 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 82 + impl Default for LogMessage { [INFO] [stdout] 83 + fn default() -> Self { [INFO] [stdout] 84 + Self::new() [INFO] [stdout] 85 + } [INFO] [stdout] 86 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded unit return type [INFO] [stdout] --> src/gui_channel.rs:167:52 [INFO] [stdout] | [INFO] [stdout] 167 | pub fn send_log(&mut self, message: LogMessage) -> () { [INFO] [stdout] | ^^^^^^ help: remove the `-> ()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> src/music.rs:85:40 [INFO] [stdout] | [INFO] [stdout] 85 | next_beat_time.0 <= time + frames as i64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `frames` [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: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> src/music.rs:88:20 [INFO] [stdout] | [INFO] [stdout] 88 | time + frames as i64, [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `frames` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/music.rs:243:11 [INFO] [stdout] | [INFO] [stdout] 243 | ((theta as f32 + 1.0) / 2.0) * PI / 2.0 [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `theta` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.10s [INFO] running `Command { std: "docker" "inspect" "d75de0d51c812b7e9164431bc9aff08e2d1c58d6cdcb4dc1d689a66d8cd9c32f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "d75de0d51c812b7e9164431bc9aff08e2d1c58d6cdcb4dc1d689a66d8cd9c32f", kill_on_drop: false }` [INFO] [stdout] d75de0d51c812b7e9164431bc9aff08e2d1c58d6cdcb4dc1d689a66d8cd9c32f