[INFO] cloning repository https://github.com/Udayg1/mscply-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Udayg1/mscply-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FUdayg1%2Fmscply-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FUdayg1%2Fmscply-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 6ff103338bf00b87123131d17690b4e84feaa0db [INFO] linting Udayg1/mscply-rs against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FUdayg1%2Fmscply-rs" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Udayg1/mscply-rs [INFO] finished tweaking git repo https://github.com/Udayg1/mscply-rs [INFO] tweaked toml for git repo https://github.com/Udayg1/mscply-rs written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Udayg1/mscply-rs 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/Udayg1/mscply-rs already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded zmij v1.0.14 [INFO] [stderr] Downloaded pest_generator v2.8.5 [INFO] [stderr] Downloaded pest v2.8.5 [INFO] [stderr] Downloaded pest_meta v2.8.5 [INFO] [stderr] Downloaded pest_derive v2.8.5 [INFO] [stderr] Downloaded libmpv2-sys v4.0.1 [INFO] [stderr] Downloaded webpki-roots v1.0.2 [INFO] [stderr] Downloaded libmpv2 v5.0.3 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 37ff4d3ac0f7bb0e4928e5fe46c9675db532748fba4a05b5be75f342db43f8cd [INFO] running `Command { std: "docker" "start" "-a" "37ff4d3ac0f7bb0e4928e5fe46c9675db532748fba4a05b5be75f342db43f8cd", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "37ff4d3ac0f7bb0e4928e5fe46c9675db532748fba4a05b5be75f342db43f8cd", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "37ff4d3ac0f7bb0e4928e5fe46c9675db532748fba4a05b5be75f342db43f8cd", kill_on_drop: false }` [INFO] [stdout] 37ff4d3ac0f7bb0e4928e5fe46c9675db532748fba4a05b5be75f342db43f8cd [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 56c0d13137c55bcbee90bd62fea61e74c2d4e0ae654e1202350920290565889c [INFO] running `Command { std: "docker" "start" "-a" "56c0d13137c55bcbee90bd62fea61e74c2d4e0ae654e1202350920290565889c", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.105 [INFO] [stderr] Compiling quote v1.0.43 [INFO] [stderr] Compiling libc v0.2.180 [INFO] [stderr] Checking cfg-if v1.0.4 [INFO] [stderr] Checking itoa v1.0.17 [INFO] [stderr] Checking smallvec v1.15.1 [INFO] [stderr] Checking log v0.4.29 [INFO] [stderr] Checking stable_deref_trait v1.2.1 [INFO] [stderr] Checking bitflags v2.10.0 [INFO] [stderr] Checking pin-project-lite v0.2.16 [INFO] [stderr] Checking bytes v1.11.0 [INFO] [stderr] Checking futures-core v0.3.31 [INFO] [stderr] Compiling find-msvc-tools v0.1.8 [INFO] [stderr] Checking ryu v1.0.22 [INFO] [stderr] Checking serde_core v1.0.228 [INFO] [stderr] Checking writeable v0.6.2 [INFO] [stderr] Compiling zmij v1.0.14 [INFO] [stderr] Compiling cc v1.2.53 [INFO] [stderr] Checking litemap v0.8.1 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Checking pin-utils v0.1.0 [INFO] [stderr] Checking zeroize v1.8.2 [INFO] [stderr] Checking http v1.4.0 [INFO] [stderr] Checking once_cell v1.21.3 [INFO] [stderr] Checking foldhash v0.2.0 [INFO] [stderr] Checking rustls-pki-types v1.14.0 [INFO] [stderr] Checking untrusted v0.9.0 [INFO] [stderr] Checking futures-task v0.3.31 [INFO] [stderr] Checking allocator-api2 v0.2.21 [INFO] [stderr] Checking equivalent v1.0.2 [INFO] [stderr] Checking percent-encoding v2.3.2 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Checking memchr v2.7.6 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking hashbrown v0.16.1 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking icu_normalizer_data v2.1.1 [INFO] [stderr] Checking icu_properties_data v2.1.2 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Checking tower-service v0.3.3 [INFO] [stderr] Checking mio v1.1.1 [INFO] [stderr] Checking socket2 v0.6.1 [INFO] [stderr] Checking getrandom v0.2.17 [INFO] [stderr] Checking try-lock v0.2.5 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Checking want v0.3.1 [INFO] [stderr] Checking itertools v0.14.0 [INFO] [stderr] Checking errno v0.3.14 [INFO] [stderr] Checking castaway v0.2.4 [INFO] [stderr] Checking httparse v1.10.1 [INFO] [stderr] Checking tracing-core v0.1.36 [INFO] [stderr] Checking futures-channel v0.3.31 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Checking subtle v2.6.1 [INFO] [stderr] Checking unicode-segmentation v1.12.0 [INFO] [stderr] Checking static_assertions v1.1.0 [INFO] [stderr] Checking atomic-waker v1.1.2 [INFO] [stderr] Checking unicode-width v0.2.2 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking compact_str v0.9.0 [INFO] [stderr] Checking signal-hook-registry v1.4.8 [INFO] [stderr] Checking lru v0.16.3 [INFO] [stderr] Checking form_urlencoded v1.2.2 [INFO] [stderr] Checking sync_wrapper v1.0.2 [INFO] [stderr] Checking tower-layer v0.3.3 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Checking powerfmt v0.2.0 [INFO] [stderr] Checking base64 v0.22.1 [INFO] [stderr] Checking ipnet v2.11.0 [INFO] [stderr] Checking utf8_iter v1.0.4 [INFO] [stderr] Checking scopeguard v1.2.0 [INFO] [stderr] Checking lock_api v0.4.14 [INFO] [stderr] Checking deranged v0.5.5 [INFO] [stderr] Checking signal-hook v0.3.18 [INFO] [stderr] Checking parking_lot_core v0.9.12 [INFO] [stderr] Checking webpki-roots v1.0.2 [INFO] [stderr] Checking num-conv v0.1.0 [INFO] [stderr] Checking linux-raw-sys v0.11.0 [INFO] [stderr] Checking num_threads v0.1.7 [INFO] [stderr] Checking unicode-truncate v2.0.1 [INFO] [stderr] Checking time-core v0.1.7 [INFO] [stderr] Checking iri-string v0.7.10 [INFO] [stderr] Checking regex-syntax v0.8.8 [INFO] [stderr] Checking parking_lot v0.12.5 [INFO] [stderr] Checking macros v0.1.0 (/opt/rustwide/workdir/macros) [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> macros/src/lib.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 9 | output = output + i; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `output += i` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking signal-hook-mio v0.2.5 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking getrandom v0.3.4 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Checking line-clipping v0.3.5 [INFO] [stderr] Compiling libmpv2-sys v4.0.1 [INFO] [stderr] Checking uuid v1.19.0 [INFO] [stderr] Checking time v0.3.45 [INFO] [stderr] Compiling libmpv2 v5.0.3 [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> macros/src/lib.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 9 | output = output + i; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace it with: `output += i` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking regex-automata v0.4.13 [INFO] [stderr] Checking regex v1.12.2 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Checking rustls-webpki v0.103.9 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Checking tokio v1.49.0 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Checking thiserror v2.0.18 [INFO] [stderr] Checking kasuari v0.4.11 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking derive_more v2.1.1 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking crossterm v0.29.0 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Checking zerovec v0.11.5 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Checking strum v0.27.2 [INFO] [stderr] Checking ratatui-core v0.1.0 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking ratatui-widgets v0.3.0 [INFO] [stderr] Checking ratatui-crossterm v0.1.0 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Checking ratatui-macros v0.7.0 [INFO] [stderr] Checking ratatui v0.30.0 [INFO] [stderr] Checking ui v0.1.1 (/opt/rustwide/workdir/ui) [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> ui/src/lib.rs:196:28 [INFO] [stdout] | [INFO] [stdout] 196 | if !tags.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `tags.is_some()` [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: called `unwrap` on `tags` after checking its variant with `is_none` [INFO] [stdout] --> ui/src/lib.rs:197:35 [INFO] [stdout] | [INFO] [stdout] 196 | if !tags.is_none() { [INFO] [stdout] | -------------- the check is happening here [INFO] [stdout] 197 | tag = tags.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> ui/src/lib.rs:196:28 [INFO] [stdout] | [INFO] [stdout] 196 | if !tags.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `tags.is_some()` [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: called `unwrap` on `tags` after checking its variant with `is_none` [INFO] [stdout] --> ui/src/lib.rs:197:35 [INFO] [stdout] | [INFO] [stdout] 196 | if !tags.is_none() { [INFO] [stdout] | -------------- the check is happening here [INFO] [stdout] 197 | tag = tags.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking tower v0.5.3 [INFO] [stderr] Checking tokio-rustls v0.26.4 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking hyper-util v0.1.19 [INFO] [stderr] Checking hyper-rustls v0.27.7 [INFO] [stderr] Checking reqwest v0.12.28 [INFO] [stderr] Checking network v0.1.2 (/opt/rustwide/workdir/network) [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> network/src/lib.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | use uuid; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> network/src/lib.rs:107:13 [INFO] [stdout] | [INFO] [stdout] 107 | index: index, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> network/src/lib.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | use uuid; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> network/src/lib.rs:107:13 [INFO] [stdout] | [INFO] [stdout] 107 | index: index, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> network/src/lib.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | if !qual.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `qual.is_some()` [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: called `unwrap` on `qual` after checking its variant with `is_none` [INFO] [stdout] --> network/src/lib.rs:77:27 [INFO] [stdout] | [INFO] [stdout] 76 | if !qual.is_none() { [INFO] [stdout] | -------------- the check is happening here [INFO] [stdout] 77 | let mut quality = qual.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> network/src/lib.rs:153:13 [INFO] [stdout] | [INFO] [stdout] 153 | 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] 152 - sx.send(return_item).unwrap(); [INFO] [stdout] 153 - return; [INFO] [stdout] 152 + sx.send(return_item).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> network/src/lib.rs:159:13 [INFO] [stdout] | [INFO] [stdout] 159 | 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] 158 - sx.send(return_item).unwrap(); [INFO] [stdout] 159 - return; [INFO] [stdout] 158 + sx.send(return_item).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: file opened with `create`, but `truncate` behavior not defined [INFO] [stdout] --> network/src/lib.rs:147:18 [INFO] [stdout] | [INFO] [stdout] 147 | .create(true) [INFO] [stdout] | ^^^^^^^^^^^^- help: add: `.truncate(true)` [INFO] [stdout] | [INFO] [stdout] = help: if you intend to overwrite an existing file entirely, call `.truncate(true)` [INFO] [stdout] = help: if you instead know that you may want to keep some parts of the old file, call `.truncate(false)` [INFO] [stdout] = help: alternatively, use `.append(true)` to append to the file instead of overwriting it [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_open_options [INFO] [stdout] = note: `#[warn(clippy::suspicious_open_options)]` on by default [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] --> network/src/lib.rs:176:9 [INFO] [stdout] | [INFO] [stdout] 176 | / match text.find("/app.") { [INFO] [stdout] 177 | | Some(e) => {idx = e}, [INFO] [stdout] 178 | | _ => {} [INFO] [stdout] 179 | | } [INFO] [stdout] | |_________^ help: try: `if let Some(e) = text.find("/app.") {idx = e}` [INFO] [stdout] | [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] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> network/src/lib.rs:180:9 [INFO] [stdout] | [INFO] [stdout] 180 | / match text[idx..].find("\")"){ [INFO] [stdout] 181 | | Some(e) => {end = e+idx} [INFO] [stdout] 182 | | _ => {} [INFO] [stdout] 183 | | } [INFO] [stdout] | |_________^ help: try: `if let Some(e) = text[idx..].find("\")") {end = e+idx}` [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 boolean expression can be simplified [INFO] [stdout] --> network/src/lib.rs:366:8 [INFO] [stdout] | [INFO] [stdout] 366 | if !con.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `con.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> network/src/lib.rs:408:8 [INFO] [stdout] | [INFO] [stdout] 408 | if !first.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `first.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `con` after checking its variant with `is_none` [INFO] [stdout] --> network/src/lib.rs:367:17 [INFO] [stdout] | [INFO] [stdout] 366 | if !con.is_none() { [INFO] [stdout] | ------------- the check is happening here [INFO] [stdout] 367 | first = con [INFO] [stdout] | _________________^ [INFO] [stdout] 368 | | .unwrap() [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> network/src/lib.rs:350:5 [INFO] [stdout] | [INFO] [stdout] 350 | let first: Option; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `first` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 350 ~ [INFO] [stdout] 351 | let arr = resn [INFO] [stdout] ... [INFO] [stdout] 365 | let con = zero_index.get("musicShelfRenderer"); [INFO] [stdout] 366 ~ let first: Option = if !con.is_none() { [INFO] [stdout] 367 ~ con [INFO] [stdout] 368 | .unwrap() [INFO] [stdout] ... [INFO] [stdout] 384 | .and_then(Value::as_str) [INFO] [stdout] 385 ~ .map(|s| s.to_string()) [INFO] [stdout] 386 | } else { [INFO] [stdout] 387 ~ first_index [INFO] [stdout] 388 | .unwrap() [INFO] [stdout] ... [INFO] [stdout] 405 | .and_then(Value::as_str) [INFO] [stdout] 406 ~ .map(|s| s.to_string()) [INFO] [stdout] 407 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `tabs.get(0)` [INFO] [stdout] --> network/src/lib.rs:356:26 [INFO] [stdout] | [INFO] [stdout] 356 | .and_then(|tabs| tabs.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `tabs.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: accessing first element with `arr.get(0)` [INFO] [stdout] --> network/src/lib.rs:363:22 [INFO] [stdout] | [INFO] [stdout] 363 | let zero_index = arr.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^ help: try: `arr.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 `items.get(0)` [INFO] [stdout] --> network/src/lib.rs:371:31 [INFO] [stdout] | [INFO] [stdout] 371 | .and_then(|items| items.get(0)) [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `items.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 `cols.get(0)` [INFO] [stdout] --> network/src/lib.rs:375:30 [INFO] [stdout] | [INFO] [stdout] 375 | .and_then(|cols| cols.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cols.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 `runs.get(0)` [INFO] [stdout] --> network/src/lib.rs:380:30 [INFO] [stdout] | [INFO] [stdout] 380 | .and_then(|runs| runs.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `runs.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 `items.get(0)` [INFO] [stdout] --> network/src/lib.rs:392:31 [INFO] [stdout] | [INFO] [stdout] 392 | .and_then(|items| items.get(0)) [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `items.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 `cols.get(0)` [INFO] [stdout] --> network/src/lib.rs:396:30 [INFO] [stdout] | [INFO] [stdout] 396 | .and_then(|cols| cols.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cols.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 `runs.get(0)` [INFO] [stdout] --> network/src/lib.rs:401:30 [INFO] [stdout] | [INFO] [stdout] 401 | .and_then(|runs| runs.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `runs.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: file opened with `create`, but `truncate` behavior not defined [INFO] [stdout] --> network/src/lib.rs:519:10 [INFO] [stdout] | [INFO] [stdout] 519 | .create(true) [INFO] [stdout] | ^^^^^^^^^^^^- help: add: `.truncate(true)` [INFO] [stdout] | [INFO] [stdout] = help: if you intend to overwrite an existing file entirely, call `.truncate(true)` [INFO] [stdout] = help: if you instead know that you may want to keep some parts of the old file, call `.truncate(false)` [INFO] [stdout] = help: alternatively, use `.append(true)` to append to the file instead of overwriting it [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_open_options [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `a.get(0)` [INFO] [stdout] --> network/src/lib.rs:537:23 [INFO] [stdout] | [INFO] [stdout] 537 | .and_then(|a| a.get(0)) [INFO] [stdout] | ^^^^^^^^ help: try: `a.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 `v.get(0)` [INFO] [stdout] --> network/src/lib.rs:560:27 [INFO] [stdout] | [INFO] [stdout] 560 | .and_then(|v| v.get(0)) [INFO] [stdout] | ^^^^^^^^ help: try: `v.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 `v.get(0)` [INFO] [stdout] --> network/src/lib.rs:567:27 [INFO] [stdout] | [INFO] [stdout] 567 | .and_then(|v| v.get(0)) [INFO] [stdout] | ^^^^^^^^ help: try: `v.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 `if` statement can be collapsed [INFO] [stdout] --> network/src/lib.rs:585:17 [INFO] [stdout] | [INFO] [stdout] 585 | / if link.get("platform")?.as_str()? == "tidal" { [INFO] [stdout] 586 | | if let Some(unique_id) = link.get("uniqueId")?.as_str() { [INFO] [stdout] 587 | | let parts: Vec<&str> = unique_id.split('|').collect(); [INFO] [stdout] 588 | | if parts.len() == 3 { [INFO] [stdout] ... | [INFO] [stdout] 592 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 585 ~ if link.get("platform")?.as_str()? == "tidal" [INFO] [stdout] 586 ~ && let Some(unique_id) = link.get("uniqueId")?.as_str() { [INFO] [stdout] 587 | let parts: Vec<&str> = unique_id.split('|').collect(); [INFO] [stdout] ... [INFO] [stdout] 590 | } [INFO] [stdout] 591 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> network/src/lib.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | if !qual.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `qual.is_some()` [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: called `unwrap` on `qual` after checking its variant with `is_none` [INFO] [stdout] --> network/src/lib.rs:77:27 [INFO] [stdout] | [INFO] [stdout] 76 | if !qual.is_none() { [INFO] [stdout] | -------------- the check is happening here [INFO] [stdout] 77 | let mut quality = qual.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> network/src/lib.rs:153:13 [INFO] [stdout] | [INFO] [stdout] 153 | 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] 152 - sx.send(return_item).unwrap(); [INFO] [stdout] 153 - return; [INFO] [stdout] 152 + sx.send(return_item).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> network/src/lib.rs:159:13 [INFO] [stdout] | [INFO] [stdout] 159 | 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] 158 - sx.send(return_item).unwrap(); [INFO] [stdout] 159 - return; [INFO] [stdout] 158 + sx.send(return_item).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: file opened with `create`, but `truncate` behavior not defined [INFO] [stdout] --> network/src/lib.rs:147:18 [INFO] [stdout] | [INFO] [stdout] 147 | .create(true) [INFO] [stdout] | ^^^^^^^^^^^^- help: add: `.truncate(true)` [INFO] [stdout] | [INFO] [stdout] = help: if you intend to overwrite an existing file entirely, call `.truncate(true)` [INFO] [stdout] = help: if you instead know that you may want to keep some parts of the old file, call `.truncate(false)` [INFO] [stdout] = help: alternatively, use `.append(true)` to append to the file instead of overwriting it [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_open_options [INFO] [stdout] = note: `#[warn(clippy::suspicious_open_options)]` on by default [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] --> network/src/lib.rs:176:9 [INFO] [stdout] | [INFO] [stdout] 176 | / match text.find("/app.") { [INFO] [stdout] 177 | | Some(e) => {idx = e}, [INFO] [stdout] 178 | | _ => {} [INFO] [stdout] 179 | | } [INFO] [stdout] | |_________^ help: try: `if let Some(e) = text.find("/app.") {idx = e}` [INFO] [stdout] | [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] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> network/src/lib.rs:180:9 [INFO] [stdout] | [INFO] [stdout] 180 | / match text[idx..].find("\")"){ [INFO] [stdout] 181 | | Some(e) => {end = e+idx} [INFO] [stdout] 182 | | _ => {} [INFO] [stdout] 183 | | } [INFO] [stdout] | |_________^ help: try: `if let Some(e) = text[idx..].find("\")") {end = e+idx}` [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 boolean expression can be simplified [INFO] [stdout] --> network/src/lib.rs:366:8 [INFO] [stdout] | [INFO] [stdout] 366 | if !con.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `con.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> network/src/lib.rs:408:8 [INFO] [stdout] | [INFO] [stdout] 408 | if !first.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `first.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `con` after checking its variant with `is_none` [INFO] [stdout] --> network/src/lib.rs:367:17 [INFO] [stdout] | [INFO] [stdout] 366 | if !con.is_none() { [INFO] [stdout] | ------------- the check is happening here [INFO] [stdout] 367 | first = con [INFO] [stdout] | _________________^ [INFO] [stdout] 368 | | .unwrap() [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> network/src/lib.rs:350:5 [INFO] [stdout] | [INFO] [stdout] 350 | let first: Option; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `first` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 350 ~ [INFO] [stdout] 351 | let arr = resn [INFO] [stdout] ... [INFO] [stdout] 365 | let con = zero_index.get("musicShelfRenderer"); [INFO] [stdout] 366 ~ let first: Option = if !con.is_none() { [INFO] [stdout] 367 ~ con [INFO] [stdout] 368 | .unwrap() [INFO] [stdout] ... [INFO] [stdout] 384 | .and_then(Value::as_str) [INFO] [stdout] 385 ~ .map(|s| s.to_string()) [INFO] [stdout] 386 | } else { [INFO] [stdout] 387 ~ first_index [INFO] [stdout] 388 | .unwrap() [INFO] [stdout] ... [INFO] [stdout] 405 | .and_then(Value::as_str) [INFO] [stdout] 406 ~ .map(|s| s.to_string()) [INFO] [stdout] 407 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `tabs.get(0)` [INFO] [stdout] --> network/src/lib.rs:356:26 [INFO] [stdout] | [INFO] [stdout] 356 | .and_then(|tabs| tabs.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `tabs.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: accessing first element with `arr.get(0)` [INFO] [stdout] --> network/src/lib.rs:363:22 [INFO] [stdout] | [INFO] [stdout] 363 | let zero_index = arr.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^ help: try: `arr.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 `items.get(0)` [INFO] [stdout] --> network/src/lib.rs:371:31 [INFO] [stdout] | [INFO] [stdout] 371 | .and_then(|items| items.get(0)) [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `items.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 `cols.get(0)` [INFO] [stdout] --> network/src/lib.rs:375:30 [INFO] [stdout] | [INFO] [stdout] 375 | .and_then(|cols| cols.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cols.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 `runs.get(0)` [INFO] [stdout] --> network/src/lib.rs:380:30 [INFO] [stdout] | [INFO] [stdout] 380 | .and_then(|runs| runs.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `runs.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 `items.get(0)` [INFO] [stdout] --> network/src/lib.rs:392:31 [INFO] [stdout] | [INFO] [stdout] 392 | .and_then(|items| items.get(0)) [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `items.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 `cols.get(0)` [INFO] [stdout] --> network/src/lib.rs:396:30 [INFO] [stdout] | [INFO] [stdout] 396 | .and_then(|cols| cols.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `cols.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 `runs.get(0)` [INFO] [stdout] --> network/src/lib.rs:401:30 [INFO] [stdout] | [INFO] [stdout] 401 | .and_then(|runs| runs.get(0)) [INFO] [stdout] | ^^^^^^^^^^^ help: try: `runs.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: file opened with `create`, but `truncate` behavior not defined [INFO] [stdout] --> network/src/lib.rs:519:10 [INFO] [stdout] | [INFO] [stdout] 519 | .create(true) [INFO] [stdout] | ^^^^^^^^^^^^- help: add: `.truncate(true)` [INFO] [stdout] | [INFO] [stdout] = help: if you intend to overwrite an existing file entirely, call `.truncate(true)` [INFO] [stdout] = help: if you instead know that you may want to keep some parts of the old file, call `.truncate(false)` [INFO] [stdout] = help: alternatively, use `.append(true)` to append to the file instead of overwriting it [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_open_options [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `a.get(0)` [INFO] [stdout] --> network/src/lib.rs:537:23 [INFO] [stdout] | [INFO] [stdout] 537 | .and_then(|a| a.get(0)) [INFO] [stdout] | ^^^^^^^^ help: try: `a.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 `v.get(0)` [INFO] [stdout] --> network/src/lib.rs:560:27 [INFO] [stdout] | [INFO] [stdout] 560 | .and_then(|v| v.get(0)) [INFO] [stdout] | ^^^^^^^^ help: try: `v.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 `v.get(0)` [INFO] [stdout] --> network/src/lib.rs:567:27 [INFO] [stdout] | [INFO] [stdout] 567 | .and_then(|v| v.get(0)) [INFO] [stdout] | ^^^^^^^^ help: try: `v.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 `if` statement can be collapsed [INFO] [stdout] --> network/src/lib.rs:585:17 [INFO] [stdout] | [INFO] [stdout] 585 | / if link.get("platform")?.as_str()? == "tidal" { [INFO] [stdout] 586 | | if let Some(unique_id) = link.get("uniqueId")?.as_str() { [INFO] [stdout] 587 | | let parts: Vec<&str> = unique_id.split('|').collect(); [INFO] [stdout] 588 | | if parts.len() == 3 { [INFO] [stdout] ... | [INFO] [stdout] 592 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 585 ~ if link.get("platform")?.as_str()? == "tidal" [INFO] [stdout] 586 ~ && let Some(unique_id) = link.get("uniqueId")?.as_str() { [INFO] [stdout] 587 | let parts: Vec<&str> = unique_id.split('|').collect(); [INFO] [stdout] ... [INFO] [stdout] 590 | } [INFO] [stdout] 591 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking player v0.1.0 (/opt/rustwide/workdir/player) [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> player/src/lib.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | use tokio; [INFO] [stdout] | ^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> player/src/lib.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | use uuid; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> player/src/lib.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | use tokio; [INFO] [stdout] | ^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> player/src/lib.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | use uuid; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> player/src/lib.rs:73:24 [INFO] [stdout] | [INFO] [stdout] 73 | fs::create_dir_all(&path.rsplit_once("/").unwrap().0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `path.rsplit_once("/").unwrap().0` [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: this if-then-else expression returns a bool literal [INFO] [stdout] --> player/src/lib.rs:75:5 [INFO] [stdout] | [INFO] [stdout] 75 | if f.is_err() { false } else { true } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!f.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stdout] = note: `#[warn(clippy::needless_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> player/src/lib.rs:88:29 [INFO] [stdout] | [INFO] [stdout] 88 | .unwrap_or_else(|| empty_json()); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `empty_json` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `MutexGuard` is held across an await point [INFO] [stdout] --> player/src/lib.rs:107:17 [INFO] [stdout] | [INFO] [stdout] 107 | let mut json = global_json().lock().unwrap(); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await` [INFO] [stdout] note: these are all the await points this lock is held through [INFO] [stdout] --> player/src/lib.rs:109:49 [INFO] [stdout] | [INFO] [stdout] 109 | let new_iid = convert_to_ytm(&name).await.unwrap(); [INFO] [stdout] | ^^^^^ [INFO] [stdout] 110 | let njson = get_ytrecs(&new_iid).await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 138 | let songlink_data = get_songlink_data(id, "y").await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 155 | let quality_json = get_quality(&tidal_id_final).await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | if let Ok(res) = get_song(id, &quality).await { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 194 | cache_mpd_song(&decoded, &tidal_id_final).await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 217 | cache_url(&tidal_id_final, url).await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#await_holding_lock [INFO] [stdout] = note: `#[warn(clippy::await_holding_lock)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> player/src/lib.rs:184:28 [INFO] [stdout] | [INFO] [stdout] 184 | if !manifest.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `manifest.is_some()` [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: called `unwrap` on `iiiid` after checking its variant with `is_none` [INFO] [stdout] --> player/src/lib.rs:143:42 [INFO] [stdout] | [INFO] [stdout] 140 | if iiiid.is_none() { [INFO] [stdout] | ------------------ help: try: `if let Some() = iiiid` [INFO] [stdout] ... [INFO] [stdout] 143 | tidal_id_final = iiiid.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `tidal_id` after checking its variant with `is_none` [INFO] [stdout] --> player/src/lib.rs:147:38 [INFO] [stdout] | [INFO] [stdout] 133 | if tidal_id.is_none() { [INFO] [stdout] | --------------------- help: try: `if let Some() = tidal_id` [INFO] [stdout] ... [INFO] [stdout] 147 | tidal_id_final = tidal_id.unwrap().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `manifest` after checking its variant with `is_none` [INFO] [stdout] --> player/src/lib.rs:185:57 [INFO] [stdout] | [INFO] [stdout] 184 | if !manifest.is_none() { [INFO] [stdout] | ------------------ the check is happening here [INFO] [stdout] 185 | let decoded = decode_base64(manifest.unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> player/src/lib.rs:179:51 [INFO] [stdout] | [INFO] [stdout] 179 | if let Ok(res) = get_song(id, &quality).await { [INFO] [stdout] | ^^^^^^^^ help: change this to: `quality` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> player/src/lib.rs:203:36 [INFO] [stdout] | [INFO] [stdout] 203 | ... } else if let Ok(json) = serde_json::from_str::(&decoded) { [INFO] [stdout] | ______________________________^ [INFO] [stdout] 204 | | ... if let Some(url) = json [INFO] [stdout] 205 | | ... .get("urls") [INFO] [stdout] 206 | | ... .and_then(|v| v.as_array()) [INFO] [stdout] ... | [INFO] [stdout] 227 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 203 ~ } else if let Ok(json) = serde_json::from_str::(&decoded) [INFO] [stdout] 204 ~ && let Some(url) = json [INFO] [stdout] 205 | .get("urls") [INFO] [stdout] ... [INFO] [stdout] 225 | .ok(); [INFO] [stdout] 226 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> player/src/lib.rs:273:5 [INFO] [stdout] | [INFO] [stdout] 273 | return String::from_utf8(decoded).unwrap(); [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] 273 - return String::from_utf8(decoded).unwrap(); [INFO] [stdout] 273 + String::from_utf8(decoded).unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> player/src/lib.rs:270:9 [INFO] [stdout] | [INFO] [stdout] 270 | t.push_str("="); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `t.push('=')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> player/src/lib.rs:278:12 [INFO] [stdout] | [INFO] [stdout] 278 | items: &Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 278 - items: &Vec, [INFO] [stdout] 278 + items: &[Value], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> player/src/lib.rs:308:32 [INFO] [stdout] | [INFO] [stdout] 308 | if cur == 0 && urls.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `urls.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> player/src/lib.rs:344:36 [INFO] [stdout] | [INFO] [stdout] 344 | if cur == 0 && urls.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `urls.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> player/src/lib.rs:361:20 [INFO] [stdout] | [INFO] [stdout] 361 | } else if let Ok(json) = serde_json::from_str::(&decoded) { [INFO] [stdout] | ____________________^ [INFO] [stdout] 362 | | if let Some(url) = json [INFO] [stdout] 363 | | .get("urls") [INFO] [stdout] 364 | | .and_then(|v| v.as_array()) [INFO] [stdout] ... | [INFO] [stdout] 387 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 361 ~ } else if let Ok(json) = serde_json::from_str::(&decoded) [INFO] [stdout] 362 ~ && let Some(url) = json [INFO] [stdout] 363 | .get("urls") [INFO] [stdout] ... [INFO] [stdout] 385 | ); [INFO] [stdout] 386 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> player/src/lib.rs:369:40 [INFO] [stdout] | [INFO] [stdout] 369 | if cur == 0 && urls.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `urls.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> player/src/lib.rs:73:24 [INFO] [stdout] | [INFO] [stdout] 73 | fs::create_dir_all(&path.rsplit_once("/").unwrap().0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `path.rsplit_once("/").unwrap().0` [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: this if-then-else expression returns a bool literal [INFO] [stdout] --> player/src/lib.rs:75:5 [INFO] [stdout] | [INFO] [stdout] 75 | if f.is_err() { false } else { true } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!f.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stdout] = note: `#[warn(clippy::needless_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> player/src/lib.rs:88:29 [INFO] [stdout] | [INFO] [stdout] 88 | .unwrap_or_else(|| empty_json()); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `empty_json` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `MutexGuard` is held across an await point [INFO] [stdout] --> player/src/lib.rs:107:17 [INFO] [stdout] | [INFO] [stdout] 107 | let mut json = global_json().lock().unwrap(); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await` [INFO] [stdout] note: these are all the await points this lock is held through [INFO] [stdout] --> player/src/lib.rs:109:49 [INFO] [stdout] | [INFO] [stdout] 109 | let new_iid = convert_to_ytm(&name).await.unwrap(); [INFO] [stdout] | ^^^^^ [INFO] [stdout] 110 | let njson = get_ytrecs(&new_iid).await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 138 | let songlink_data = get_songlink_data(id, "y").await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 155 | let quality_json = get_quality(&tidal_id_final).await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | if let Ok(res) = get_song(id, &quality).await { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 194 | cache_mpd_song(&decoded, &tidal_id_final).await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 217 | cache_url(&tidal_id_final, url).await; [INFO] [stdout] | ^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#await_holding_lock [INFO] [stdout] = note: `#[warn(clippy::await_holding_lock)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> player/src/lib.rs:184:28 [INFO] [stdout] | [INFO] [stdout] 184 | if !manifest.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: try: `manifest.is_some()` [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: called `unwrap` on `iiiid` after checking its variant with `is_none` [INFO] [stdout] --> player/src/lib.rs:143:42 [INFO] [stdout] | [INFO] [stdout] 140 | if iiiid.is_none() { [INFO] [stdout] | ------------------ help: try: `if let Some() = iiiid` [INFO] [stdout] ... [INFO] [stdout] 143 | tidal_id_final = iiiid.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `tidal_id` after checking its variant with `is_none` [INFO] [stdout] --> player/src/lib.rs:147:38 [INFO] [stdout] | [INFO] [stdout] 133 | if tidal_id.is_none() { [INFO] [stdout] | --------------------- help: try: `if let Some() = tidal_id` [INFO] [stdout] ... [INFO] [stdout] 147 | tidal_id_final = tidal_id.unwrap().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `manifest` after checking its variant with `is_none` [INFO] [stdout] --> player/src/lib.rs:185:57 [INFO] [stdout] | [INFO] [stdout] 184 | if !manifest.is_none() { [INFO] [stdout] | ------------------ the check is happening here [INFO] [stdout] 185 | let decoded = decode_base64(manifest.unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> player/src/lib.rs:179:51 [INFO] [stdout] | [INFO] [stdout] 179 | if let Ok(res) = get_song(id, &quality).await { [INFO] [stdout] | ^^^^^^^^ help: change this to: `quality` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> player/src/lib.rs:203:36 [INFO] [stdout] | [INFO] [stdout] 203 | ... } else if let Ok(json) = serde_json::from_str::(&decoded) { [INFO] [stdout] | ______________________________^ [INFO] [stdout] 204 | | ... if let Some(url) = json [INFO] [stdout] 205 | | ... .get("urls") [INFO] [stdout] 206 | | ... .and_then(|v| v.as_array()) [INFO] [stdout] ... | [INFO] [stdout] 227 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 203 ~ } else if let Ok(json) = serde_json::from_str::(&decoded) [INFO] [stdout] 204 ~ && let Some(url) = json [INFO] [stdout] 205 | .get("urls") [INFO] [stdout] ... [INFO] [stdout] 225 | .ok(); [INFO] [stdout] 226 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> player/src/lib.rs:273:5 [INFO] [stdout] | [INFO] [stdout] 273 | return String::from_utf8(decoded).unwrap(); [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] 273 - return String::from_utf8(decoded).unwrap(); [INFO] [stdout] 273 + String::from_utf8(decoded).unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> player/src/lib.rs:270:9 [INFO] [stdout] | [INFO] [stdout] 270 | t.push_str("="); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `t.push('=')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> player/src/lib.rs:278:12 [INFO] [stdout] | [INFO] [stdout] 278 | items: &Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 278 - items: &Vec, [INFO] [stdout] 278 + items: &[Value], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> player/src/lib.rs:308:32 [INFO] [stdout] | [INFO] [stdout] 308 | if cur == 0 && urls.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `urls.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> player/src/lib.rs:344:36 [INFO] [stdout] | [INFO] [stdout] 344 | if cur == 0 && urls.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `urls.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> player/src/lib.rs:361:20 [INFO] [stdout] | [INFO] [stdout] 361 | } else if let Ok(json) = serde_json::from_str::(&decoded) { [INFO] [stdout] | ____________________^ [INFO] [stdout] 362 | | if let Some(url) = json [INFO] [stdout] 363 | | .get("urls") [INFO] [stdout] 364 | | .and_then(|v| v.as_array()) [INFO] [stdout] ... | [INFO] [stdout] 387 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 361 ~ } else if let Ok(json) = serde_json::from_str::(&decoded) [INFO] [stdout] 362 ~ && let Some(url) = json [INFO] [stdout] 363 | .get("urls") [INFO] [stdout] ... [INFO] [stdout] 385 | ); [INFO] [stdout] 386 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> player/src/lib.rs:369:40 [INFO] [stdout] | [INFO] [stdout] 369 | if cur == 0 && urls.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `urls.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking mscply v1.1.7 (/opt/rustwide/workdir/app) [INFO] [stdout] warning: unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stdout] --> app/src/main.rs:483:16 [INFO] [stdout] | [INFO] [stdout] 483 | && urls.len() >= current + 1 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: change it to: `urls.len() > current` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stdout] = note: `#[warn(clippy::int_plus_one)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `>= y + 1` or `x - 1 >=` [INFO] [stdout] --> app/src/main.rs:483:16 [INFO] [stdout] | [INFO] [stdout] 483 | && urls.len() >= current + 1 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: change it to: `urls.len() > current` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#int_plus_one [INFO] [stdout] = note: `#[warn(clippy::int_plus_one)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> app/src/main.rs:62:24 [INFO] [stdout] | [INFO] [stdout] 62 | if *current > 0 && urls.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!urls.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | / match mpv.command("seek", &["0", "absolute"]) { [INFO] [stdout] 100 | | Ok(_) => {} [INFO] [stdout] 101 | | Err(_) => {} [INFO] [stdout] 102 | | } [INFO] [stdout] | |_________^ help: try: `if let Ok(_) = mpv.command("seek", &["0", "absolute"]) {}` [INFO] [stdout] | [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] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `bitrate` after checking its variant with `is_none` [INFO] [stdout] --> app/src/main.rs:379:47 [INFO] [stdout] | [INFO] [stdout] 378 | ... if !bitrate.is_none() { [INFO] [stdout] | ----------------- the check is happening here [INFO] [stdout] 379 | ... app.bitrate = bitrate.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `bitrate` after checking its variant with `is_err` [INFO] [stdout] --> app/src/main.rs:383:51 [INFO] [stdout] | [INFO] [stdout] 382 | ... if !bitrate.is_err() { [INFO] [stdout] | ---------------- the check is happening here [INFO] [stdout] 383 | ... app.bitrate = bitrate.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `bitrate` after checking its variant with `is_none` [INFO] [stdout] --> app/src/main.rs:451:47 [INFO] [stdout] | [INFO] [stdout] 450 | ... if !bitrate.is_none() { [INFO] [stdout] | ----------------- the check is happening here [INFO] [stdout] 451 | ... app.bitrate = bitrate.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `bitrate` after checking its variant with `is_err` [INFO] [stdout] --> app/src/main.rs:455:51 [INFO] [stdout] | [INFO] [stdout] 454 | ... if !bitrate.is_err() { [INFO] [stdout] | ---------------- the check is happening here [INFO] [stdout] 455 | ... app.bitrate = bitrate.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `url` after checking its variant with `is_none` [INFO] [stdout] --> app/src/main.rs:783:24 [INFO] [stdout] | [INFO] [stdout] 782 | if !url.is_none() { [INFO] [stdout] | ------------- the check is happening here [INFO] [stdout] 783 | let furl = url.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:378:32 [INFO] [stdout] | [INFO] [stdout] 378 | ... if !bitrate.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `bitrate.is_some()` [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 boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:382:36 [INFO] [stdout] | [INFO] [stdout] 382 | ... if !bitrate.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `bitrate.is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:450:32 [INFO] [stdout] | [INFO] [stdout] 450 | ... if !bitrate.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `bitrate.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:454:36 [INFO] [stdout] | [INFO] [stdout] 454 | ... if !bitrate.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `bitrate.is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:782:12 [INFO] [stdout] | [INFO] [stdout] 782 | if !url.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `url.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: file opened with `create`, but `truncate` behavior not defined [INFO] [stdout] --> app/src/main.rs:214:10 [INFO] [stdout] | [INFO] [stdout] 214 | .create(true) [INFO] [stdout] | ^^^^^^^^^^^^- help: add: `.truncate(true)` [INFO] [stdout] | [INFO] [stdout] = help: if you intend to overwrite an existing file entirely, call `.truncate(true)` [INFO] [stdout] = help: if you instead know that you may want to keep some parts of the old file, call `.truncate(false)` [INFO] [stdout] = help: alternatively, use `.append(true)` to append to the file instead of overwriting it [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_open_options [INFO] [stdout] = note: `#[warn(clippy::suspicious_open_options)]` on by default [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] --> app/src/main.rs:262:17 [INFO] [stdout] | [INFO] [stdout] 262 | / match mpv2.get_property::("duration") { [INFO] [stdout] 263 | | Ok(e) => dura = e, [INFO] [stdout] 264 | | Err(_) => {} [INFO] [stdout] 265 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(e) = mpv2.get_property::("duration") { dura = e }` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:266:17 [INFO] [stdout] | [INFO] [stdout] 266 | / match mpv2.get_property::("time-pos") { [INFO] [stdout] 267 | | Ok(e) => tim = e, [INFO] [stdout] 268 | | Err(_) => {} [INFO] [stdout] 269 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(e) = mpv2.get_property::("time-pos") { tim = e }` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:283:17 [INFO] [stdout] | [INFO] [stdout] 283 | / match mpv.get_property::("duration") { [INFO] [stdout] 284 | | Ok(e) => dura = e, [INFO] [stdout] 285 | | Err(_) => {} [INFO] [stdout] 286 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(e) = mpv.get_property::("duration") { dura = e }` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:287:17 [INFO] [stdout] | [INFO] [stdout] 287 | / match mpv.get_property::("time-pos") { [INFO] [stdout] 288 | | Ok(e) => tim = e, [INFO] [stdout] 289 | | Err(_) => {} [INFO] [stdout] 290 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(e) = mpv.get_property::("time-pos") { tim = e }` [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 `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:304:9 [INFO] [stdout] | [INFO] [stdout] 304 | / if !IS_RUNNING.load(Ordering::SeqCst) && current + 1 == urls.len() { [INFO] [stdout] 305 | | if urls.len() > 1 { [INFO] [stdout] 306 | | spawn_recommendation_worker(urls.last().unwrap().to_string(), tx.clone()); [INFO] [stdout] 307 | | } [INFO] [stdout] 308 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 304 ~ if !IS_RUNNING.load(Ordering::SeqCst) && current + 1 == urls.len() [INFO] [stdout] 305 ~ && urls.len() > 1 { [INFO] [stdout] 306 | spawn_recommendation_worker(urls.last().unwrap().to_string(), tx.clone()); [INFO] [stdout] 307 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:309:9 [INFO] [stdout] | [INFO] [stdout] 309 | / if urls.len() > current + 1 { [INFO] [stdout] 310 | | if !check_song(urls[current + 1].get("id").and_then(Value::as_str).unwrap()) [INFO] [stdout] 311 | | && !urls[current + 1] [INFO] [stdout] 312 | | .get("url") [INFO] [stdout] ... | [INFO] [stdout] 335 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 309 ~ if urls.len() > current + 1 [INFO] [stdout] 310 ~ && !check_song(urls[current + 1].get("id").and_then(Value::as_str).unwrap()) [INFO] [stdout] 311 | && !urls[current + 1] [INFO] [stdout] ... [INFO] [stdout] 333 | } [INFO] [stdout] 334 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:310:13 [INFO] [stdout] | [INFO] [stdout] 310 | / if !check_song(urls[current + 1].get("id").and_then(Value::as_str).unwrap()) [INFO] [stdout] 311 | | && !urls[current + 1] [INFO] [stdout] 312 | | .get("url") [INFO] [stdout] 313 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 334 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 315 ~ .starts_with("/") [INFO] [stdout] 316 ~ && save { [INFO] [stdout] 317 | if !IS_CACHING.load(Ordering::SeqCst) { [INFO] [stdout] ... [INFO] [stdout] 331 | } [INFO] [stdout] 332 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:317:17 [INFO] [stdout] | [INFO] [stdout] 317 | / if save { [INFO] [stdout] 318 | | if !IS_CACHING.load(Ordering::SeqCst) { [INFO] [stdout] 319 | | if let Ok(data) = cache_recv.try_recv() { [INFO] [stdout] 320 | | urls[data.index]["url"] = json!(data.path); [INFO] [stdout] ... | [INFO] [stdout] 333 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 317 ~ if save [INFO] [stdout] 318 ~ && !IS_CACHING.load(Ordering::SeqCst) { [INFO] [stdout] 319 | if let Ok(data) = cache_recv.try_recv() { [INFO] [stdout] ... [INFO] [stdout] 331 | } [INFO] [stdout] 332 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `if let` [INFO] [stdout] --> app/src/main.rs:338:17 [INFO] [stdout] | [INFO] [stdout] 338 | / match event { [INFO] [stdout] 339 | | Ok(e) => match e { [INFO] [stdout] 340 | | eve::PropertyChange { [INFO] [stdout] 341 | | change: PropertyData::Double(f), [INFO] [stdout] ... | [INFO] [stdout] 405 | | _ => {} [INFO] [stdout] 406 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> app/src/main.rs:337:25 [INFO] [stdout] | [INFO] [stdout] 337 | if let Some(event) = mpv.wait_event(0.05) { [INFO] [stdout] | ^^^^^ replace this binding [INFO] [stdout] 338 | match event { [INFO] [stdout] 339 | Ok(e) => match e { [INFO] [stdout] | ^^^^^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [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] --> app/src/main.rs:338:17 [INFO] [stdout] | [INFO] [stdout] 338 | / match event { [INFO] [stdout] 339 | | Ok(e) => match e { [INFO] [stdout] 340 | | eve::PropertyChange { [INFO] [stdout] 341 | | change: PropertyData::Double(f), [INFO] [stdout] ... | [INFO] [stdout] 405 | | _ => {} [INFO] [stdout] 406 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 338 ~ if let Ok(e) = event { match e { [INFO] [stdout] 339 + eve::PropertyChange { [INFO] [stdout] 340 + change: PropertyData::Double(f), [INFO] [stdout] 341 + reply_userdata: 1, [INFO] [stdout] 342 + .. [INFO] [stdout] 343 + } => { [INFO] [stdout] 344 + dura = f; [INFO] [stdout] 345 + app.dur = f.round() as i64; [INFO] [stdout] 346 + } [INFO] [stdout] 347 + eve::PropertyChange { [INFO] [stdout] 348 + change: PropertyData::Double(f), [INFO] [stdout] 349 + reply_userdata: 3, [INFO] [stdout] 350 + .. [INFO] [stdout] 351 + } => { [INFO] [stdout] 352 + tim = f; [INFO] [stdout] 353 + app.cur_time = f.round() as i64; [INFO] [stdout] 354 + } [INFO] [stdout] 355 + eve::PropertyChange { [INFO] [stdout] 356 + name: _, [INFO] [stdout] 357 + change: PropertyData::Str(e), [INFO] [stdout] 358 + reply_userdata: 4, [INFO] [stdout] 359 + } => { [INFO] [stdout] 360 + let newvec = serde_json::from_str::>(e).unwrap(); [INFO] [stdout] 361 + if newvec.is_empty() { [INFO] [stdout] 362 + continue; [INFO] [stdout] 363 + } [INFO] [stdout] 364 + let json = newvec.get(0).unwrap(); [INFO] [stdout] 365 + app.channel_count = [INFO] [stdout] 366 + json.get("audio-channels").and_then(Value::as_i64).unwrap(); [INFO] [stdout] 367 + app.sample_rate = json [INFO] [stdout] 368 + .get("demux-samplerate") [INFO] [stdout] 369 + .and_then(Value::as_i64) [INFO] [stdout] 370 + .unwrap(); [INFO] [stdout] 371 + app.track_format = json [INFO] [stdout] 372 + .get("codec") [INFO] [stdout] 373 + .and_then(Value::as_str) [INFO] [stdout] 374 + .unwrap() [INFO] [stdout] 375 + .to_uppercase(); [INFO] [stdout] 376 + let bitrate = json.get("demux-bitrate").and_then(Value::as_i64); [INFO] [stdout] 377 + if !bitrate.is_none() { [INFO] [stdout] 378 + app.bitrate = bitrate.unwrap() [INFO] [stdout] 379 + } else { [INFO] [stdout] 380 + let bitrate = mpv.get_property::("audio-bitrate"); [INFO] [stdout] 381 + if !bitrate.is_err() { [INFO] [stdout] 382 + app.bitrate = bitrate.unwrap(); [INFO] [stdout] 383 + } else { [INFO] [stdout] 384 + let format = json.get("format-name").and_then(Value::as_str); [INFO] [stdout] 385 + if format.is_none() { [INFO] [stdout] 386 + app.bitrate = 0; [INFO] [stdout] 387 + continue; [INFO] [stdout] 388 + } [INFO] [stdout] 389 + if qual == "HIGH" { [INFO] [stdout] 390 + app.bitrate = 320; [INFO] [stdout] 391 + } else if qual == "LOW" { [INFO] [stdout] 392 + app.bitrate = 96; [INFO] [stdout] 393 + } else { [INFO] [stdout] 394 + let form = format.unwrap(); [INFO] [stdout] 395 + app.bitrate = app.sample_rate [INFO] [stdout] 396 + * app.channel_count [INFO] [stdout] 397 + * if form == "s16" { 16 } else { 24 } [INFO] [stdout] 398 + } [INFO] [stdout] 399 + } [INFO] [stdout] 400 + } [INFO] [stdout] 401 + } [INFO] [stdout] 402 + _ => {} [INFO] [stdout] 403 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `newvec.get(0)` [INFO] [stdout] --> app/src/main.rs:365:40 [INFO] [stdout] | [INFO] [stdout] 365 | ... let json = newvec.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `newvec.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: this `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:408:16 [INFO] [stdout] | [INFO] [stdout] 408 | } else if player_num == 2 { [INFO] [stdout] | ________________^ [INFO] [stdout] 409 | | if let Some(event) = mpv2.wait_event(0.05) { [INFO] [stdout] 410 | | match event { [INFO] [stdout] 411 | | Ok(e) => match e { [INFO] [stdout] ... | [INFO] [stdout] 480 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 408 ~ } else if player_num == 2 [INFO] [stdout] 409 ~ && let Some(event) = mpv2.wait_event(0.05) { [INFO] [stdout] 410 | match event { [INFO] [stdout] ... [INFO] [stdout] 478 | } [INFO] [stdout] 479 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `if let` [INFO] [stdout] --> app/src/main.rs:410:17 [INFO] [stdout] | [INFO] [stdout] 410 | / match event { [INFO] [stdout] 411 | | Ok(e) => match e { [INFO] [stdout] 412 | | eve::PropertyChange { [INFO] [stdout] 413 | | change: PropertyData::Double(f), [INFO] [stdout] ... | [INFO] [stdout] 477 | | _ => {} [INFO] [stdout] 478 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> app/src/main.rs:409:25 [INFO] [stdout] | [INFO] [stdout] 409 | if let Some(event) = mpv2.wait_event(0.05) { [INFO] [stdout] | ^^^^^ replace this binding [INFO] [stdout] 410 | match event { [INFO] [stdout] 411 | Ok(e) => match e { [INFO] [stdout] | ^^^^^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [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] --> app/src/main.rs:410:17 [INFO] [stdout] | [INFO] [stdout] 410 | / match event { [INFO] [stdout] 411 | | Ok(e) => match e { [INFO] [stdout] 412 | | eve::PropertyChange { [INFO] [stdout] 413 | | change: PropertyData::Double(f), [INFO] [stdout] ... | [INFO] [stdout] 477 | | _ => {} [INFO] [stdout] 478 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 410 ~ if let Ok(e) = event { match e { [INFO] [stdout] 411 + eve::PropertyChange { [INFO] [stdout] 412 + change: PropertyData::Double(f), [INFO] [stdout] 413 + reply_userdata: 1, [INFO] [stdout] 414 + .. [INFO] [stdout] 415 + } => { [INFO] [stdout] 416 + dura = f; [INFO] [stdout] 417 + app.dur = f.round() as i64; [INFO] [stdout] 418 + } [INFO] [stdout] 419 + eve::PropertyChange { [INFO] [stdout] 420 + change: PropertyData::Double(f), [INFO] [stdout] 421 + reply_userdata: 3, [INFO] [stdout] 422 + .. [INFO] [stdout] 423 + } => { [INFO] [stdout] 424 + tim = f; [INFO] [stdout] 425 + app.cur_time = f.round() as i64; [INFO] [stdout] 426 + } [INFO] [stdout] 427 + eve::PropertyChange { [INFO] [stdout] 428 + name: _, [INFO] [stdout] 429 + change: PropertyData::Str(e), [INFO] [stdout] 430 + reply_userdata: 4, [INFO] [stdout] 431 + } => { [INFO] [stdout] 432 + let newvec = serde_json::from_str::>(e).unwrap(); [INFO] [stdout] 433 + if newvec.is_empty() { [INFO] [stdout] 434 + continue; [INFO] [stdout] 435 + } [INFO] [stdout] 436 + let json = newvec.get(0).unwrap(); [INFO] [stdout] 437 + app.channel_count = [INFO] [stdout] 438 + json.get("audio-channels").and_then(Value::as_i64).unwrap(); [INFO] [stdout] 439 + app.sample_rate = json [INFO] [stdout] 440 + .get("demux-samplerate") [INFO] [stdout] 441 + .and_then(Value::as_i64) [INFO] [stdout] 442 + .unwrap(); [INFO] [stdout] 443 + app.track_format = json [INFO] [stdout] 444 + .get("codec") [INFO] [stdout] 445 + .and_then(Value::as_str) [INFO] [stdout] 446 + .unwrap() [INFO] [stdout] 447 + .to_uppercase(); [INFO] [stdout] 448 + let bitrate = json.get("demux-bitrate").and_then(Value::as_i64); [INFO] [stdout] 449 + if !bitrate.is_none() { [INFO] [stdout] 450 + app.bitrate = bitrate.unwrap() [INFO] [stdout] 451 + } else { [INFO] [stdout] 452 + let bitrate = mpv2.get_property::("audio-bitrate"); [INFO] [stdout] 453 + if !bitrate.is_err() { [INFO] [stdout] 454 + app.bitrate = bitrate.unwrap(); [INFO] [stdout] 455 + } else { [INFO] [stdout] 456 + let format = json.get("format-name").and_then(Value::as_str); [INFO] [stdout] 457 + if format.is_none() { [INFO] [stdout] 458 + app.bitrate = 0; [INFO] [stdout] 459 + continue; [INFO] [stdout] 460 + } [INFO] [stdout] 461 + if qual == "HIGH" { [INFO] [stdout] 462 + app.bitrate = 320; [INFO] [stdout] 463 + } else if qual == "LOW" { [INFO] [stdout] 464 + app.bitrate = 96; [INFO] [stdout] 465 + } else { [INFO] [stdout] 466 + let form = format.unwrap(); [INFO] [stdout] 467 + app.bitrate = app.sample_rate [INFO] [stdout] 468 + * app.channel_count [INFO] [stdout] 469 + * if form == "s16" { 16 } else { 24 } [INFO] [stdout] 470 + } [INFO] [stdout] 471 + } [INFO] [stdout] 472 + } [INFO] [stdout] 473 + } [INFO] [stdout] 474 + _ => {} [INFO] [stdout] 475 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `newvec.get(0)` [INFO] [stdout] --> app/src/main.rs:437:40 [INFO] [stdout] | [INFO] [stdout] 437 | ... let json = newvec.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `newvec.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 `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:481:9 [INFO] [stdout] | [INFO] [stdout] 481 | / if mpv.get_property::("idle-active").unwrap() [INFO] [stdout] 482 | | && mpv2.get_property::("idle-active").unwrap() [INFO] [stdout] 483 | | && urls.len() >= current + 1 [INFO] [stdout] ... | [INFO] [stdout] 496 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 483 ~ && urls.len() >= current + 1 [INFO] [stdout] 484 ~ && last_mode_switch.elapsed() >= skip_every { [INFO] [stdout] 485 | app.cur_time = 0; [INFO] [stdout] ... [INFO] [stdout] 493 | _auto_started = true; [INFO] [stdout] 494 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `unwrap()` on `Some` value [INFO] [stdout] --> app/src/main.rs:528:23 [INFO] [stdout] | [INFO] [stdout] 528 | match event.unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: remove the `Some` and `unwrap()` [INFO] [stdout] --> app/src/main.rs:526:29 [INFO] [stdout] | [INFO] [stdout] 526 | let event = Some(crossterm::event::read().unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_literal_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_literal_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> app/src/main.rs:587:33 [INFO] [stdout] | [INFO] [stdout] 587 | / ... if !mpv.get_property::("idle-active").unwrap() [INFO] [stdout] 588 | | ... || !mpv2.get_property::("idle-active").unwrap() [INFO] [stdout] 589 | | ... { [INFO] [stdout] 590 | | ... if player_num == 1 { [INFO] [stdout] ... | [INFO] [stdout] 605 | | ... app.dirty = true; [INFO] [stdout] 606 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 586 ~ KeyCode::Char('f') [INFO] [stdout] 587 ~ if (!mpv.get_property::("idle-active").unwrap() [INFO] [stdout] 588 ~ || !mpv2.get_property::("idle-active").unwrap()) [INFO] [stdout] 589 ~ => { [INFO] [stdout] 590 | if player_num == 1 { [INFO] [stdout] ... [INFO] [stdout] 605 | app.dirty = true; [INFO] [stdout] 606 ~ } [INFO] [stdout] | [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] --> app/src/main.rs:591:41 [INFO] [stdout] | [INFO] [stdout] 591 | / ... match mpv.command("seek", &["5", "relative"]) { [INFO] [stdout] 592 | | ... Ok(()) => {} [INFO] [stdout] 593 | | ... _ => {} [INFO] [stdout] 594 | | ... } [INFO] [stdout] | |_______________________^ help: try: `if let Ok(()) = mpv.command("seek", &["5", "relative"]) {}` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:596:41 [INFO] [stdout] | [INFO] [stdout] 596 | / ... match mpv2.command("seek", &["5", "relative"]) { [INFO] [stdout] 597 | | ... Ok(()) => {} [INFO] [stdout] 598 | | ... _ => {} [INFO] [stdout] 599 | | ... } [INFO] [stdout] | |_______________________^ help: try: `if let Ok(()) = mpv2.command("seek", &["5", "relative"]) {}` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:613:41 [INFO] [stdout] | [INFO] [stdout] 613 | / ... match mpv.command("seek", &["-5", "relative"]) { [INFO] [stdout] 614 | | ... Ok(()) => {} [INFO] [stdout] 615 | | ... _ => {} [INFO] [stdout] 616 | | ... } [INFO] [stdout] | |_______________________^ help: try: `if let Ok(()) = mpv.command("seek", &["-5", "relative"]) {}` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:618:41 [INFO] [stdout] | [INFO] [stdout] 618 | / ... match mpv2.command("seek", &["-5", "relative"]) { [INFO] [stdout] 619 | | ... Ok(()) => {} [INFO] [stdout] 620 | | ... _ => {} [INFO] [stdout] 621 | | ... } [INFO] [stdout] | |_______________________^ help: try: `if let Ok(()) = mpv2.command("seek", &["-5", "relative"]) {}` [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 `if` can be collapsed into the outer `match` [INFO] [stdout] --> app/src/main.rs:688:33 [INFO] [stdout] | [INFO] [stdout] 688 | / ... if app.selected > 0 { [INFO] [stdout] 689 | | ... app.selected -= 1; [INFO] [stdout] 690 | | ... app.dirty = true; [INFO] [stdout] 691 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 687 ~ KeyCode::Up [INFO] [stdout] 688 ~ if app.selected > 0 => { [INFO] [stdout] 689 | app.selected -= 1; [INFO] [stdout] 690 | app.dirty = true; [INFO] [stdout] 691 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> app/src/main.rs:694:33 [INFO] [stdout] | [INFO] [stdout] 694 | / ... if app.selected + 1 < app.search_results.len() { [INFO] [stdout] 695 | | ... app.selected += 1; [INFO] [stdout] 696 | | ... app.dirty = true; [INFO] [stdout] 697 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 693 ~ KeyCode::Down [INFO] [stdout] 694 ~ if app.selected + 1 < app.search_results.len() => { [INFO] [stdout] 695 | app.selected += 1; [INFO] [stdout] 696 | app.dirty = true; [INFO] [stdout] 697 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> app/src/main.rs:736:45 [INFO] [stdout] | [INFO] [stdout] 736 | / ... &urls[current] [INFO] [stdout] 737 | | ... .get("url") [INFO] [stdout] 738 | | ... .and_then(Value::as_str) [INFO] [stdout] 739 | | ... .unwrap(), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 736 ~ urls[current] [INFO] [stdout] 737 + .get("url") [INFO] [stdout] 738 + .and_then(Value::as_str) [INFO] [stdout] 739 ~ .unwrap(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> app/src/main.rs:744:45 [INFO] [stdout] | [INFO] [stdout] 744 | / ... &urls[current] [INFO] [stdout] 745 | | ... .get("url") [INFO] [stdout] 746 | | ... .and_then(Value::as_str) [INFO] [stdout] 747 | | ... .unwrap(), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 744 ~ urls[current] [INFO] [stdout] 745 + .get("url") [INFO] [stdout] 746 + .and_then(Value::as_str) [INFO] [stdout] 747 ~ .unwrap(), [INFO] [stdout] | [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] --> app/src/main.rs:785:17 [INFO] [stdout] | [INFO] [stdout] 785 | / match fs::remove_file(furl) { [INFO] [stdout] 786 | | Ok(_) => {} [INFO] [stdout] 787 | | Err(_) => {} [INFO] [stdout] 788 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(_) = fs::remove_file(furl) {}` [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: length comparison to zero [INFO] [stdout] --> app/src/main.rs:62:24 [INFO] [stdout] | [INFO] [stdout] 62 | if *current > 0 && urls.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!urls.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | / match mpv.command("seek", &["0", "absolute"]) { [INFO] [stdout] 100 | | Ok(_) => {} [INFO] [stdout] 101 | | Err(_) => {} [INFO] [stdout] 102 | | } [INFO] [stdout] | |_________^ help: try: `if let Ok(_) = mpv.command("seek", &["0", "absolute"]) {}` [INFO] [stdout] | [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] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `bitrate` after checking its variant with `is_none` [INFO] [stdout] --> app/src/main.rs:379:47 [INFO] [stdout] | [INFO] [stdout] 378 | ... if !bitrate.is_none() { [INFO] [stdout] | ----------------- the check is happening here [INFO] [stdout] 379 | ... app.bitrate = bitrate.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `bitrate` after checking its variant with `is_err` [INFO] [stdout] --> app/src/main.rs:383:51 [INFO] [stdout] | [INFO] [stdout] 382 | ... if !bitrate.is_err() { [INFO] [stdout] | ---------------- the check is happening here [INFO] [stdout] 383 | ... app.bitrate = bitrate.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `bitrate` after checking its variant with `is_none` [INFO] [stdout] --> app/src/main.rs:451:47 [INFO] [stdout] | [INFO] [stdout] 450 | ... if !bitrate.is_none() { [INFO] [stdout] | ----------------- the check is happening here [INFO] [stdout] 451 | ... app.bitrate = bitrate.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `bitrate` after checking its variant with `is_err` [INFO] [stdout] --> app/src/main.rs:455:51 [INFO] [stdout] | [INFO] [stdout] 454 | ... if !bitrate.is_err() { [INFO] [stdout] | ---------------- the check is happening here [INFO] [stdout] 455 | ... app.bitrate = bitrate.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `url` after checking its variant with `is_none` [INFO] [stdout] --> app/src/main.rs:783:24 [INFO] [stdout] | [INFO] [stdout] 782 | if !url.is_none() { [INFO] [stdout] | ------------- the check is happening here [INFO] [stdout] 783 | let furl = url.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:378:32 [INFO] [stdout] | [INFO] [stdout] 378 | ... if !bitrate.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `bitrate.is_some()` [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 boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:382:36 [INFO] [stdout] | [INFO] [stdout] 382 | ... if !bitrate.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `bitrate.is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:450:32 [INFO] [stdout] | [INFO] [stdout] 450 | ... if !bitrate.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `bitrate.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:454:36 [INFO] [stdout] | [INFO] [stdout] 454 | ... if !bitrate.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `bitrate.is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> app/src/main.rs:782:12 [INFO] [stdout] | [INFO] [stdout] 782 | if !url.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `url.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: file opened with `create`, but `truncate` behavior not defined [INFO] [stdout] --> app/src/main.rs:214:10 [INFO] [stdout] | [INFO] [stdout] 214 | .create(true) [INFO] [stdout] | ^^^^^^^^^^^^- help: add: `.truncate(true)` [INFO] [stdout] | [INFO] [stdout] = help: if you intend to overwrite an existing file entirely, call `.truncate(true)` [INFO] [stdout] = help: if you instead know that you may want to keep some parts of the old file, call `.truncate(false)` [INFO] [stdout] = help: alternatively, use `.append(true)` to append to the file instead of overwriting it [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_open_options [INFO] [stdout] = note: `#[warn(clippy::suspicious_open_options)]` on by default [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] --> app/src/main.rs:262:17 [INFO] [stdout] | [INFO] [stdout] 262 | / match mpv2.get_property::("duration") { [INFO] [stdout] 263 | | Ok(e) => dura = e, [INFO] [stdout] 264 | | Err(_) => {} [INFO] [stdout] 265 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(e) = mpv2.get_property::("duration") { dura = e }` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:266:17 [INFO] [stdout] | [INFO] [stdout] 266 | / match mpv2.get_property::("time-pos") { [INFO] [stdout] 267 | | Ok(e) => tim = e, [INFO] [stdout] 268 | | Err(_) => {} [INFO] [stdout] 269 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(e) = mpv2.get_property::("time-pos") { tim = e }` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:283:17 [INFO] [stdout] | [INFO] [stdout] 283 | / match mpv.get_property::("duration") { [INFO] [stdout] 284 | | Ok(e) => dura = e, [INFO] [stdout] 285 | | Err(_) => {} [INFO] [stdout] 286 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(e) = mpv.get_property::("duration") { dura = e }` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:287:17 [INFO] [stdout] | [INFO] [stdout] 287 | / match mpv.get_property::("time-pos") { [INFO] [stdout] 288 | | Ok(e) => tim = e, [INFO] [stdout] 289 | | Err(_) => {} [INFO] [stdout] 290 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(e) = mpv.get_property::("time-pos") { tim = e }` [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 `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:304:9 [INFO] [stdout] | [INFO] [stdout] 304 | / if !IS_RUNNING.load(Ordering::SeqCst) && current + 1 == urls.len() { [INFO] [stdout] 305 | | if urls.len() > 1 { [INFO] [stdout] 306 | | spawn_recommendation_worker(urls.last().unwrap().to_string(), tx.clone()); [INFO] [stdout] 307 | | } [INFO] [stdout] 308 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 304 ~ if !IS_RUNNING.load(Ordering::SeqCst) && current + 1 == urls.len() [INFO] [stdout] 305 ~ && urls.len() > 1 { [INFO] [stdout] 306 | spawn_recommendation_worker(urls.last().unwrap().to_string(), tx.clone()); [INFO] [stdout] 307 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:309:9 [INFO] [stdout] | [INFO] [stdout] 309 | / if urls.len() > current + 1 { [INFO] [stdout] 310 | | if !check_song(urls[current + 1].get("id").and_then(Value::as_str).unwrap()) [INFO] [stdout] 311 | | && !urls[current + 1] [INFO] [stdout] 312 | | .get("url") [INFO] [stdout] ... | [INFO] [stdout] 335 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 309 ~ if urls.len() > current + 1 [INFO] [stdout] 310 ~ && !check_song(urls[current + 1].get("id").and_then(Value::as_str).unwrap()) [INFO] [stdout] 311 | && !urls[current + 1] [INFO] [stdout] ... [INFO] [stdout] 333 | } [INFO] [stdout] 334 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:310:13 [INFO] [stdout] | [INFO] [stdout] 310 | / if !check_song(urls[current + 1].get("id").and_then(Value::as_str).unwrap()) [INFO] [stdout] 311 | | && !urls[current + 1] [INFO] [stdout] 312 | | .get("url") [INFO] [stdout] 313 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 334 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 315 ~ .starts_with("/") [INFO] [stdout] 316 ~ && save { [INFO] [stdout] 317 | if !IS_CACHING.load(Ordering::SeqCst) { [INFO] [stdout] ... [INFO] [stdout] 331 | } [INFO] [stdout] 332 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:317:17 [INFO] [stdout] | [INFO] [stdout] 317 | / if save { [INFO] [stdout] 318 | | if !IS_CACHING.load(Ordering::SeqCst) { [INFO] [stdout] 319 | | if let Ok(data) = cache_recv.try_recv() { [INFO] [stdout] 320 | | urls[data.index]["url"] = json!(data.path); [INFO] [stdout] ... | [INFO] [stdout] 333 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 317 ~ if save [INFO] [stdout] 318 ~ && !IS_CACHING.load(Ordering::SeqCst) { [INFO] [stdout] 319 | if let Ok(data) = cache_recv.try_recv() { [INFO] [stdout] ... [INFO] [stdout] 331 | } [INFO] [stdout] 332 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `if let` [INFO] [stdout] --> app/src/main.rs:338:17 [INFO] [stdout] | [INFO] [stdout] 338 | / match event { [INFO] [stdout] 339 | | Ok(e) => match e { [INFO] [stdout] 340 | | eve::PropertyChange { [INFO] [stdout] 341 | | change: PropertyData::Double(f), [INFO] [stdout] ... | [INFO] [stdout] 405 | | _ => {} [INFO] [stdout] 406 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> app/src/main.rs:337:25 [INFO] [stdout] | [INFO] [stdout] 337 | if let Some(event) = mpv.wait_event(0.05) { [INFO] [stdout] | ^^^^^ replace this binding [INFO] [stdout] 338 | match event { [INFO] [stdout] 339 | Ok(e) => match e { [INFO] [stdout] | ^^^^^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [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] --> app/src/main.rs:338:17 [INFO] [stdout] | [INFO] [stdout] 338 | / match event { [INFO] [stdout] 339 | | Ok(e) => match e { [INFO] [stdout] 340 | | eve::PropertyChange { [INFO] [stdout] 341 | | change: PropertyData::Double(f), [INFO] [stdout] ... | [INFO] [stdout] 405 | | _ => {} [INFO] [stdout] 406 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 338 ~ if let Ok(e) = event { match e { [INFO] [stdout] 339 + eve::PropertyChange { [INFO] [stdout] 340 + change: PropertyData::Double(f), [INFO] [stdout] 341 + reply_userdata: 1, [INFO] [stdout] 342 + .. [INFO] [stdout] 343 + } => { [INFO] [stdout] 344 + dura = f; [INFO] [stdout] 345 + app.dur = f.round() as i64; [INFO] [stdout] 346 + } [INFO] [stdout] 347 + eve::PropertyChange { [INFO] [stdout] 348 + change: PropertyData::Double(f), [INFO] [stdout] 349 + reply_userdata: 3, [INFO] [stdout] 350 + .. [INFO] [stdout] 351 + } => { [INFO] [stdout] 352 + tim = f; [INFO] [stdout] 353 + app.cur_time = f.round() as i64; [INFO] [stdout] 354 + } [INFO] [stdout] 355 + eve::PropertyChange { [INFO] [stdout] 356 + name: _, [INFO] [stdout] 357 + change: PropertyData::Str(e), [INFO] [stdout] 358 + reply_userdata: 4, [INFO] [stdout] 359 + } => { [INFO] [stdout] 360 + let newvec = serde_json::from_str::>(e).unwrap(); [INFO] [stdout] 361 + if newvec.is_empty() { [INFO] [stdout] 362 + continue; [INFO] [stdout] 363 + } [INFO] [stdout] 364 + let json = newvec.get(0).unwrap(); [INFO] [stdout] 365 + app.channel_count = [INFO] [stdout] 366 + json.get("audio-channels").and_then(Value::as_i64).unwrap(); [INFO] [stdout] 367 + app.sample_rate = json [INFO] [stdout] 368 + .get("demux-samplerate") [INFO] [stdout] 369 + .and_then(Value::as_i64) [INFO] [stdout] 370 + .unwrap(); [INFO] [stdout] 371 + app.track_format = json [INFO] [stdout] 372 + .get("codec") [INFO] [stdout] 373 + .and_then(Value::as_str) [INFO] [stdout] 374 + .unwrap() [INFO] [stdout] 375 + .to_uppercase(); [INFO] [stdout] 376 + let bitrate = json.get("demux-bitrate").and_then(Value::as_i64); [INFO] [stdout] 377 + if !bitrate.is_none() { [INFO] [stdout] 378 + app.bitrate = bitrate.unwrap() [INFO] [stdout] 379 + } else { [INFO] [stdout] 380 + let bitrate = mpv.get_property::("audio-bitrate"); [INFO] [stdout] 381 + if !bitrate.is_err() { [INFO] [stdout] 382 + app.bitrate = bitrate.unwrap(); [INFO] [stdout] 383 + } else { [INFO] [stdout] 384 + let format = json.get("format-name").and_then(Value::as_str); [INFO] [stdout] 385 + if format.is_none() { [INFO] [stdout] 386 + app.bitrate = 0; [INFO] [stdout] 387 + continue; [INFO] [stdout] 388 + } [INFO] [stdout] 389 + if qual == "HIGH" { [INFO] [stdout] 390 + app.bitrate = 320; [INFO] [stdout] 391 + } else if qual == "LOW" { [INFO] [stdout] 392 + app.bitrate = 96; [INFO] [stdout] 393 + } else { [INFO] [stdout] 394 + let form = format.unwrap(); [INFO] [stdout] 395 + app.bitrate = app.sample_rate [INFO] [stdout] 396 + * app.channel_count [INFO] [stdout] 397 + * if form == "s16" { 16 } else { 24 } [INFO] [stdout] 398 + } [INFO] [stdout] 399 + } [INFO] [stdout] 400 + } [INFO] [stdout] 401 + } [INFO] [stdout] 402 + _ => {} [INFO] [stdout] 403 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `newvec.get(0)` [INFO] [stdout] --> app/src/main.rs:365:40 [INFO] [stdout] | [INFO] [stdout] 365 | ... let json = newvec.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `newvec.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: this `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:408:16 [INFO] [stdout] | [INFO] [stdout] 408 | } else if player_num == 2 { [INFO] [stdout] | ________________^ [INFO] [stdout] 409 | | if let Some(event) = mpv2.wait_event(0.05) { [INFO] [stdout] 410 | | match event { [INFO] [stdout] 411 | | Ok(e) => match e { [INFO] [stdout] ... | [INFO] [stdout] 480 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 408 ~ } else if player_num == 2 [INFO] [stdout] 409 ~ && let Some(event) = mpv2.wait_event(0.05) { [INFO] [stdout] 410 | match event { [INFO] [stdout] ... [INFO] [stdout] 478 | } [INFO] [stdout] 479 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `if let` [INFO] [stdout] --> app/src/main.rs:410:17 [INFO] [stdout] | [INFO] [stdout] 410 | / match event { [INFO] [stdout] 411 | | Ok(e) => match e { [INFO] [stdout] 412 | | eve::PropertyChange { [INFO] [stdout] 413 | | change: PropertyData::Double(f), [INFO] [stdout] ... | [INFO] [stdout] 477 | | _ => {} [INFO] [stdout] 478 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> app/src/main.rs:409:25 [INFO] [stdout] | [INFO] [stdout] 409 | if let Some(event) = mpv2.wait_event(0.05) { [INFO] [stdout] | ^^^^^ replace this binding [INFO] [stdout] 410 | match event { [INFO] [stdout] 411 | Ok(e) => match e { [INFO] [stdout] | ^^^^^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [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] --> app/src/main.rs:410:17 [INFO] [stdout] | [INFO] [stdout] 410 | / match event { [INFO] [stdout] 411 | | Ok(e) => match e { [INFO] [stdout] 412 | | eve::PropertyChange { [INFO] [stdout] 413 | | change: PropertyData::Double(f), [INFO] [stdout] ... | [INFO] [stdout] 477 | | _ => {} [INFO] [stdout] 478 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 410 ~ if let Ok(e) = event { match e { [INFO] [stdout] 411 + eve::PropertyChange { [INFO] [stdout] 412 + change: PropertyData::Double(f), [INFO] [stdout] 413 + reply_userdata: 1, [INFO] [stdout] 414 + .. [INFO] [stdout] 415 + } => { [INFO] [stdout] 416 + dura = f; [INFO] [stdout] 417 + app.dur = f.round() as i64; [INFO] [stdout] 418 + } [INFO] [stdout] 419 + eve::PropertyChange { [INFO] [stdout] 420 + change: PropertyData::Double(f), [INFO] [stdout] 421 + reply_userdata: 3, [INFO] [stdout] 422 + .. [INFO] [stdout] 423 + } => { [INFO] [stdout] 424 + tim = f; [INFO] [stdout] 425 + app.cur_time = f.round() as i64; [INFO] [stdout] 426 + } [INFO] [stdout] 427 + eve::PropertyChange { [INFO] [stdout] 428 + name: _, [INFO] [stdout] 429 + change: PropertyData::Str(e), [INFO] [stdout] 430 + reply_userdata: 4, [INFO] [stdout] 431 + } => { [INFO] [stdout] 432 + let newvec = serde_json::from_str::>(e).unwrap(); [INFO] [stdout] 433 + if newvec.is_empty() { [INFO] [stdout] 434 + continue; [INFO] [stdout] 435 + } [INFO] [stdout] 436 + let json = newvec.get(0).unwrap(); [INFO] [stdout] 437 + app.channel_count = [INFO] [stdout] 438 + json.get("audio-channels").and_then(Value::as_i64).unwrap(); [INFO] [stdout] 439 + app.sample_rate = json [INFO] [stdout] 440 + .get("demux-samplerate") [INFO] [stdout] 441 + .and_then(Value::as_i64) [INFO] [stdout] 442 + .unwrap(); [INFO] [stdout] 443 + app.track_format = json [INFO] [stdout] 444 + .get("codec") [INFO] [stdout] 445 + .and_then(Value::as_str) [INFO] [stdout] 446 + .unwrap() [INFO] [stdout] 447 + .to_uppercase(); [INFO] [stdout] 448 + let bitrate = json.get("demux-bitrate").and_then(Value::as_i64); [INFO] [stdout] 449 + if !bitrate.is_none() { [INFO] [stdout] 450 + app.bitrate = bitrate.unwrap() [INFO] [stdout] 451 + } else { [INFO] [stdout] 452 + let bitrate = mpv2.get_property::("audio-bitrate"); [INFO] [stdout] 453 + if !bitrate.is_err() { [INFO] [stdout] 454 + app.bitrate = bitrate.unwrap(); [INFO] [stdout] 455 + } else { [INFO] [stdout] 456 + let format = json.get("format-name").and_then(Value::as_str); [INFO] [stdout] 457 + if format.is_none() { [INFO] [stdout] 458 + app.bitrate = 0; [INFO] [stdout] 459 + continue; [INFO] [stdout] 460 + } [INFO] [stdout] 461 + if qual == "HIGH" { [INFO] [stdout] 462 + app.bitrate = 320; [INFO] [stdout] 463 + } else if qual == "LOW" { [INFO] [stdout] 464 + app.bitrate = 96; [INFO] [stdout] 465 + } else { [INFO] [stdout] 466 + let form = format.unwrap(); [INFO] [stdout] 467 + app.bitrate = app.sample_rate [INFO] [stdout] 468 + * app.channel_count [INFO] [stdout] 469 + * if form == "s16" { 16 } else { 24 } [INFO] [stdout] 470 + } [INFO] [stdout] 471 + } [INFO] [stdout] 472 + } [INFO] [stdout] 473 + } [INFO] [stdout] 474 + _ => {} [INFO] [stdout] 475 + } } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `newvec.get(0)` [INFO] [stdout] --> app/src/main.rs:437:40 [INFO] [stdout] | [INFO] [stdout] 437 | ... let json = newvec.get(0).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `newvec.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 `if` statement can be collapsed [INFO] [stdout] --> app/src/main.rs:481:9 [INFO] [stdout] | [INFO] [stdout] 481 | / if mpv.get_property::("idle-active").unwrap() [INFO] [stdout] 482 | | && mpv2.get_property::("idle-active").unwrap() [INFO] [stdout] 483 | | && urls.len() >= current + 1 [INFO] [stdout] ... | [INFO] [stdout] 496 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 483 ~ && urls.len() >= current + 1 [INFO] [stdout] 484 ~ && last_mode_switch.elapsed() >= skip_every { [INFO] [stdout] 485 | app.cur_time = 0; [INFO] [stdout] ... [INFO] [stdout] 493 | _auto_started = true; [INFO] [stdout] 494 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `unwrap()` on `Some` value [INFO] [stdout] --> app/src/main.rs:528:23 [INFO] [stdout] | [INFO] [stdout] 528 | match event.unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: remove the `Some` and `unwrap()` [INFO] [stdout] --> app/src/main.rs:526:29 [INFO] [stdout] | [INFO] [stdout] 526 | let event = Some(crossterm::event::read().unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_literal_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_literal_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> app/src/main.rs:587:33 [INFO] [stdout] | [INFO] [stdout] 587 | / ... if !mpv.get_property::("idle-active").unwrap() [INFO] [stdout] 588 | | ... || !mpv2.get_property::("idle-active").unwrap() [INFO] [stdout] 589 | | ... { [INFO] [stdout] 590 | | ... if player_num == 1 { [INFO] [stdout] ... | [INFO] [stdout] 605 | | ... app.dirty = true; [INFO] [stdout] 606 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 586 ~ KeyCode::Char('f') [INFO] [stdout] 587 ~ if (!mpv.get_property::("idle-active").unwrap() [INFO] [stdout] 588 ~ || !mpv2.get_property::("idle-active").unwrap()) [INFO] [stdout] 589 ~ => { [INFO] [stdout] 590 | if player_num == 1 { [INFO] [stdout] ... [INFO] [stdout] 605 | app.dirty = true; [INFO] [stdout] 606 ~ } [INFO] [stdout] | [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] --> app/src/main.rs:591:41 [INFO] [stdout] | [INFO] [stdout] 591 | / ... match mpv.command("seek", &["5", "relative"]) { [INFO] [stdout] 592 | | ... Ok(()) => {} [INFO] [stdout] 593 | | ... _ => {} [INFO] [stdout] 594 | | ... } [INFO] [stdout] | |_______________________^ help: try: `if let Ok(()) = mpv.command("seek", &["5", "relative"]) {}` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:596:41 [INFO] [stdout] | [INFO] [stdout] 596 | / ... match mpv2.command("seek", &["5", "relative"]) { [INFO] [stdout] 597 | | ... Ok(()) => {} [INFO] [stdout] 598 | | ... _ => {} [INFO] [stdout] 599 | | ... } [INFO] [stdout] | |_______________________^ help: try: `if let Ok(()) = mpv2.command("seek", &["5", "relative"]) {}` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:613:41 [INFO] [stdout] | [INFO] [stdout] 613 | / ... match mpv.command("seek", &["-5", "relative"]) { [INFO] [stdout] 614 | | ... Ok(()) => {} [INFO] [stdout] 615 | | ... _ => {} [INFO] [stdout] 616 | | ... } [INFO] [stdout] | |_______________________^ help: try: `if let Ok(()) = mpv.command("seek", &["-5", "relative"]) {}` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> app/src/main.rs:618:41 [INFO] [stdout] | [INFO] [stdout] 618 | / ... match mpv2.command("seek", &["-5", "relative"]) { [INFO] [stdout] 619 | | ... Ok(()) => {} [INFO] [stdout] 620 | | ... _ => {} [INFO] [stdout] 621 | | ... } [INFO] [stdout] | |_______________________^ help: try: `if let Ok(()) = mpv2.command("seek", &["-5", "relative"]) {}` [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 `if` can be collapsed into the outer `match` [INFO] [stdout] --> app/src/main.rs:688:33 [INFO] [stdout] | [INFO] [stdout] 688 | / ... if app.selected > 0 { [INFO] [stdout] 689 | | ... app.selected -= 1; [INFO] [stdout] 690 | | ... app.dirty = true; [INFO] [stdout] 691 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 687 ~ KeyCode::Up [INFO] [stdout] 688 ~ if app.selected > 0 => { [INFO] [stdout] 689 | app.selected -= 1; [INFO] [stdout] 690 | app.dirty = true; [INFO] [stdout] 691 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> app/src/main.rs:694:33 [INFO] [stdout] | [INFO] [stdout] 694 | / ... if app.selected + 1 < app.search_results.len() { [INFO] [stdout] 695 | | ... app.selected += 1; [INFO] [stdout] 696 | | ... app.dirty = true; [INFO] [stdout] 697 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 693 ~ KeyCode::Down [INFO] [stdout] 694 ~ if app.selected + 1 < app.search_results.len() => { [INFO] [stdout] 695 | app.selected += 1; [INFO] [stdout] 696 | app.dirty = true; [INFO] [stdout] 697 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> app/src/main.rs:736:45 [INFO] [stdout] | [INFO] [stdout] 736 | / ... &urls[current] [INFO] [stdout] 737 | | ... .get("url") [INFO] [stdout] 738 | | ... .and_then(Value::as_str) [INFO] [stdout] 739 | | ... .unwrap(), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 736 ~ urls[current] [INFO] [stdout] 737 + .get("url") [INFO] [stdout] 738 + .and_then(Value::as_str) [INFO] [stdout] 739 ~ .unwrap(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> app/src/main.rs:744:45 [INFO] [stdout] | [INFO] [stdout] 744 | / ... &urls[current] [INFO] [stdout] 745 | | ... .get("url") [INFO] [stdout] 746 | | ... .and_then(Value::as_str) [INFO] [stdout] 747 | | ... .unwrap(), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 744 ~ urls[current] [INFO] [stdout] 745 + .get("url") [INFO] [stdout] 746 + .and_then(Value::as_str) [INFO] [stdout] 747 ~ .unwrap(), [INFO] [stdout] | [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] --> app/src/main.rs:785:17 [INFO] [stdout] | [INFO] [stdout] 785 | / match fs::remove_file(furl) { [INFO] [stdout] 786 | | Ok(_) => {} [INFO] [stdout] 787 | | Err(_) => {} [INFO] [stdout] 788 | | } [INFO] [stdout] | |_________________^ help: try: `if let Ok(_) = fs::remove_file(furl) {}` [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 1m 07s [INFO] running `Command { std: "docker" "inspect" "56c0d13137c55bcbee90bd62fea61e74c2d4e0ae654e1202350920290565889c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "56c0d13137c55bcbee90bd62fea61e74c2d4e0ae654e1202350920290565889c", kill_on_drop: false }` [INFO] [stdout] 56c0d13137c55bcbee90bd62fea61e74c2d4e0ae654e1202350920290565889c