[INFO] cloning repository https://github.com/jacobmutton/lily [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/jacobmutton/lily" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjacobmutton%2Flily", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjacobmutton%2Flily'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] d6eb1c7ec5b69cb04d0b40dd5a972066191a038f [INFO] linting jacobmutton/lily against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjacobmutton%2Flily" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/jacobmutton/lily [INFO] finished tweaking git repo https://github.com/jacobmutton/lily [INFO] tweaked toml for git repo https://github.com/jacobmutton/lily written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/jacobmutton/lily 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/jacobmutton/lily 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] Downloading crates ... [INFO] [stderr] Downloaded symphonia-codec-alac v0.5.4 [INFO] [stderr] Downloaded symphonia-format-mkv v0.5.4 [INFO] [stderr] Downloaded tauri-winrt-notification v0.2.1 [INFO] [stderr] Downloaded instability v0.3.7 [INFO] [stderr] Downloaded windows-core v0.56.0 [INFO] [stderr] Downloaded mac-notification-sys v0.6.2 [INFO] [stderr] Downloaded windows-interface v0.56.0 [INFO] [stderr] Downloaded notify-rust v4.11.5 [INFO] [stderr] Downloaded symphonia-format-ogg v0.5.4 [INFO] [stderr] Downloaded windows-implement v0.56.0 [INFO] [stderr] Downloaded symphonia-format-caf v0.5.4 [INFO] [stderr] Downloaded libpulse-binding v2.28.2 [INFO] [stderr] Downloaded windows v0.56.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] 0f49e262987ad8a92e7a09b79f009d4fb2889ebb26aa120c4cefa45976133e4d [INFO] running `Command { std: "docker" "start" "-a" "0f49e262987ad8a92e7a09b79f009d4fb2889ebb26aa120c4cefa45976133e4d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "0f49e262987ad8a92e7a09b79f009d4fb2889ebb26aa120c4cefa45976133e4d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0f49e262987ad8a92e7a09b79f009d4fb2889ebb26aa120c4cefa45976133e4d", kill_on_drop: false }` [INFO] [stdout] 0f49e262987ad8a92e7a09b79f009d4fb2889ebb26aa120c4cefa45976133e4d [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] c952f9eb4817cb62264f12dd38af3798fa580606152da5ce5b2dba11a2167fa7 [INFO] running `Command { std: "docker" "start" "-a" "c952f9eb4817cb62264f12dd38af3798fa580606152da5ce5b2dba11a2167fa7", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.93 [INFO] [stderr] Compiling unicode-ident v1.0.16 [INFO] [stderr] Checking log v0.4.25 [INFO] [stderr] Compiling libc v0.2.169 [INFO] [stderr] Checking bytemuck v1.21.0 [INFO] [stderr] Compiling winnow v0.7.4 [INFO] [stderr] Compiling indexmap v2.7.1 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Checking tracing-core v0.1.33 [INFO] [stderr] Compiling rustversion v1.0.20 [INFO] [stderr] Checking event-listener-strategy v0.5.3 [INFO] [stderr] Compiling anyhow v1.0.97 [INFO] [stderr] Checking smallvec v1.14.0 [INFO] [stderr] Checking hashbrown v0.15.2 [INFO] [stderr] Checking miniz_oxide v0.8.5 [INFO] [stderr] Compiling zerocopy v0.8.24 [INFO] [stderr] Checking aligned-vec v0.5.0 [INFO] [stderr] Checking symphonia-core v0.5.4 [INFO] [stderr] Checking async-lock v3.4.0 [INFO] [stderr] Checking async-channel v2.3.1 [INFO] [stderr] Compiling getrandom v0.3.2 [INFO] [stderr] Compiling signal-hook v0.3.17 [INFO] [stderr] Compiling endi v1.1.0 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Checking nom v7.1.3 [INFO] [stderr] Compiling rav1e v0.7.1 [INFO] [stderr] Checking quote v1.0.38 [INFO] [stderr] Checking v_frame v0.3.8 [INFO] [stderr] Checking num-rational v0.4.2 [INFO] [stderr] Checking rayon v1.10.0 [INFO] [stderr] Checking syn v2.0.98 [INFO] [stderr] Compiling libpulse-sys v1.21.0 [INFO] [stderr] Checking anstyle-parse v0.2.6 [INFO] [stderr] Checking flate2 v1.1.0 [INFO] [stderr] Checking blocking v1.6.1 [INFO] [stderr] Checking bitstream-io v2.6.0 [INFO] [stderr] Checking imgref v1.11.0 [INFO] [stderr] Checking colorchoice v1.0.3 [INFO] [stderr] Compiling noop_proc_macro v0.3.0 [INFO] [stderr] Checking new_debug_unreachable v1.0.6 [INFO] [stderr] Compiling simd_helpers v0.1.0 [INFO] [stderr] Checking weezl v0.1.8 [INFO] [stderr] Checking quick-error v2.0.1 [INFO] [stderr] Checking anstyle-query v1.1.2 [INFO] [stderr] Checking anstyle v1.0.10 [INFO] [stderr] Checking loop9 v0.1.5 [INFO] [stderr] Checking async-fs v2.1.2 [INFO] [stderr] Checking castaway v0.2.3 [INFO] [stderr] Checking async-broadcast v0.7.2 [INFO] [stderr] Checking zune-inflate v0.2.54 [INFO] [stderr] Checking itertools v0.13.0 [INFO] [stderr] Checking symphonia-metadata v0.5.4 [INFO] [stderr] Checking anstream v0.6.18 [INFO] [stderr] Checking half v2.5.0 [INFO] [stderr] Checking avif-serialize v0.8.3 [INFO] [stderr] Checking ordered-stream v0.2.0 [INFO] [stderr] Checking clap_lex v0.7.4 [INFO] [stderr] Checking symphonia-utils-xiph v0.5.4 [INFO] [stderr] Checking rgb v0.8.50 [INFO] [stderr] Checking lebe v0.5.2 [INFO] [stderr] Checking bit_field v0.10.2 [INFO] [stderr] Compiling indoc v2.0.6 [INFO] [stderr] Checking extended v0.1.0 [INFO] [stderr] Checking signal-hook-registry v1.4.2 [INFO] [stderr] Checking parking_lot_core v0.9.10 [INFO] [stderr] Checking mio v1.0.3 [INFO] [stderr] Checking nix v0.29.0 [INFO] [stderr] Checking av1-grain v0.2.3 [INFO] [stderr] Checking parking_lot v0.12.3 [INFO] [stderr] Checking rand_core v0.9.3 [INFO] [stderr] Checking xdg-home v1.3.0 [INFO] [stderr] Checking zune-core v0.4.12 [INFO] [stderr] Checking symphonia-format-riff v0.5.4 [INFO] [stderr] Checking exr v1.73.0 [INFO] [stderr] Checking clap_builder v4.5.29 [INFO] [stderr] Checking image-webp v0.2.1 [INFO] [stderr] Checking symphonia-bundle-flac v0.5.4 [INFO] [stderr] Checking signal-hook-mio v0.2.4 [INFO] [stderr] Checking symphonia-format-mkv v0.5.4 [INFO] [stderr] Checking symphonia-format-ogg v0.5.4 [INFO] [stderr] Checking zune-jpeg v0.4.14 [INFO] [stderr] Compiling toml_edit v0.22.24 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking symphonia-format-isomp4 v0.5.4 [INFO] [stderr] Checking symphonia-codec-vorbis v0.5.4 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Checking compact_str v0.8.1 [INFO] [stderr] Checking tiff v0.9.1 [INFO] [stderr] Checking gif v0.13.1 [INFO] [stderr] Checking symphonia-format-caf v0.5.4 [INFO] [stderr] Checking symphonia-bundle-mp3 v0.5.4 [INFO] [stderr] Checking symphonia-codec-pcm v0.5.4 [INFO] [stderr] Checking unicode-truncate v1.1.0 [INFO] [stderr] Checking symphonia-codec-adpcm v0.5.4 [INFO] [stderr] Checking symphonia-codec-alac v0.5.4 [INFO] [stderr] Checking symphonia-codec-aac v0.5.4 [INFO] [stderr] Checking png v0.17.16 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Checking maybe-rayon v0.1.1 [INFO] [stderr] Checking qoi v0.4.1 [INFO] [stderr] Checking iana-time-zone v0.1.62 [INFO] [stderr] Compiling num-derive v0.3.3 [INFO] [stderr] Checking rand v0.9.0 [INFO] [stderr] Checking rust-fuzzy-search v0.1.1 [INFO] [stderr] Checking chrono v0.4.40 [INFO] [stderr] Checking symphonia v0.5.4 [INFO] [stderr] Checking libpulse-binding v2.28.2 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Compiling darling_core v0.20.10 [INFO] [stderr] Compiling proc-macro-crate v3.3.0 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling enumflags2_derive v0.7.11 [INFO] [stderr] Compiling tracing-attributes v0.1.28 [INFO] [stderr] Compiling profiling-procmacros v1.0.16 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling num-derive v0.4.2 [INFO] [stderr] Compiling arg_enum_proc_macro v0.3.4 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Compiling async-trait v0.1.88 [INFO] [stderr] Compiling clap_derive v4.5.28 [INFO] [stderr] Checking profiling v1.0.16 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Checking polling v3.7.4 [INFO] [stderr] Compiling darling_macro v0.20.10 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Checking clap v4.5.29 [INFO] [stderr] Checking async-io v2.4.0 [INFO] [stderr] Compiling darling v0.20.10 [INFO] [stderr] Compiling instability v0.3.7 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Checking ratatui v0.29.0 [INFO] [stderr] Checking async-signal v0.2.10 [INFO] [stderr] Checking async-process v2.3.0 [INFO] [stderr] Checking enumflags2 v0.7.11 [INFO] [stderr] Checking zvariant_utils v3.2.0 [INFO] [stderr] Checking serde_spanned v0.6.8 [INFO] [stderr] Checking toml_datetime v0.6.8 [INFO] [stderr] Checking toml v0.8.20 [INFO] [stderr] Checking ravif v0.11.11 [INFO] [stderr] Compiling zvariant_derive v5.4.0 [INFO] [stderr] Checking image v0.25.6 [INFO] [stderr] Compiling zvariant v5.4.0 [INFO] [stderr] Checking zbus_names v4.2.0 [INFO] [stderr] Compiling zbus_macros v5.5.0 [INFO] [stderr] Checking zbus v5.5.0 [INFO] [stderr] Checking notify-rust v4.11.5 [INFO] [stderr] Checking lily v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: use of deprecated method `ratatui::Frame::<'_>::size`: use .area() as it's the more correct name [INFO] [stdout] --> src/app.rs:135:35 [INFO] [stdout] | [INFO] [stdout] 135 | let width = frame.size().width; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `ratatui::Frame::<'_>::size`: use .area() as it's the more correct name [INFO] [stdout] --> src/app.rs:135:35 [INFO] [stdout] | [INFO] [stdout] 135 | let width = frame.size().width; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this let-binding has unit value [INFO] [stdout] --> src/simple.rs:105:9 [INFO] [stdout] | [INFO] [stdout] 105 | let _ = context.disconnect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stdout] = note: `#[warn(clippy::let_unit_value)]` on by default [INFO] [stdout] help: omit the `let` binding [INFO] [stdout] | [INFO] [stdout] 105 - let _ = context.disconnect(); [INFO] [stdout] 105 + context.disconnect(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/simple.rs:192:29 [INFO] [stdout] | [INFO] [stdout] 192 | ... return; [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] 191 - ); [INFO] [stdout] 192 - return; [INFO] [stdout] 191 + ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> src/playback.rs:32:1 [INFO] [stdout] | [INFO] [stdout] 32 | / pub enum Event { [INFO] [stdout] 33 | | Input(crossterm::event::KeyEvent), [INFO] [stdout] 34 | | SetMusicState(MusicState), [INFO] [stdout] | | ------------------------- the second-largest variant contains at least 16 bytes [INFO] [stdout] 35 | | SetMusicMetadata(MusicMetadata) [INFO] [stdout] | | ------------------------------- the largest variant contains at least 296 bytes [INFO] [stdout] 36 | | } [INFO] [stdout] | |_^ the entire enum is at least 296 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 35 - SetMusicMetadata(MusicMetadata) [INFO] [stdout] 35 + SetMusicMetadata(Box) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/playback.rs:58:27 [INFO] [stdout] | [INFO] [stdout] 58 | if queue_empty && !next_song.is_some() && !auto_playback { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `next_song.is_none()` [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: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:49:12 [INFO] [stdout] | [INFO] [stdout] 49 | while !app_state.try_read().map_or(false, |s| s.exit) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 49 - while !app_state.try_read().map_or(false, |s| s.exit) { [INFO] [stdout] 49 + while !app_state.try_read().is_ok_and(|s| s.exit) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:56:29 [INFO] [stdout] | [INFO] [stdout] 56 | let auto_playback = app_state.try_read().map_or(false, |s| s.auto_playback); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 56 - let auto_playback = app_state.try_read().map_or(false, |s| s.auto_playback); [INFO] [stdout] 56 + let auto_playback = app_state.try_read().is_ok_and(|s| s.auto_playback); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this let-binding has unit value [INFO] [stdout] --> src/playback.rs:83:13 [INFO] [stdout] | [INFO] [stdout] 83 | let _ = load_image(&mut next_song); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stdout] help: omit the `let` binding [INFO] [stdout] | [INFO] [stdout] 83 - let _ = load_image(&mut next_song); [INFO] [stdout] 83 + load_image(&mut next_song); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:87:23 [INFO] [stdout] | [INFO] [stdout] 87 | let looping = app_state.try_read().map_or(false, |s| s.looping); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 87 - let looping = app_state.try_read().map_or(false, |s| s.looping); [INFO] [stdout] 87 + let looping = app_state.try_read().is_ok_and(|s| s.looping); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/playback.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 227 | return; [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] 226 - } [INFO] [stdout] 227 - return; [INFO] [stdout] 226 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 157 | if app_state.try_read().map_or(false, |s| s.skip_song) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 157 - if app_state.try_read().map_or(false, |s| s.skip_song) { [INFO] [stdout] 157 + if app_state.try_read().is_ok_and(|s| s.skip_song) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:164:12 [INFO] [stdout] | [INFO] [stdout] 164 | if app_state.try_read().map_or(false, |s| s.paused) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 164 - if app_state.try_read().map_or(false, |s| s.paused) { [INFO] [stdout] 164 + if app_state.try_read().is_ok_and(|s| s.paused) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/playback.rs:243:35 [INFO] [stdout] | [INFO] [stdout] 243 | let src = std::fs::File::open(&path).expect("Failed to open file"); [INFO] [stdout] | ^^^^^ help: change this to: `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: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/playback.rs:282:5 [INFO] [stdout] | [INFO] [stdout] 282 | metadata.path = song.path.to_path_buf(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `metadata::metadata::MusicMetadata { path: song.path.to_path_buf(), ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/playback.rs:281:5 [INFO] [stdout] | [INFO] [stdout] 281 | let mut metadata = MusicMetadata::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/playback.rs:294:28 [INFO] [stdout] | [INFO] [stdout] 294 | if let Err(_) = std::fs::write("notification-image", &visual.data) { [INFO] [stdout] | -------^^^^^^----------------------------------------------------- help: try: `if std::fs::write("notification-image", &visual.data).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/playback.rs:315:5 [INFO] [stdout] | [INFO] [stdout] 315 | metadata.path = path.to_path_buf(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `metadata::metadata::MusicMetadata { path: path.to_path_buf(), ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/playback.rs:314:5 [INFO] [stdout] | [INFO] [stdout] 314 | let mut metadata = MusicMetadata::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/playback.rs:310:35 [INFO] [stdout] | [INFO] [stdout] 310 | let src = std::fs::File::open(&path).expect("Failed to open file"); [INFO] [stdout] | ^^^^^ help: change this to: `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] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/playback.rs:336:13 [INFO] [stdout] | [INFO] [stdout] 336 | / match tag.std_key { [INFO] [stdout] 337 | | Some(ref std_key) => { [INFO] [stdout] 338 | | match std_key { [INFO] [stdout] 339 | | symphonia::core::meta::StandardTagKey::Genre => { [INFO] [stdout] ... | [INFO] [stdout] 366 | | None => {} // Handle cases where std_key is None [INFO] [stdout] 367 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 336 ~ if let Some(ref std_key) = tag.std_key { [INFO] [stdout] 337 + match std_key { [INFO] [stdout] 338 + symphonia::core::meta::StandardTagKey::Genre => { [INFO] [stdout] 339 + metadata.genre = Some(tag.value.to_string()); [INFO] [stdout] 340 + }, [INFO] [stdout] 341 + symphonia::core::meta::StandardTagKey::TrackTitle => { [INFO] [stdout] 342 + metadata.track_title = Some(tag.value.to_string()); [INFO] [stdout] 343 + } [INFO] [stdout] 344 + symphonia::core::meta::StandardTagKey::Artist => { [INFO] [stdout] 345 + metadata.artist = Some(tag.value.to_string()); [INFO] [stdout] 346 + } [INFO] [stdout] 347 + symphonia::core::meta::StandardTagKey::TrackNumber => { [INFO] [stdout] 348 + metadata.track_number = Some(tag.value.to_string()); [INFO] [stdout] 349 + } [INFO] [stdout] 350 + symphonia::core::meta::StandardTagKey::Album => { [INFO] [stdout] 351 + metadata.album = Some(tag.value.to_string()); [INFO] [stdout] 352 + } [INFO] [stdout] 353 + symphonia::core::meta::StandardTagKey::DiscNumber => { [INFO] [stdout] 354 + metadata.disc_number = Some(tag.value.to_string()); [INFO] [stdout] 355 + } [INFO] [stdout] 356 + symphonia::core::meta::StandardTagKey::Date => { [INFO] [stdout] 357 + metadata.date = Some(tag.value.to_string()); [INFO] [stdout] 358 + } [INFO] [stdout] 359 + symphonia::core::meta::StandardTagKey::Lyrics => { [INFO] [stdout] 360 + metadata.lyrics = Some(tag.value.to_string()); [INFO] [stdout] 361 + } [INFO] [stdout] 362 + _ => {} // Handle other tags if necessary [INFO] [stdout] 363 + } [INFO] [stdout] 364 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/app.rs:86:14 [INFO] [stdout] | [INFO] [stdout] 86 | .expect(format!("There was an error reading your src directory: {}", self.config.application.src_dir).as_str()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|_| panic!("There was an error reading your src directory: {}", self.config.application.src_dir))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] = note: `#[warn(clippy::expect_fun_call)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/app.rs:85:47 [INFO] [stdout] | [INFO] [stdout] 85 | let raw_file_list = std::fs::read_dir(format!("{}", self.config.application.src_dir)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `self.config.application.src_dir.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: module has the same name as its containing module [INFO] [stdout] --> src/config.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub mod config { [INFO] [stdout] 2 | | use serde::Deserialize; [INFO] [stdout] 3 | | use std::collections::HashMap; [INFO] [stdout] 4 | | use std::fs::File; [INFO] [stdout] ... | [INFO] [stdout] 39 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/config.rs:29:89 [INFO] [stdout] | [INFO] [stdout] 29 | ...play())).expect(format!("Expecting config.toml in root. Looking: {}/config.toml", current_dir.display()).as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|_| panic!("Expecting config.toml in root. Looking: {}/config.toml", current_dir.display()))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/actions.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub mod actions { [INFO] [stdout] 2 | | use std::{cmp, sync::{Arc, RwLock}}; [INFO] [stdout] 3 | | [INFO] [stdout] 4 | | use crossterm::event::{KeyCode, KeyEvent}; [INFO] [stdout] ... | [INFO] [stdout] 314 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be replaced by its body itself [INFO] [stdout] --> src/actions.rs:45:38 [INFO] [stdout] | [INFO] [stdout] 45 | InputMode::Splash => match key_event.code { [INFO] [stdout] | ______________________________________^ [INFO] [stdout] 46 | | _ => state.input_mode = InputMode::Normal [INFO] [stdout] 47 | | }, [INFO] [stdout] | |_________________^ help: consider using the match body instead: `state.input_mode = InputMode::Normal` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/actions.rs:101:51 [INFO] [stdout] | [INFO] [stdout] 101 | format!("<{}-{}>", key_event.modifiers.to_string(), key_event.code.to_string()) [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/actions.rs:101:79 [INFO] [stdout] | [INFO] [stdout] 101 | format!("<{}-{}>", key_event.modifiers.to_string(), key_event.code.to_string()) [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/actions.rs:112:17 [INFO] [stdout] | [INFO] [stdout] 112 | let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] | _________________^ [INFO] [stdout] 113 | | s.paused = state.paused; [INFO] [stdout] 114 | | s.paused [INFO] [stdout] 115 | | }); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 112 - let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] 112 + let _ = app_state.try_write().is_ok_and(|mut s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/actions.rs:121:17 [INFO] [stdout] | [INFO] [stdout] 121 | let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] | _________________^ [INFO] [stdout] 122 | | s.auto_playback = state.auto_playback; [INFO] [stdout] 123 | | s.auto_playback [INFO] [stdout] 124 | | }); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 121 - let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] 121 + let _ = app_state.try_write().is_ok_and(|mut s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/actions.rs:148:17 [INFO] [stdout] | [INFO] [stdout] 148 | let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] | _________________^ [INFO] [stdout] 149 | | s.muted = state.muted; [INFO] [stdout] 150 | | s.muted [INFO] [stdout] 151 | | }); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 148 - let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] 148 + let _ = app_state.try_write().is_ok_and(|mut s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/actions.rs:157:17 [INFO] [stdout] | [INFO] [stdout] 157 | let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] | _________________^ [INFO] [stdout] 158 | | s.looping = state.looping; [INFO] [stdout] 159 | | s.looping [INFO] [stdout] 160 | | }); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 157 - let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] 157 + let _ = app_state.try_write().is_ok_and(|mut s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/actions.rs:307:16 [INFO] [stdout] | [INFO] [stdout] 307 | if state.input != "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!state.input.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/metadata.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub mod metadata { [INFO] [stdout] 2 | | use std::path::PathBuf; [INFO] [stdout] 3 | | [INFO] [stdout] 4 | | use image::DynamicImage; [INFO] [stdout] ... | [INFO] [stdout] 52 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/ui.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub mod ui { [INFO] [stdout] 2 | | use std::sync::{Arc, RwLock}; [INFO] [stdout] 3 | | [INFO] [stdout] 4 | | use ratatui::{buffer::Buffer, layout::{Constraint, Direction, Layout, Position, Rect}, style::{Color, Style, Stylize}, text::... [INFO] [stdout] ... | [INFO] [stdout] 370 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods called `as_*` usually take `self` by reference or `self` by mutable reference [INFO] [stdout] --> src/ui.rs:45:25 [INFO] [stdout] | [INFO] [stdout] 45 | const fn as_str(self) -> &'static str { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/ui.rs:208:38 [INFO] [stdout] | [INFO] [stdout] 208 | Span::styled(format!("{}", title), Style::default().fg(primary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `title.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:209:38 [INFO] [stdout] | [INFO] [stdout] 209 | Span::styled(format!("{}", author), Style::default().fg(secondary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `author.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:210:38 [INFO] [stdout] | [INFO] [stdout] 210 | Span::styled(format!("{}", album), Style::default().fg(secondary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `album.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:211:38 [INFO] [stdout] | [INFO] [stdout] 211 | Span::styled(format!("{}", genre), Style::default().fg(secondary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `genre.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:212:38 [INFO] [stdout] | [INFO] [stdout] 212 | Span::styled(format!("{}", duration), Style::default().fg(secondary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `duration.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:265:58 [INFO] [stdout] | [INFO] [stdout] 265 | ... Span::styled(format!("{}", title), Style::default().fg(Color::White)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `title.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:266:58 [INFO] [stdout] | [INFO] [stdout] 266 | ... Span::styled(format!("{}", author), Style::default().fg(Color::Indexed(244))), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `author.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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:60:13 [INFO] [stdout] | [INFO] [stdout] 60 | / match crossterm::event::read().unwrap() { [INFO] [stdout] 61 | | crossterm::event::Event::Key(key_event) => tx_to_input_events.send(playback::Event::Input(key_event)).expect("THER... [INFO] [stdout] 62 | | _ => {} [INFO] [stdout] 63 | | } [INFO] [stdout] | |_____________^ help: try: `if let crossterm::event::Event::Key(key_event) = crossterm::event::read().unwrap() { tx_to_input_events.send(playback::Event::Input(key_event)).expect("THERE WAS A PROBLEM SENDING SOMETHING") }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this let-binding has unit value [INFO] [stdout] --> src/simple.rs:105:9 [INFO] [stdout] | [INFO] [stdout] 105 | let _ = context.disconnect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stdout] = note: `#[warn(clippy::let_unit_value)]` on by default [INFO] [stdout] help: omit the `let` binding [INFO] [stdout] | [INFO] [stdout] 105 - let _ = context.disconnect(); [INFO] [stdout] 105 + context.disconnect(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/simple.rs:192:29 [INFO] [stdout] | [INFO] [stdout] 192 | ... return; [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] 191 - ); [INFO] [stdout] 192 - return; [INFO] [stdout] 191 + ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> src/playback.rs:32:1 [INFO] [stdout] | [INFO] [stdout] 32 | / pub enum Event { [INFO] [stdout] 33 | | Input(crossterm::event::KeyEvent), [INFO] [stdout] 34 | | SetMusicState(MusicState), [INFO] [stdout] | | ------------------------- the second-largest variant contains at least 16 bytes [INFO] [stdout] 35 | | SetMusicMetadata(MusicMetadata) [INFO] [stdout] | | ------------------------------- the largest variant contains at least 296 bytes [INFO] [stdout] 36 | | } [INFO] [stdout] | |_^ the entire enum is at least 296 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 35 - SetMusicMetadata(MusicMetadata) [INFO] [stdout] 35 + SetMusicMetadata(Box) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/playback.rs:58:27 [INFO] [stdout] | [INFO] [stdout] 58 | if queue_empty && !next_song.is_some() && !auto_playback { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `next_song.is_none()` [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: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:49:12 [INFO] [stdout] | [INFO] [stdout] 49 | while !app_state.try_read().map_or(false, |s| s.exit) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 49 - while !app_state.try_read().map_or(false, |s| s.exit) { [INFO] [stdout] 49 + while !app_state.try_read().is_ok_and(|s| s.exit) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:56:29 [INFO] [stdout] | [INFO] [stdout] 56 | let auto_playback = app_state.try_read().map_or(false, |s| s.auto_playback); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 56 - let auto_playback = app_state.try_read().map_or(false, |s| s.auto_playback); [INFO] [stdout] 56 + let auto_playback = app_state.try_read().is_ok_and(|s| s.auto_playback); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this let-binding has unit value [INFO] [stdout] --> src/playback.rs:83:13 [INFO] [stdout] | [INFO] [stdout] 83 | let _ = load_image(&mut next_song); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stdout] help: omit the `let` binding [INFO] [stdout] | [INFO] [stdout] 83 - let _ = load_image(&mut next_song); [INFO] [stdout] 83 + load_image(&mut next_song); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:87:23 [INFO] [stdout] | [INFO] [stdout] 87 | let looping = app_state.try_read().map_or(false, |s| s.looping); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 87 - let looping = app_state.try_read().map_or(false, |s| s.looping); [INFO] [stdout] 87 + let looping = app_state.try_read().is_ok_and(|s| s.looping); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/playback.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 227 | return; [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] 226 - } [INFO] [stdout] 227 - return; [INFO] [stdout] 226 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 157 | if app_state.try_read().map_or(false, |s| s.skip_song) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 157 - if app_state.try_read().map_or(false, |s| s.skip_song) { [INFO] [stdout] 157 + if app_state.try_read().is_ok_and(|s| s.skip_song) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/playback.rs:164:12 [INFO] [stdout] | [INFO] [stdout] 164 | if app_state.try_read().map_or(false, |s| s.paused) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 164 - if app_state.try_read().map_or(false, |s| s.paused) { [INFO] [stdout] 164 + if app_state.try_read().is_ok_and(|s| s.paused) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/playback.rs:243:35 [INFO] [stdout] | [INFO] [stdout] 243 | let src = std::fs::File::open(&path).expect("Failed to open file"); [INFO] [stdout] | ^^^^^ help: change this to: `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: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/playback.rs:282:5 [INFO] [stdout] | [INFO] [stdout] 282 | metadata.path = song.path.to_path_buf(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `metadata::metadata::MusicMetadata { path: song.path.to_path_buf(), ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/playback.rs:281:5 [INFO] [stdout] | [INFO] [stdout] 281 | let mut metadata = MusicMetadata::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/playback.rs:294:28 [INFO] [stdout] | [INFO] [stdout] 294 | if let Err(_) = std::fs::write("notification-image", &visual.data) { [INFO] [stdout] | -------^^^^^^----------------------------------------------------- help: try: `if std::fs::write("notification-image", &visual.data).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/playback.rs:315:5 [INFO] [stdout] | [INFO] [stdout] 315 | metadata.path = path.to_path_buf(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `metadata::metadata::MusicMetadata { path: path.to_path_buf(), ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/playback.rs:314:5 [INFO] [stdout] | [INFO] [stdout] 314 | let mut metadata = MusicMetadata::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/playback.rs:310:35 [INFO] [stdout] | [INFO] [stdout] 310 | let src = std::fs::File::open(&path).expect("Failed to open file"); [INFO] [stdout] | ^^^^^ help: change this to: `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] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/playback.rs:336:13 [INFO] [stdout] | [INFO] [stdout] 336 | / match tag.std_key { [INFO] [stdout] 337 | | Some(ref std_key) => { [INFO] [stdout] 338 | | match std_key { [INFO] [stdout] 339 | | symphonia::core::meta::StandardTagKey::Genre => { [INFO] [stdout] ... | [INFO] [stdout] 366 | | None => {} // Handle cases where std_key is None [INFO] [stdout] 367 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = note: you might want to preserve the comments from inside the `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 336 ~ if let Some(ref std_key) = tag.std_key { [INFO] [stdout] 337 + match std_key { [INFO] [stdout] 338 + symphonia::core::meta::StandardTagKey::Genre => { [INFO] [stdout] 339 + metadata.genre = Some(tag.value.to_string()); [INFO] [stdout] 340 + }, [INFO] [stdout] 341 + symphonia::core::meta::StandardTagKey::TrackTitle => { [INFO] [stdout] 342 + metadata.track_title = Some(tag.value.to_string()); [INFO] [stdout] 343 + } [INFO] [stdout] 344 + symphonia::core::meta::StandardTagKey::Artist => { [INFO] [stdout] 345 + metadata.artist = Some(tag.value.to_string()); [INFO] [stdout] 346 + } [INFO] [stdout] 347 + symphonia::core::meta::StandardTagKey::TrackNumber => { [INFO] [stdout] 348 + metadata.track_number = Some(tag.value.to_string()); [INFO] [stdout] 349 + } [INFO] [stdout] 350 + symphonia::core::meta::StandardTagKey::Album => { [INFO] [stdout] 351 + metadata.album = Some(tag.value.to_string()); [INFO] [stdout] 352 + } [INFO] [stdout] 353 + symphonia::core::meta::StandardTagKey::DiscNumber => { [INFO] [stdout] 354 + metadata.disc_number = Some(tag.value.to_string()); [INFO] [stdout] 355 + } [INFO] [stdout] 356 + symphonia::core::meta::StandardTagKey::Date => { [INFO] [stdout] 357 + metadata.date = Some(tag.value.to_string()); [INFO] [stdout] 358 + } [INFO] [stdout] 359 + symphonia::core::meta::StandardTagKey::Lyrics => { [INFO] [stdout] 360 + metadata.lyrics = Some(tag.value.to_string()); [INFO] [stdout] 361 + } [INFO] [stdout] 362 + _ => {} // Handle other tags if necessary [INFO] [stdout] 363 + } [INFO] [stdout] 364 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/app.rs:86:14 [INFO] [stdout] | [INFO] [stdout] 86 | .expect(format!("There was an error reading your src directory: {}", self.config.application.src_dir).as_str()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|_| panic!("There was an error reading your src directory: {}", self.config.application.src_dir))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] = note: `#[warn(clippy::expect_fun_call)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/app.rs:85:47 [INFO] [stdout] | [INFO] [stdout] 85 | let raw_file_list = std::fs::read_dir(format!("{}", self.config.application.src_dir)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `self.config.application.src_dir.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: module has the same name as its containing module [INFO] [stdout] --> src/config.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub mod config { [INFO] [stdout] 2 | | use serde::Deserialize; [INFO] [stdout] 3 | | use std::collections::HashMap; [INFO] [stdout] 4 | | use std::fs::File; [INFO] [stdout] ... | [INFO] [stdout] 39 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/config.rs:29:89 [INFO] [stdout] | [INFO] [stdout] 29 | ...play())).expect(format!("Expecting config.toml in root. Looking: {}/config.toml", current_dir.display()).as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|_| panic!("Expecting config.toml in root. Looking: {}/config.toml", current_dir.display()))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/actions.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub mod actions { [INFO] [stdout] 2 | | use std::{cmp, sync::{Arc, RwLock}}; [INFO] [stdout] 3 | | [INFO] [stdout] 4 | | use crossterm::event::{KeyCode, KeyEvent}; [INFO] [stdout] ... | [INFO] [stdout] 314 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be replaced by its body itself [INFO] [stdout] --> src/actions.rs:45:38 [INFO] [stdout] | [INFO] [stdout] 45 | InputMode::Splash => match key_event.code { [INFO] [stdout] | ______________________________________^ [INFO] [stdout] 46 | | _ => state.input_mode = InputMode::Normal [INFO] [stdout] 47 | | }, [INFO] [stdout] | |_________________^ help: consider using the match body instead: `state.input_mode = InputMode::Normal` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/actions.rs:101:51 [INFO] [stdout] | [INFO] [stdout] 101 | format!("<{}-{}>", key_event.modifiers.to_string(), key_event.code.to_string()) [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/actions.rs:101:79 [INFO] [stdout] | [INFO] [stdout] 101 | format!("<{}-{}>", key_event.modifiers.to_string(), key_event.code.to_string()) [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/actions.rs:112:17 [INFO] [stdout] | [INFO] [stdout] 112 | let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] | _________________^ [INFO] [stdout] 113 | | s.paused = state.paused; [INFO] [stdout] 114 | | s.paused [INFO] [stdout] 115 | | }); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 112 - let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] 112 + let _ = app_state.try_write().is_ok_and(|mut s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/actions.rs:121:17 [INFO] [stdout] | [INFO] [stdout] 121 | let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] | _________________^ [INFO] [stdout] 122 | | s.auto_playback = state.auto_playback; [INFO] [stdout] 123 | | s.auto_playback [INFO] [stdout] 124 | | }); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 121 - let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] 121 + let _ = app_state.try_write().is_ok_and(|mut s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/actions.rs:148:17 [INFO] [stdout] | [INFO] [stdout] 148 | let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] | _________________^ [INFO] [stdout] 149 | | s.muted = state.muted; [INFO] [stdout] 150 | | s.muted [INFO] [stdout] 151 | | }); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 148 - let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] 148 + let _ = app_state.try_write().is_ok_and(|mut s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> src/actions.rs:157:17 [INFO] [stdout] | [INFO] [stdout] 157 | let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] | _________________^ [INFO] [stdout] 158 | | s.looping = state.looping; [INFO] [stdout] 159 | | s.looping [INFO] [stdout] 160 | | }); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_ok_and` instead [INFO] [stdout] | [INFO] [stdout] 157 - let _ = app_state.try_write().map_or(false, |mut s| { [INFO] [stdout] 157 + let _ = app_state.try_write().is_ok_and(|mut s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/actions.rs:307:16 [INFO] [stdout] | [INFO] [stdout] 307 | if state.input != "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!state.input.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/metadata.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub mod metadata { [INFO] [stdout] 2 | | use std::path::PathBuf; [INFO] [stdout] 3 | | [INFO] [stdout] 4 | | use image::DynamicImage; [INFO] [stdout] ... | [INFO] [stdout] 52 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/ui.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | / pub mod ui { [INFO] [stdout] 2 | | use std::sync::{Arc, RwLock}; [INFO] [stdout] 3 | | [INFO] [stdout] 4 | | use ratatui::{buffer::Buffer, layout::{Constraint, Direction, Layout, Position, Rect}, style::{Color, Style, Stylize}, text::... [INFO] [stdout] ... | [INFO] [stdout] 370 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods called `as_*` usually take `self` by reference or `self` by mutable reference [INFO] [stdout] --> src/ui.rs:45:25 [INFO] [stdout] | [INFO] [stdout] 45 | const fn as_str(self) -> &'static str { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/ui.rs:208:38 [INFO] [stdout] | [INFO] [stdout] 208 | Span::styled(format!("{}", title), Style::default().fg(primary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `title.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:209:38 [INFO] [stdout] | [INFO] [stdout] 209 | Span::styled(format!("{}", author), Style::default().fg(secondary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `author.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:210:38 [INFO] [stdout] | [INFO] [stdout] 210 | Span::styled(format!("{}", album), Style::default().fg(secondary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `album.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:211:38 [INFO] [stdout] | [INFO] [stdout] 211 | Span::styled(format!("{}", genre), Style::default().fg(secondary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `genre.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:212:38 [INFO] [stdout] | [INFO] [stdout] 212 | Span::styled(format!("{}", duration), Style::default().fg(secondary)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `duration.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:265:58 [INFO] [stdout] | [INFO] [stdout] 265 | ... Span::styled(format!("{}", title), Style::default().fg(Color::White)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `title.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: useless use of `format!` [INFO] [stdout] --> src/ui.rs:266:58 [INFO] [stdout] | [INFO] [stdout] 266 | ... Span::styled(format!("{}", author), Style::default().fg(Color::Indexed(244))), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `author.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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:60:13 [INFO] [stdout] | [INFO] [stdout] 60 | / match crossterm::event::read().unwrap() { [INFO] [stdout] 61 | | crossterm::event::Event::Key(key_event) => tx_to_input_events.send(playback::Event::Input(key_event)).expect("THER... [INFO] [stdout] 62 | | _ => {} [INFO] [stdout] 63 | | } [INFO] [stdout] | |_____________^ help: try: `if let crossterm::event::Event::Key(key_event) = crossterm::event::read().unwrap() { tx_to_input_events.send(playback::Event::Input(key_event)).expect("THERE WAS A PROBLEM SENDING SOMETHING") }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 51.52s [INFO] running `Command { std: "docker" "inspect" "c952f9eb4817cb62264f12dd38af3798fa580606152da5ce5b2dba11a2167fa7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c952f9eb4817cb62264f12dd38af3798fa580606152da5ce5b2dba11a2167fa7", kill_on_drop: false }` [INFO] [stdout] c952f9eb4817cb62264f12dd38af3798fa580606152da5ce5b2dba11a2167fa7