[INFO] cloning repository https://github.com/ChidoryLP/cargo-skyline [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ChidoryLP/cargo-skyline" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FChidoryLP%2Fcargo-skyline", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FChidoryLP%2Fcargo-skyline'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 024c2b39dc4b1868fc883290ee07de8b9824cdc5 [INFO] linting ChidoryLP/cargo-skyline against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FChidoryLP%2Fcargo-skyline" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/ChidoryLP/cargo-skyline [INFO] finished tweaking git repo https://github.com/ChidoryLP/cargo-skyline [INFO] tweaked toml for git repo https://github.com/ChidoryLP/cargo-skyline written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/ChidoryLP/cargo-skyline 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/ChidoryLP/cargo-skyline 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 hermit-abi v0.1.10 [INFO] [stderr] Downloaded tokio-macros v1.2.0 [INFO] [stderr] Downloaded podio v0.1.6 [INFO] [stderr] Downloaded miniz_oxide v0.3.6 [INFO] [stderr] Downloaded block-modes v0.2.0 [INFO] [stderr] Downloaded winapi-util v0.1.4 [INFO] [stderr] Downloaded rust-ini v0.13.0 [INFO] [stderr] Downloaded dbl v0.2.1 [INFO] [stderr] Downloaded byteorder v0.5.3 [INFO] [stderr] Downloaded flate2 v1.0.14 [INFO] [stderr] Downloaded cargo_metadata v0.10.0 [INFO] [stderr] Downloaded indicatif v0.16.0 [INFO] [stderr] Downloaded arc-swap v1.5.0 [INFO] [stderr] Downloaded hyperx v1.4.0 [INFO] [stderr] Downloaded error-chain v0.12.2 [INFO] [stderr] Downloaded snafu v0.7.0 [INFO] [stderr] Downloaded octocrab v0.15.4 [INFO] [stderr] Downloaded hyper v0.14.5 [INFO] [stderr] Downloaded bumpalo v3.6.1 [INFO] [stderr] Downloaded reqwest v0.11.3 [INFO] [stderr] Downloaded indexmap v1.6.2 [INFO] [stderr] Downloaded webpki v0.21.2 [INFO] [stderr] Downloaded structopt v0.3.13 [INFO] [stderr] Downloaded httparse v1.3.6 [INFO] [stderr] Downloaded structopt-derive v0.4.6 [INFO] [stderr] Downloaded lz4-sys v1.8.3 [INFO] [stderr] Downloaded linkle v0.2.10 [INFO] [stderr] Downloaded snafu-derive v0.7.0 [INFO] [stderr] Downloaded bit_field v0.10.0 [INFO] [stderr] Downloaded cmac v0.2.0 [INFO] [stderr] Downloaded derive_more v0.13.0 [INFO] [stderr] Downloaded elf v0.0.10 [INFO] [stderr] Downloaded tokio v1.6.0 [INFO] [stderr] Downloaded serde_path_to_error v0.1.4 [INFO] [stderr] Downloaded owo-colors v3.1.0 [INFO] [stderr] Downloaded ipnet v2.3.0 [INFO] [stderr] Downloaded lz4 v1.23.1 [INFO] [stderr] Downloaded zip v0.5.5 [INFO] [stderr] Downloaded blz-nx v1.0.1 [INFO] [stderr] Downloaded mio v0.7.11 [INFO] [stderr] Downloaded backtrace-sys v0.1.35 [INFO] [stderr] Downloaded bzip2-sys v0.1.8+1.0.8 [INFO] [stderr] Downloaded ring v0.16.12 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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] 08ae47c78841044a14269ec1d29c8fc644f095ac0d07c012f247084648ece0be [INFO] running `Command { std: "docker" "start" "-a" "08ae47c78841044a14269ec1d29c8fc644f095ac0d07c012f247084648ece0be", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "08ae47c78841044a14269ec1d29c8fc644f095ac0d07c012f247084648ece0be", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "08ae47c78841044a14269ec1d29c8fc644f095ac0d07c012f247084648ece0be", kill_on_drop: false }` [INFO] [stdout] 08ae47c78841044a14269ec1d29c8fc644f095ac0d07c012f247084648ece0be [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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] 0238fe113eeecf7052e5699111b53c9014b82400ef34ba231c936d94fda1845c [INFO] running `Command { std: "docker" "start" "-a" "0238fe113eeecf7052e5699111b53c9014b82400ef34ba231c936d94fda1845c", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.94 [INFO] [stderr] Compiling proc-macro2 v1.0.26 [INFO] [stderr] Compiling syn v1.0.72 [INFO] [stderr] Compiling cc v1.0.50 [INFO] [stderr] Compiling serde_derive v1.0.126 [INFO] [stderr] Compiling serde v1.0.126 [INFO] [stderr] Compiling version_check v0.9.1 [INFO] [stderr] Compiling ryu v1.0.3 [INFO] [stderr] Compiling serde_json v1.0.64 [INFO] [stderr] Compiling memchr v2.4.0 [INFO] [stderr] Checking pin-project-lite v0.2.6 [INFO] [stderr] Checking bytes v1.0.1 [INFO] [stderr] Compiling futures-core v0.3.15 [INFO] [stderr] Compiling num-traits v0.2.11 [INFO] [stderr] Compiling tokio v1.6.0 [INFO] [stderr] Compiling futures-macro v0.3.15 [INFO] [stderr] Compiling futures-task v0.3.15 [INFO] [stderr] Compiling proc-macro-nested v0.1.7 [INFO] [stderr] Compiling indexmap v1.6.2 [INFO] [stderr] Compiling num-integer v0.1.44 [INFO] [stderr] Compiling futures-util v0.3.15 [INFO] [stderr] Compiling itoa v0.4.5 [INFO] [stderr] Checking http v0.2.6 [INFO] [stderr] Checking regex-syntax v0.6.25 [INFO] [stderr] Checking tracing-core v0.1.18 [INFO] [stderr] Compiling remove_dir_all v0.5.2 [INFO] [stderr] Checking futures-sink v0.3.15 [INFO] [stderr] Compiling error-chain v0.12.2 [INFO] [stderr] Compiling futures-channel v0.3.15 [INFO] [stderr] Compiling httparse v1.3.6 [INFO] [stderr] Checking hashbrown v0.9.1 [INFO] [stderr] Checking slab v0.4.3 [INFO] [stderr] Checking tracing v0.1.26 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.2 [INFO] [stderr] Compiling heck v0.3.3 [INFO] [stderr] Checking block-cipher-trait v0.6.2 [INFO] [stderr] Compiling num-bigint v0.2.6 [INFO] [stderr] Checking rustc-demangle v0.1.16 [INFO] [stderr] Checking httpdate v0.3.2 [INFO] [stderr] Checking want v0.3.0 [INFO] [stderr] Compiling proc-macro-error v1.0.2 [INFO] [stderr] Compiling unicase v2.6.0 [INFO] [stderr] Checking form_urlencoded v1.0.1 [INFO] [stderr] Compiling quote v1.0.3 [INFO] [stderr] Compiling doc-comment v0.3.3 [INFO] [stderr] Compiling failure_derive v0.1.7 [INFO] [stderr] Compiling syn v0.15.44 [INFO] [stderr] Compiling rand v0.4.6 [INFO] [stderr] Compiling encoding_rs v0.8.28 [INFO] [stderr] Checking num_cpus v1.13.1 [INFO] [stderr] Checking mio v0.7.11 [INFO] [stderr] Checking getrandom v0.1.14 [INFO] [stderr] Checking time v0.1.43 [INFO] [stderr] Checking socket2 v0.4.0 [INFO] [stderr] Checking rand_core v0.5.1 [INFO] [stderr] Checking terminal_size v0.1.17 [INFO] [stderr] Checking rand_chacha v0.2.2 [INFO] [stderr] Checking generic-array v0.9.0 [INFO] [stderr] Checking subtle v1.0.0 [INFO] [stderr] Checking once_cell v1.7.2 [INFO] [stderr] Compiling async-trait v0.1.50 [INFO] [stderr] Compiling hyperx v1.4.0 [INFO] [stderr] Checking adler32 v1.0.4 [INFO] [stderr] Checking byte-tools v0.3.1 [INFO] [stderr] Checking opaque-debug v0.2.3 [INFO] [stderr] Checking byte-tools v0.2.0 [INFO] [stderr] Checking miniz_oxide v0.3.6 [INFO] [stderr] Checking block-padding v0.1.5 [INFO] [stderr] Checking rand v0.7.3 [INFO] [stderr] Checking digest v0.7.6 [INFO] [stderr] Checking aes-soft v0.3.3 [INFO] [stderr] Checking block-buffer v0.3.3 [INFO] [stderr] Checking crypto-mac v0.7.0 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Compiling backtrace-sys v0.1.35 [INFO] [stderr] Compiling ring v0.16.12 [INFO] [stderr] Compiling lz4-sys v1.8.3 [INFO] [stderr] Compiling bzip2-sys v0.1.8+1.0.8 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking regex v1.5.4 [INFO] [stderr] Checking dbl v0.2.1 [INFO] [stderr] Checking fake-simd v0.1.2 [INFO] [stderr] Compiling tempdir v0.3.7 [INFO] [stderr] Checking ipnet v2.3.0 [INFO] [stderr] Checking byteorder v0.5.3 [INFO] [stderr] Checking language-tags v0.3.2 [INFO] [stderr] Checking semver-parser v0.7.0 [INFO] [stderr] Checking flate2 v1.0.14 [INFO] [stderr] Checking elf v0.0.10 [INFO] [stderr] Checking clap v2.33.0 [INFO] [stderr] Checking tempfile v3.1.0 [INFO] [stderr] Checking cmac v0.2.0 [INFO] [stderr] Checking sha2 v0.7.1 [INFO] [stderr] Checking pem v0.8.3 [INFO] [stderr] Checking console v0.14.1 [INFO] [stderr] Checking aes v0.3.2 [INFO] [stderr] Checking block-modes v0.2.0 [INFO] [stderr] Checking http-body v0.4.2 [INFO] [stderr] Checking dirs-sys v0.3.4 [INFO] [stderr] Checking dirs v1.0.5 [INFO] [stderr] Checking bzip2 v0.3.3 [INFO] [stderr] Checking blz-nx v1.0.1 [INFO] [stderr] Compiling cargo-skyline v2.2.2 (/opt/rustwide/workdir) [INFO] [stderr] Checking arc-swap v1.5.0 [INFO] [stderr] Checking podio v0.1.6 [INFO] [stderr] Checking bit_field v0.10.0 [INFO] [stderr] Checking zeroize v1.3.0 [INFO] [stderr] Checking rust-ini v0.13.0 [INFO] [stderr] Checking dirs v2.0.2 [INFO] [stderr] Checking glob v0.3.0 [INFO] [stderr] Checking indicatif v0.16.0 [INFO] [stderr] Checking owo-colors v3.1.0 [INFO] [stderr] Checking zip v0.5.5 [INFO] [stderr] Checking dialoguer v0.8.0 [INFO] [stderr] Checking backtrace v0.3.46 [INFO] [stderr] Compiling derive_more v0.13.0 [INFO] [stderr] Checking webpki v0.21.2 [INFO] [stderr] Checking sct v0.6.0 [INFO] [stderr] Compiling syn-mid v0.5.0 [INFO] [stderr] Compiling synstructure v0.12.3 [INFO] [stderr] Checking rustls v0.19.1 [INFO] [stderr] Checking webpki-roots v0.21.1 [INFO] [stderr] Compiling tokio-macros v1.2.0 [INFO] [stderr] Compiling pin-project-internal v1.0.7 [INFO] [stderr] Compiling snafu-derive v0.7.0 [INFO] [stderr] Checking failure v0.1.7 [INFO] [stderr] Compiling structopt-derive v0.4.6 [INFO] [stderr] Checking snafu v0.7.0 [INFO] [stderr] Checking pin-project v1.0.7 [INFO] [stderr] Checking structopt v0.3.13 [INFO] [stderr] Checking tokio-util v0.6.7 [INFO] [stderr] Checking tokio-rustls v0.22.0 [INFO] [stderr] Checking h2 v0.3.3 [INFO] [stderr] Checking hyper v0.14.5 [INFO] [stderr] Compiling semver v0.9.0 [INFO] [stderr] Checking chrono v0.4.19 [INFO] [stderr] Checking url v2.2.2 [INFO] [stderr] Checking serde_urlencoded v0.7.0 [INFO] [stderr] Checking serde_path_to_error v0.1.4 [INFO] [stderr] Checking simple_asn1 v0.4.1 [INFO] [stderr] Checking cargo_metadata v0.10.0 [INFO] [stderr] Checking jsonwebtoken v7.2.0 [INFO] [stderr] Compiling cargo_metadata v0.6.4 [INFO] [stderr] Compiling skeptic v0.13.4 [INFO] [stderr] Checking hyper-rustls v0.22.1 [INFO] [stderr] Checking reqwest v0.11.3 [INFO] [stderr] Compiling lz4 v1.23.1 [INFO] [stderr] Checking octocrab v0.15.4 [INFO] [stderr] Checking linkle v0.2.10 [INFO] [stdout] warning: use of deprecated function `cargo_metadata::parse_messages`: Use Message::parse_stream instead [INFO] [stdout] --> src/build.rs:115:41 [INFO] [stdout] | [INFO] [stdout] 115 | let last_artifact = cargo_metadata::parse_messages(command.stdout.as_mut().unwrap()) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `cargo_metadata::parse_messages`: Use Message::parse_stream instead [INFO] [stdout] --> src/build.rs:115:41 [INFO] [stdout] | [INFO] [stdout] 115 | let last_artifact = cargo_metadata::parse_messages(command.stdout.as_mut().unwrap()) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `main_npdm` is never read [INFO] [stdout] --> src/package.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct Exefs { [INFO] [stdout] | ----- field in this struct [INFO] [stdout] 12 | pub main_npdm: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/build.rs:70:8 [INFO] [stdout] | [INFO] [stdout] 70 | if !Command::new("rust-lld") [INFO] [stdout] | ________^ [INFO] [stdout] 71 | | .stdout(Stdio::null()) [INFO] [stdout] 72 | | .stderr(Stdio::null()) [INFO] [stdout] 73 | | .status() [INFO] [stdout] 74 | | .is_ok() [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 70 ~ if Command::new("rust-lld") [INFO] [stdout] 71 + .stdout(Stdio::null()) [INFO] [stdout] 72 + .stderr(Stdio::null()) [INFO] [stdout] 73 + .status().is_err() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: spawned process is not `wait()`ed on in all code paths [INFO] [stdout] --> src/build.rs:96:23 [INFO] [stdout] | [INFO] [stdout] 96 | let mut command = Command::new("cargo") [INFO] [stdout] | _______________________^ [INFO] [stdout] 97 | | .arg("+skyline") [INFO] [stdout] 98 | | .args(&[ [INFO] [stdout] 99 | | command.to_str(), [INFO] [stdout] ... | [INFO] [stdout] 112 | | .spawn() [INFO] [stdout] 113 | | .unwrap(); [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] note: no `wait()` call exists on the code path to this early return [INFO] [stdout] --> src/build.rs:117:50 [INFO] [stdout] | [INFO] [stdout] 117 | .map_err(|_| Error::FailParseCargoStream)? [INFO] [stdout] | ^ [INFO] [stdout] note: `wait()` call exists, but it is unreachable due to the early return [INFO] [stdout] --> src/build.rs:134:23 [INFO] [stdout] | [INFO] [stdout] 134 | let exit_status = command.wait().unwrap(); [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] = help: consider calling `.wait()` in all code paths [INFO] [stdout] = note: not doing so might leave behind zombie processes [INFO] [stdout] = note: see https://doc.rust-lang.org/stable/std/process/struct.Child.html#warning [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zombie_processes [INFO] [stdout] = note: `#[warn(clippy::zombie_processes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/build.rs:98:15 [INFO] [stdout] | [INFO] [stdout] 98 | .args(&[ [INFO] [stdout] | _______________^ [INFO] [stdout] 99 | | command.to_str(), [INFO] [stdout] 100 | | "--message-format=json-diagnostic-rendered-ansi", [INFO] [stdout] 101 | | "--color", [INFO] [stdout] ... | [INFO] [stdout] 104 | | "aarch64-skyline-switch", [INFO] [stdout] 105 | | ]) [INFO] [stdout] | |_________^ [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] help: change this to [INFO] [stdout] | [INFO] [stdout] 98 ~ .args([ [INFO] [stdout] 99 + command.to_str(), [INFO] [stdout] 100 + "--message-format=json-diagnostic-rendered-ansi", [INFO] [stdout] 101 + "--color", [INFO] [stdout] 102 + "always", [INFO] [stdout] 103 + "--target", [INFO] [stdout] 104 + "aarch64-skyline-switch", [INFO] [stdout] 105 ~ ]) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/build.rs:115:25 [INFO] [stdout] | [INFO] [stdout] 115 | let last_artifact = cargo_metadata::parse_messages(command.stdout.as_mut().unwrap()) [INFO] [stdout] | _________________________^ [INFO] [stdout] 116 | | .collect::, _>>() [INFO] [stdout] 117 | | .map_err(|_| Error::FailParseCargoStream)? [INFO] [stdout] 118 | | .into_iter() [INFO] [stdout] ... | [INFO] [stdout] 131 | | }) [INFO] [stdout] 132 | | .last(); [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 132 - .last(); [INFO] [stdout] 132 + .next_back(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/cargo_info.rs:55:14 [INFO] [stdout] | [INFO] [stdout] 55 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/cargo_info.rs:81:18 [INFO] [stdout] | [INFO] [stdout] 81 | let stdout = std::str::from_utf8(&output.stdout) [INFO] [stdout] | __________________^ [INFO] [stdout] 82 | | .unwrap() [INFO] [stdout] 83 | | .lines() [INFO] [stdout] 84 | | .find(|line| line.starts_with('{')) [INFO] [stdout] 85 | | .ok_or_else(|| cargo_metadata::Error::NoJson)?; [INFO] [stdout] | |_____________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 85 - .ok_or_else(|| cargo_metadata::Error::NoJson)?; [INFO] [stdout] 85 + .ok_or(cargo_metadata::Error::NoJson)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | DownloadError, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | ZipError, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | IoError(io::Error), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | CargoError(cargo_metadata::Error), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | GithubError, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/ftp.rs:43:47 [INFO] [stdout] | [INFO] [stdout] 43 | self.tcp.read_line(&mut line).map_err(|e| FtpError::Io(e))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `FtpError::Io` [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: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/ftp.rs:85:9 [INFO] [stdout] | [INFO] [stdout] 85 | write!(self.tcp.get_mut(), "{}\n", string)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] = note: `#[warn(clippy::write_with_newline)]` on by default [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 85 - write!(self.tcp.get_mut(), "{}\n", string)?; [INFO] [stdout] 85 + writeln!(self.tcp.get_mut(), "{}", string)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression returns a bool literal [INFO] [stdout] --> src/ftp.rs:181:12 [INFO] [stdout] | [INFO] [stdout] 181 | Ok(if channel.read(&mut [0; 2][..])? > 1 { [INFO] [stdout] | ____________^ [INFO] [stdout] 182 | | true [INFO] [stdout] 183 | | } else { [INFO] [stdout] 184 | | false [INFO] [stdout] 185 | | }) [INFO] [stdout] | |_________^ help: you can reduce it to: `channel.read(&mut [0; 2][..])? > 1` [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: the borrowed expression implements the required traits [INFO] [stdout] --> src/git_clone_wrappers.rs:18:15 [INFO] [stdout] | [INFO] [stdout] 18 | .args(&[ [INFO] [stdout] | _______________^ [INFO] [stdout] 19 | | "clone", [INFO] [stdout] 20 | | "-b", [INFO] [stdout] 21 | | &git_branch, [INFO] [stdout] ... | [INFO] [stdout] 24 | | &name, [INFO] [stdout] 25 | | ]) [INFO] [stdout] | |_________^ [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] help: change this to [INFO] [stdout] | [INFO] [stdout] 18 ~ .args([ [INFO] [stdout] 19 + "clone", [INFO] [stdout] 20 + "-b", [INFO] [stdout] 21 + &git_branch, [INFO] [stdout] 22 + "--single-branch", [INFO] [stdout] 23 + &git_url, [INFO] [stdout] 24 + &name, [INFO] [stdout] 25 ~ ]) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/git_clone_wrappers.rs:41:33 [INFO] [stdout] | [INFO] [stdout] 41 | let _ = fs::remove_file(&format!("{}/{}", name, ".github/workflows/rustdoc.yml")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `format!("{}/{}", name, ".github/workflows/rustdoc.yml")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/installer/temp_git.rs:16:19 [INFO] [stdout] | [INFO] [stdout] 16 | .args(&["clone", url, "tempdir_j93jfs3ff"]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["clone", url, "tempdir_j93jfs3ff"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/installer.rs:108:26 [INFO] [stdout] | [INFO] [stdout] 108 | let _ = client.mkdir(&get_game_path(&title_id)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `get_game_path(&title_id)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/installer.rs:160:9 [INFO] [stdout] | [INFO] [stdout] 160 | path.split('/').last().unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 160 - path.split('/').last().unwrap() [INFO] [stdout] 160 + path.split('/').next_back().unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/installer.rs:164:14 [INFO] [stdout] | [INFO] [stdout] 164 | .map(|x| x.to_str()) [INFO] [stdout] | ______________^ [INFO] [stdout] 165 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|x| x.to_str())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `path` after checking its variant with `is_some` [INFO] [stdout] --> src/installer.rs:258:40 [INFO] [stdout] | [INFO] [stdout] 257 | if path.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = path` [INFO] [stdout] 258 | println!("{}", client.ls(Some(&path.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: this expression borrows a value the compiler would automatically borrow [INFO] [stdout] --> src/installer.rs:277:28 [INFO] [stdout] | [INFO] [stdout] 277 | let filename_str = (&filename).as_ref().unwrap(); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `filename` [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: unnecessary use of `to_string` [INFO] [stdout] --> src/installer.rs:334:23 [INFO] [stdout] | [INFO] [stdout] 334 | std::fs::read(src_path.to_str().unwrap().to_string())?, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `src_path.to_str().unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] = note: `#[warn(clippy::unnecessary_to_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling .bytes() is very inefficient when data is not in memory [INFO] [stdout] --> src/package.rs:27:19 [INFO] [stdout] | [INFO] [stdout] 27 | let subsdk1 = zip [INFO] [stdout] | ___________________^ [INFO] [stdout] 28 | | .by_name("exefs/subsdk9")? [INFO] [stdout] 29 | | .bytes() [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: consider using `BufReader` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unbuffered_bytes [INFO] [stdout] = note: `#[warn(clippy::unbuffered_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling .bytes() is very inefficient when data is not in memory [INFO] [stdout] --> src/package.rs:31:21 [INFO] [stdout] | [INFO] [stdout] 31 | let main_npdm = zip [INFO] [stdout] | _____________________^ [INFO] [stdout] 32 | | .by_name("exefs/main.npdm")? [INFO] [stdout] 33 | | .bytes() [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: consider using `BufReader` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unbuffered_bytes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/package.rs:52:20 [INFO] [stdout] | [INFO] [stdout] 52 | let title_id = title_id [INFO] [stdout] | ____________________^ [INFO] [stdout] 53 | | .or_else(|| metadata.title_id.as_deref()) [INFO] [stdout] | |_________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `or` instead [INFO] [stdout] | [INFO] [stdout] 53 - .or_else(|| metadata.title_id.as_deref()) [INFO] [stdout] 53 + .or(metadata.title_id.as_deref()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/package.rs:79:18 [INFO] [stdout] | [INFO] [stdout] 79 | .map(|path| fs::read(path)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `fs::read` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/package.rs:82:62 [INFO] [stdout] | [INFO] [stdout] 82 | let generated_npdm = crate::installer::generate_npdm(&title_id); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `title_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/update_std.rs:65:49 [INFO] [stdout] | [INFO] [stdout] 65 | .find(|assert| assert.name.contains(&TARGET)) [INFO] [stdout] | ^^^^^^^ help: change this to: `TARGET` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/update_std.rs:134:15 [INFO] [stdout] | [INFO] [stdout] 134 | .args(&["toolchain", "link", name]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["toolchain", "link", name]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `main_npdm` is never read [INFO] [stdout] --> src/package.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct Exefs { [INFO] [stdout] | ----- field in this struct [INFO] [stdout] 12 | pub main_npdm: Vec, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/build.rs:70:8 [INFO] [stdout] | [INFO] [stdout] 70 | if !Command::new("rust-lld") [INFO] [stdout] | ________^ [INFO] [stdout] 71 | | .stdout(Stdio::null()) [INFO] [stdout] 72 | | .stderr(Stdio::null()) [INFO] [stdout] 73 | | .status() [INFO] [stdout] 74 | | .is_ok() [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 70 ~ if Command::new("rust-lld") [INFO] [stdout] 71 + .stdout(Stdio::null()) [INFO] [stdout] 72 + .stderr(Stdio::null()) [INFO] [stdout] 73 + .status().is_err() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: spawned process is not `wait()`ed on in all code paths [INFO] [stdout] --> src/build.rs:96:23 [INFO] [stdout] | [INFO] [stdout] 96 | let mut command = Command::new("cargo") [INFO] [stdout] | _______________________^ [INFO] [stdout] 97 | | .arg("+skyline") [INFO] [stdout] 98 | | .args(&[ [INFO] [stdout] 99 | | command.to_str(), [INFO] [stdout] ... | [INFO] [stdout] 112 | | .spawn() [INFO] [stdout] 113 | | .unwrap(); [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] note: no `wait()` call exists on the code path to this early return [INFO] [stdout] --> src/build.rs:117:50 [INFO] [stdout] | [INFO] [stdout] 117 | .map_err(|_| Error::FailParseCargoStream)? [INFO] [stdout] | ^ [INFO] [stdout] note: `wait()` call exists, but it is unreachable due to the early return [INFO] [stdout] --> src/build.rs:134:23 [INFO] [stdout] | [INFO] [stdout] 134 | let exit_status = command.wait().unwrap(); [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] = help: consider calling `.wait()` in all code paths [INFO] [stdout] = note: not doing so might leave behind zombie processes [INFO] [stdout] = note: see https://doc.rust-lang.org/stable/std/process/struct.Child.html#warning [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zombie_processes [INFO] [stdout] = note: `#[warn(clippy::zombie_processes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/build.rs:98:15 [INFO] [stdout] | [INFO] [stdout] 98 | .args(&[ [INFO] [stdout] | _______________^ [INFO] [stdout] 99 | | command.to_str(), [INFO] [stdout] 100 | | "--message-format=json-diagnostic-rendered-ansi", [INFO] [stdout] 101 | | "--color", [INFO] [stdout] ... | [INFO] [stdout] 104 | | "aarch64-skyline-switch", [INFO] [stdout] 105 | | ]) [INFO] [stdout] | |_________^ [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] help: change this to [INFO] [stdout] | [INFO] [stdout] 98 ~ .args([ [INFO] [stdout] 99 + command.to_str(), [INFO] [stdout] 100 + "--message-format=json-diagnostic-rendered-ansi", [INFO] [stdout] 101 + "--color", [INFO] [stdout] 102 + "always", [INFO] [stdout] 103 + "--target", [INFO] [stdout] 104 + "aarch64-skyline-switch", [INFO] [stdout] 105 ~ ]) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/build.rs:115:25 [INFO] [stdout] | [INFO] [stdout] 115 | let last_artifact = cargo_metadata::parse_messages(command.stdout.as_mut().unwrap()) [INFO] [stdout] | _________________________^ [INFO] [stdout] 116 | | .collect::, _>>() [INFO] [stdout] 117 | | .map_err(|_| Error::FailParseCargoStream)? [INFO] [stdout] 118 | | .into_iter() [INFO] [stdout] ... | [INFO] [stdout] 131 | | }) [INFO] [stdout] 132 | | .last(); [INFO] [stdout] | |_______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 132 - .last(); [INFO] [stdout] 132 + .next_back(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/main.rs:365:60 [INFO] [stdout] | [INFO] [stdout] 365 | Error::FailParseCargoStream => eprintln!("{}", "Unable to parse cargo output stream"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] = note: `#[warn(clippy::print_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 365 - Error::FailParseCargoStream => eprintln!("{}", "Unable to parse cargo output stream"), [INFO] [stdout] 365 + Error::FailParseCargoStream => eprintln!("Unable to parse cargo output stream"), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/cargo_info.rs:55:14 [INFO] [stdout] | [INFO] [stdout] 55 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/cargo_info.rs:81:18 [INFO] [stdout] | [INFO] [stdout] 81 | let stdout = std::str::from_utf8(&output.stdout) [INFO] [stdout] | __________________^ [INFO] [stdout] 82 | | .unwrap() [INFO] [stdout] 83 | | .lines() [INFO] [stdout] 84 | | .find(|line| line.starts_with('{')) [INFO] [stdout] 85 | | .ok_or_else(|| cargo_metadata::Error::NoJson)?; [INFO] [stdout] | |_____________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `ok_or` instead [INFO] [stdout] | [INFO] [stdout] 85 - .ok_or_else(|| cargo_metadata::Error::NoJson)?; [INFO] [stdout] 85 + .ok_or(cargo_metadata::Error::NoJson)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | DownloadError, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | ZipError, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | IoError(io::Error), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | CargoError(cargo_metadata::Error), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/error.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | GithubError, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/ftp.rs:43:47 [INFO] [stdout] | [INFO] [stdout] 43 | self.tcp.read_line(&mut line).map_err(|e| FtpError::Io(e))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `FtpError::Io` [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: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/ftp.rs:85:9 [INFO] [stdout] | [INFO] [stdout] 85 | write!(self.tcp.get_mut(), "{}\n", string)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] = note: `#[warn(clippy::write_with_newline)]` on by default [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 85 - write!(self.tcp.get_mut(), "{}\n", string)?; [INFO] [stdout] 85 + writeln!(self.tcp.get_mut(), "{}", string)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression returns a bool literal [INFO] [stdout] --> src/ftp.rs:181:12 [INFO] [stdout] | [INFO] [stdout] 181 | Ok(if channel.read(&mut [0; 2][..])? > 1 { [INFO] [stdout] | ____________^ [INFO] [stdout] 182 | | true [INFO] [stdout] 183 | | } else { [INFO] [stdout] 184 | | false [INFO] [stdout] 185 | | }) [INFO] [stdout] | |_________^ help: you can reduce it to: `channel.read(&mut [0; 2][..])? > 1` [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: the borrowed expression implements the required traits [INFO] [stdout] --> src/git_clone_wrappers.rs:18:15 [INFO] [stdout] | [INFO] [stdout] 18 | .args(&[ [INFO] [stdout] | _______________^ [INFO] [stdout] 19 | | "clone", [INFO] [stdout] 20 | | "-b", [INFO] [stdout] 21 | | &git_branch, [INFO] [stdout] ... | [INFO] [stdout] 24 | | &name, [INFO] [stdout] 25 | | ]) [INFO] [stdout] | |_________^ [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] help: change this to [INFO] [stdout] | [INFO] [stdout] 18 ~ .args([ [INFO] [stdout] 19 + "clone", [INFO] [stdout] 20 + "-b", [INFO] [stdout] 21 + &git_branch, [INFO] [stdout] 22 + "--single-branch", [INFO] [stdout] 23 + &git_url, [INFO] [stdout] 24 + &name, [INFO] [stdout] 25 ~ ]) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/git_clone_wrappers.rs:41:33 [INFO] [stdout] | [INFO] [stdout] 41 | let _ = fs::remove_file(&format!("{}/{}", name, ".github/workflows/rustdoc.yml")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `format!("{}/{}", name, ".github/workflows/rustdoc.yml")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/installer/temp_git.rs:16:19 [INFO] [stdout] | [INFO] [stdout] 16 | .args(&["clone", url, "tempdir_j93jfs3ff"]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["clone", url, "tempdir_j93jfs3ff"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/installer.rs:108:26 [INFO] [stdout] | [INFO] [stdout] 108 | let _ = client.mkdir(&get_game_path(&title_id)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `get_game_path(&title_id)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/installer.rs:160:9 [INFO] [stdout] | [INFO] [stdout] 160 | path.split('/').last().unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 160 - path.split('/').last().unwrap() [INFO] [stdout] 160 + path.split('/').next_back().unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/installer.rs:164:14 [INFO] [stdout] | [INFO] [stdout] 164 | .map(|x| x.to_str()) [INFO] [stdout] | ______________^ [INFO] [stdout] 165 | | .flatten() [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|x| x.to_str())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `path` after checking its variant with `is_some` [INFO] [stdout] --> src/installer.rs:258:40 [INFO] [stdout] | [INFO] [stdout] 257 | if path.is_some() { [INFO] [stdout] | ----------------- help: try: `if let Some() = path` [INFO] [stdout] 258 | println!("{}", client.ls(Some(&path.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: this expression borrows a value the compiler would automatically borrow [INFO] [stdout] --> src/installer.rs:277:28 [INFO] [stdout] | [INFO] [stdout] 277 | let filename_str = (&filename).as_ref().unwrap(); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `filename` [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: unnecessary use of `to_string` [INFO] [stdout] --> src/installer.rs:334:23 [INFO] [stdout] | [INFO] [stdout] 334 | std::fs::read(src_path.to_str().unwrap().to_string())?, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `src_path.to_str().unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] = note: `#[warn(clippy::unnecessary_to_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling .bytes() is very inefficient when data is not in memory [INFO] [stdout] --> src/package.rs:27:19 [INFO] [stdout] | [INFO] [stdout] 27 | let subsdk1 = zip [INFO] [stdout] | ___________________^ [INFO] [stdout] 28 | | .by_name("exefs/subsdk9")? [INFO] [stdout] 29 | | .bytes() [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: consider using `BufReader` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unbuffered_bytes [INFO] [stdout] = note: `#[warn(clippy::unbuffered_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling .bytes() is very inefficient when data is not in memory [INFO] [stdout] --> src/package.rs:31:21 [INFO] [stdout] | [INFO] [stdout] 31 | let main_npdm = zip [INFO] [stdout] | _____________________^ [INFO] [stdout] 32 | | .by_name("exefs/main.npdm")? [INFO] [stdout] 33 | | .bytes() [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: consider using `BufReader` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unbuffered_bytes [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/package.rs:52:20 [INFO] [stdout] | [INFO] [stdout] 52 | let title_id = title_id [INFO] [stdout] | ____________________^ [INFO] [stdout] 53 | | .or_else(|| metadata.title_id.as_deref()) [INFO] [stdout] | |_________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] help: use `or` instead [INFO] [stdout] | [INFO] [stdout] 53 - .or_else(|| metadata.title_id.as_deref()) [INFO] [stdout] 53 + .or(metadata.title_id.as_deref()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/package.rs:79:18 [INFO] [stdout] | [INFO] [stdout] 79 | .map(|path| fs::read(path)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `fs::read` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/package.rs:82:62 [INFO] [stdout] | [INFO] [stdout] 82 | let generated_npdm = crate::installer::generate_npdm(&title_id); [INFO] [stdout] | ^^^^^^^^^ help: change this to: `title_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/update_std.rs:65:49 [INFO] [stdout] | [INFO] [stdout] 65 | .find(|assert| assert.name.contains(&TARGET)) [INFO] [stdout] | ^^^^^^^ help: change this to: `TARGET` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/update_std.rs:134:15 [INFO] [stdout] | [INFO] [stdout] 134 | .args(&["toolchain", "link", name]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["toolchain", "link", name]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/main.rs:365:60 [INFO] [stdout] | [INFO] [stdout] 365 | Error::FailParseCargoStream => eprintln!("{}", "Unable to parse cargo output stream"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] = note: `#[warn(clippy::print_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 365 - Error::FailParseCargoStream => eprintln!("{}", "Unable to parse cargo output stream"), [INFO] [stdout] 365 + Error::FailParseCargoStream => eprintln!("Unable to parse cargo output stream"), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 45.90s [INFO] running `Command { std: "docker" "inspect" "0238fe113eeecf7052e5699111b53c9014b82400ef34ba231c936d94fda1845c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0238fe113eeecf7052e5699111b53c9014b82400ef34ba231c936d94fda1845c", kill_on_drop: false }` [INFO] [stdout] 0238fe113eeecf7052e5699111b53c9014b82400ef34ba231c936d94fda1845c