[INFO] cloning repository https://github.com/pchakour/easymake [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/pchakour/easymake" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpchakour%2Feasymake", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpchakour%2Feasymake'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] e825c6b95c6f1223e337192de313f2dd2eb0f40d [INFO] linting pchakour/easymake against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fpchakour%2Feasymake" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/pchakour/easymake [INFO] finished tweaking git repo https://github.com/pchakour/easymake [INFO] tweaked toml for git repo https://github.com/pchakour/easymake written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/pchakour/easymake 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/pchakour/easymake 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 time-core v0.1.4 [INFO] [stderr] Downloaded winapi-util v0.1.10 [INFO] [stderr] Downloaded url v2.5.6 [INFO] [stderr] Downloaded dot-generator v0.2.0 [INFO] [stderr] Downloaded unicode-linebreak v0.1.5 [INFO] [stderr] Downloaded into-attr-derive v0.2.1 [INFO] [stderr] Downloaded data-encoding-macro-internal v0.1.16 [INFO] [stderr] Downloaded unsigned-varint v0.8.0 [INFO] [stderr] Downloaded windows-implement v0.60.0 [INFO] [stderr] Downloaded windows-interface v0.59.1 [INFO] [stderr] Downloaded gloo-net v0.3.1 [INFO] [stderr] Downloaded windows-core v0.62.0 [INFO] [stderr] Downloaded clap v4.5.45 [INFO] [stderr] Downloaded yew-macro v0.21.0 [INFO] [stderr] Downloaded hyper-util v0.1.16 [INFO] [stderr] Downloaded dbus v0.9.9 [INFO] [stderr] Downloaded yew v0.21.0 [INFO] [stderr] Downloaded saphyr-parser v0.0.3 [INFO] [stderr] Downloaded clap_builder v4.5.44 [INFO] [stderr] Downloaded minijinja v2.12.0 [INFO] [stderr] Downloaded serde_json v1.0.143 [INFO] [stderr] Downloaded git2 v0.20.2 [INFO] [stderr] Downloaded serde_yml v0.0.12 [INFO] [stderr] Downloaded libyml v0.0.5 [INFO] [stderr] Downloaded io-uring v0.7.9 [INFO] [stderr] Downloaded time v0.3.41 [INFO] [stderr] Downloaded backtrace v0.3.75 [INFO] [stderr] Downloaded cc v1.2.33 [INFO] [stderr] Downloaded gloo v0.10.0 [INFO] [stderr] Downloaded rustls v0.23.31 [INFO] [stderr] Downloaded gloo v0.8.1 [INFO] [stderr] Downloaded security-framework v3.4.0 [INFO] [stderr] Downloaded rustix v1.0.8 [INFO] [stderr] Downloaded keyring v3.6.3 [INFO] [stderr] Downloaded rustls-webpki v0.103.4 [INFO] [stderr] Downloaded indexmap v2.10.0 [INFO] [stderr] Downloaded client v0.1.1-beta1 [INFO] [stderr] Downloaded litrs v0.4.2 [INFO] [stderr] Downloaded indicatif v0.18.0 [INFO] [stderr] Downloaded tempfile v3.21.0 [INFO] [stderr] Downloaded clap_derive v4.5.45 [INFO] [stderr] Downloaded core2 v0.4.0 [INFO] [stderr] Downloaded libssh2-sys v0.3.1 [INFO] [stderr] Downloaded console v0.16.0 [INFO] [stderr] Downloaded saphyr v0.0.3 [INFO] [stderr] Downloaded textwrap v0.16.2 [INFO] [stderr] Downloaded convert_case v0.7.1 [INFO] [stderr] Downloaded ctrlc v3.4.7 [INFO] [stderr] Downloaded libc v0.2.175 [INFO] [stderr] Downloaded graphviz-rust v0.9.6 [INFO] [stderr] Downloaded zstd-sys v2.0.15+zstd.1.5.7 [INFO] [stderr] Downloaded inventory v0.3.21 [INFO] [stderr] Downloaded dbus-secret-service v4.1.0 [INFO] [stderr] Downloaded linux-keyutils v0.2.4 [INFO] [stderr] Downloaded tokio-rustls v0.26.2 [INFO] [stderr] Downloaded libz-sys v1.1.22 [INFO] [stderr] Downloaded hashlink v0.8.4 [INFO] [stderr] Downloaded cid v0.11.1 [INFO] [stderr] Downloaded multibase v0.9.1 [INFO] [stderr] Downloaded multihash v0.19.3 [INFO] [stderr] Downloaded gloo-net v0.4.0 [INFO] [stderr] Downloaded gloo-history v0.1.5 [INFO] [stderr] Downloaded gloo-utils v0.1.7 [INFO] [stderr] Downloaded globset v0.4.16 [INFO] [stderr] Downloaded dot-structures v0.1.2 [INFO] [stderr] Downloaded bitflags v2.9.2 [INFO] [stderr] Downloaded implicit-clone v0.4.9 [INFO] [stderr] Downloaded yew-router v0.18.0 [INFO] [stderr] Downloaded xattr v1.5.1 [INFO] [stderr] Downloaded terminal_size v0.4.3 [INFO] [stderr] Downloaded libdbus-sys v0.2.6 [INFO] [stderr] Downloaded potential_utf v0.1.2 [INFO] [stderr] Downloaded data-encoding-macro v0.1.18 [INFO] [stderr] Downloaded gloo-worker v0.4.0 [INFO] [stderr] Downloaded yew-router-macro v0.18.0 [INFO] [stderr] Downloaded into-attr v0.1.1 [INFO] [stderr] Downloaded unit-prefix v0.5.1 [INFO] [stderr] Downloaded sha256 v1.6.0 [INFO] [stderr] Downloaded smawk v0.3.2 [INFO] [stderr] Downloaded libredox v0.1.9 [INFO] [stderr] Downloaded errno v0.3.13 [INFO] [stderr] Downloaded deranged v0.4.0 [INFO] [stderr] Downloaded libgit2-sys v0.18.2+1.9.1 [INFO] [stderr] Downloaded linux-raw-sys v0.9.4 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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] ca57e28214ea88663e768de26791eef31bd3733b4dd5ee5981bb849bff144f86 [INFO] running `Command { std: "docker" "start" "-a" "ca57e28214ea88663e768de26791eef31bd3733b4dd5ee5981bb849bff144f86", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "ca57e28214ea88663e768de26791eef31bd3733b4dd5ee5981bb849bff144f86", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ca57e28214ea88663e768de26791eef31bd3733b4dd5ee5981bb849bff144f86", kill_on_drop: false }` [INFO] [stdout] ca57e28214ea88663e768de26791eef31bd3733b4dd5ee5981bb849bff144f86 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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] ea37bb9ab3652ebc08c5b25b2f730add7ae059ff71e93e5651761d3a60e29493 [INFO] running `Command { std: "docker" "start" "-a" "ea37bb9ab3652ebc08c5b25b2f730add7ae059ff71e93e5651761d3a60e29493", kill_on_drop: false }` [INFO] [stderr] warning: easybuild v0.0.1-beta (/opt/rustwide/workdir) ignoring invalid dependency `client` which is missing a lib target [INFO] [stderr] Compiling proc-macro2 v1.0.101 [INFO] [stderr] Compiling unicode-ident v1.0.18 [INFO] [stderr] Compiling libc v0.2.175 [INFO] [stderr] Compiling pkg-config v0.3.32 [INFO] [stderr] Compiling shlex v1.3.0 [INFO] [stderr] Checking cfg-if v1.0.3 [INFO] [stderr] Compiling version_check v0.9.5 [INFO] [stderr] Compiling autocfg v1.5.0 [INFO] [stderr] Checking once_cell v1.21.3 [INFO] [stderr] Checking smallvec v1.15.1 [INFO] [stderr] Checking bitflags v2.9.2 [INFO] [stderr] Checking log v0.4.27 [INFO] [stderr] Compiling vcpkg v0.2.15 [INFO] [stderr] Checking memchr v2.7.5 [INFO] [stderr] Compiling parking_lot_core v0.9.11 [INFO] [stderr] Checking pin-project-lite v0.2.16 [INFO] [stderr] Compiling typenum v1.18.0 [INFO] [stderr] Checking scopeguard v1.2.0 [INFO] [stderr] Checking stable_deref_trait v1.2.0 [INFO] [stderr] Checking bytes v1.10.1 [INFO] [stderr] Checking futures-core v0.3.31 [INFO] [stderr] Checking futures-sink v0.3.31 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Checking itoa v1.0.15 [INFO] [stderr] Compiling zerocopy v0.8.26 [INFO] [stderr] Checking slab v0.4.11 [INFO] [stderr] Checking fnv v1.0.7 [INFO] [stderr] Checking writeable v0.6.1 [INFO] [stderr] Checking litemap v0.8.0 [INFO] [stderr] Compiling icu_properties_data v2.0.1 [INFO] [stderr] Checking futures-task v0.3.31 [INFO] [stderr] Checking subtle v2.6.1 [INFO] [stderr] Compiling lock_api v0.4.13 [INFO] [stderr] Checking futures-channel v0.3.31 [INFO] [stderr] Compiling icu_normalizer_data v2.0.0 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling rustix v1.0.8 [INFO] [stderr] Checking futures-io v0.3.31 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Checking linux-raw-sys v0.9.4 [INFO] [stderr] Checking percent-encoding v2.3.2 [INFO] [stderr] Compiling getrandom v0.3.3 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Checking equivalent v1.0.2 [INFO] [stderr] Checking hashbrown v0.15.5 [INFO] [stderr] Checking tracing-core v0.1.34 [INFO] [stderr] Compiling httparse v1.10.1 [INFO] [stderr] Compiling openssl v0.10.73 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Checking foreign-types-shared v0.1.1 [INFO] [stderr] Checking http v1.3.1 [INFO] [stderr] Checking cpufeatures v0.2.17 [INFO] [stderr] Compiling libdbus-sys v0.2.6 [INFO] [stderr] Checking foreign-types v0.3.2 [INFO] [stderr] Compiling jobserver v0.1.33 [INFO] [stderr] Checking allocator-api2 v0.2.21 [INFO] [stderr] Checking try-lock v0.2.5 [INFO] [stderr] Compiling ucd-trie v0.1.7 [INFO] [stderr] Checking atomic-waker v1.1.2 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Checking tower-service v0.3.3 [INFO] [stderr] Compiling syn v2.0.106 [INFO] [stderr] Compiling native-tls v0.2.14 [INFO] [stderr] Checking openssl-probe v0.1.6 [INFO] [stderr] Checking want v0.3.1 [INFO] [stderr] Checking form_urlencoded v1.2.2 [INFO] [stderr] Compiling cc v1.2.33 [INFO] [stderr] Compiling crc32fast v1.5.0 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling dot-structures v0.1.2 [INFO] [stderr] Compiling unicode-segmentation v1.12.0 [INFO] [stderr] Compiling anyhow v1.0.99 [INFO] [stderr] Checking utf8_iter v1.0.4 [INFO] [stderr] Checking ryu v1.0.20 [INFO] [stderr] Compiling zstd-safe v5.0.2+zstd.1.5.2 [INFO] [stderr] Compiling pest v2.8.6 [INFO] [stderr] Compiling nix v0.30.1 [INFO] [stderr] Checking anstyle-parse v0.2.7 [INFO] [stderr] Checking crossbeam-epoch v0.9.18 [INFO] [stderr] Checking indexmap v2.10.0 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Compiling convert_case v0.7.1 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking sync_wrapper v1.0.2 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Checking anstyle v1.0.11 [INFO] [stderr] Checking colorchoice v1.0.4 [INFO] [stderr] Checking crypto-common v0.1.6 [INFO] [stderr] Checking block-buffer v0.10.4 [INFO] [stderr] Checking inout v0.1.4 [INFO] [stderr] Compiling serde_json v1.0.143 [INFO] [stderr] Checking adler2 v2.0.1 [INFO] [stderr] Checking regex-syntax v0.8.5 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Compiling zstd-safe v7.2.4 [INFO] [stderr] Compiling portable-atomic v1.11.1 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking ipnet v2.11.0 [INFO] [stderr] Checking signal-hook-registry v1.4.6 [INFO] [stderr] Checking mio v1.0.4 [INFO] [stderr] Checking socket2 v0.6.0 [INFO] [stderr] Checking anstyle-query v1.1.4 [INFO] [stderr] Checking parking_lot v0.12.4 [INFO] [stderr] Compiling rayon-core v1.13.0 [INFO] [stderr] Checking tower-layer v0.3.3 [INFO] [stderr] Checking sha2 v0.10.9 [INFO] [stderr] Checking rand_core v0.9.5 [INFO] [stderr] Checking base64ct v1.8.0 [INFO] [stderr] Checking powerfmt v0.2.0 [INFO] [stderr] Checking unicode-width v0.2.1 [INFO] [stderr] Checking base64 v0.22.1 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking hmac v0.12.1 [INFO] [stderr] Checking anstream v0.6.20 [INFO] [stderr] Checking password-hash v0.4.2 [INFO] [stderr] Checking dbus v0.9.9 [INFO] [stderr] Checking deranged v0.4.0 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking miniz_oxide v0.8.9 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Checking crossbeam-deque v0.8.6 [INFO] [stderr] Compiling pest_meta v2.8.6 [INFO] [stderr] Compiling openssl-sys v0.9.109 [INFO] [stderr] Compiling zstd-sys v2.0.15+zstd.1.5.7 [INFO] [stderr] Compiling libz-sys v1.1.22 [INFO] [stderr] Compiling libssh2-sys v0.3.1 [INFO] [stderr] Compiling bzip2-sys v0.1.13+1.0.8 [INFO] [stderr] Compiling libgit2-sys v0.18.2+1.9.1 [INFO] [stderr] Compiling lzma-sys v0.1.20 [INFO] [stderr] Compiling blake3 v1.8.2 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Compiling dot-generator v0.2.0 [INFO] [stderr] Checking hashlink v0.8.4 [INFO] [stderr] Compiling into-attr v0.1.1 [INFO] [stderr] Compiling serde_yml v0.0.12 [INFO] [stderr] Checking encoding_rs v0.8.35 [INFO] [stderr] Checking time-core v0.1.4 [INFO] [stderr] Checking fastrand v2.3.0 [INFO] [stderr] Compiling litrs v0.4.2 [INFO] [stderr] Checking iri-string v0.7.8 [INFO] [stderr] Checking arraydeque v0.5.1 [INFO] [stderr] Checking num-conv v0.1.0 [INFO] [stderr] Checking clap_lex v0.7.5 [INFO] [stderr] Checking clap_builder v4.5.44 [INFO] [stderr] Checking time v0.3.41 [INFO] [stderr] Checking tempfile v3.21.0 [INFO] [stderr] Compiling document-features v0.2.11 [INFO] [stderr] Checking saphyr-parser v0.0.3 [INFO] [stderr] Checking flate2 v1.1.2 [INFO] [stderr] Checking libyml v0.0.5 [INFO] [stderr] Checking xattr v1.5.1 [INFO] [stderr] Checking aes v0.8.4 [INFO] [stderr] Checking rand v0.9.2 [INFO] [stderr] Checking signal-hook-mio v0.2.4 [INFO] [stderr] Checking pbkdf2 v0.11.0 [INFO] [stderr] Checking console v0.16.0 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking filetime v0.2.26 [INFO] [stderr] Checking linux-keyutils v0.2.4 [INFO] [stderr] Checking bstr v1.12.0 [INFO] [stderr] Checking hex v0.4.3 [INFO] [stderr] Compiling inventory v0.3.21 [INFO] [stderr] Checking constant_time_eq v0.1.5 [INFO] [stderr] Checking mime v0.3.17 [INFO] [stderr] Checking bzip2 v0.4.4 [INFO] [stderr] Checking byteorder v1.5.0 [INFO] [stderr] Checking constant_time_eq v0.3.1 [INFO] [stderr] Checking unit-prefix v0.5.1 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Checking same-file v1.0.6 [INFO] [stderr] Checking arrayref v0.3.9 [INFO] [stderr] Checking iana-time-zone v0.1.64 [INFO] [stderr] Checking arrayvec v0.7.6 [INFO] [stderr] Checking smawk v0.3.2 [INFO] [stderr] Checking unicode-linebreak v0.1.5 [INFO] [stderr] Checking chrono v0.4.42 [INFO] [stderr] Checking walkdir v2.5.0 [INFO] [stderr] Checking tar v0.4.44 [INFO] [stderr] Checking xz2 v0.1.7 [INFO] [stderr] Checking textwrap v0.16.2 [INFO] [stderr] Checking saphyr v0.0.3 [INFO] [stderr] Checking terminal_size v0.4.3 [INFO] [stderr] Checking rayon v1.11.0 [INFO] [stderr] Checking dashmap v6.1.0 [INFO] [stderr] Checking indicatif v0.18.0 [INFO] [stderr] Checking num_cpus v1.17.0 [INFO] [stderr] Checking crossbeam-channel v0.5.15 [INFO] [stderr] Checking colored v3.0.0 [INFO] [stderr] Checking lazy_static v1.5.0 [INFO] [stderr] Checking fs_extra v1.3.0 [INFO] [stderr] Checking glob v0.3.3 [INFO] [stderr] Checking urlencoding v2.1.3 [INFO] [stderr] Checking globset v0.4.16 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Compiling into-attr-derive v0.2.1 [INFO] [stderr] Compiling config-macros v0.1.0 (/opt/rustwide/workdir/lib/config-macros) [INFO] [stderr] Checking ctrlc v3.4.7 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling pest_generator v2.8.6 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.0 [INFO] [stderr] Compiling zerovec-derive v0.11.1 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling tokio-macros v2.5.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling tracing-attributes v0.1.30 [INFO] [stderr] Compiling zeroize_derive v1.4.2 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling derive_more-impl v2.0.1 [INFO] [stderr] Compiling pest_derive v2.8.6 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling clap_derive v4.5.45 [INFO] [stderr] Checking zeroize v1.8.1 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking graphviz-rust v0.9.6 [INFO] [stderr] Checking dbus-secret-service v4.1.0 [INFO] [stderr] Checking tokio v1.47.1 [INFO] [stderr] Checking rustls-pki-types v1.12.0 [INFO] [stderr] Checking keyring v3.6.3 [INFO] [stderr] Checking derive_more v2.0.1 [INFO] [stderr] Checking crossterm v0.29.0 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Checking yoke v0.8.0 [INFO] [stderr] Checking zerovec v0.11.4 [INFO] [stderr] Checking zerotrie v0.2.2 [INFO] [stderr] Checking zstd v0.11.2+zstd.1.5.2 [INFO] [stderr] Checking zstd v0.13.3 [INFO] [stderr] Checking zip v0.6.6 [INFO] [stderr] Checking tinystr v0.8.1 [INFO] [stderr] Checking potential_utf v0.1.2 [INFO] [stderr] Checking clap v4.5.45 [INFO] [stderr] Checking icu_collections v2.0.0 [INFO] [stderr] Checking icu_locale_core v2.0.0 [INFO] [stderr] Checking icu_provider v2.0.0 [INFO] [stderr] Checking icu_normalizer v2.0.0 [INFO] [stderr] Checking icu_properties v2.0.1 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking url v2.5.6 [INFO] [stderr] Checking tokio-util v0.7.16 [INFO] [stderr] Checking tower v0.5.2 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Checking sha256 v1.6.0 [INFO] [stderr] Checking git2 v0.20.2 [INFO] [stderr] Checking h2 v0.4.12 [INFO] [stderr] Checking tower-http v0.6.6 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking minijinja v2.12.0 [INFO] [stderr] Checking hyper v1.7.0 [INFO] [stderr] Checking hyper-util v0.1.16 [INFO] [stderr] Checking hyper-tls v0.6.0 [INFO] [stderr] Checking reqwest v0.12.23 [INFO] [stderr] Checking easybuild v0.0.1-beta (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> src/commands/graph.rs:1:17 [INFO] [stdout] | [INFO] [stdout] 1 | use std::path::{Path, PathBuf}; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `minijinja::render` [INFO] [stdout] --> src/commands/doc.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use minijinja::render; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/commands/keyring.rs:14:21 [INFO] [stdout] | [INFO] [stdout] 14 | const LINE_ENDING: &'static str = "\n"; [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> src/emake/compiler.rs:1:40 [INFO] [stdout] | [INFO] [stdout] 1 | use std::{collections::HashMap, path::{Path, PathBuf}}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `TOKEN_STATE` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:14:6 [INFO] [stdout] | [INFO] [stdout] 14 | enum TOKEN_STATE { [INFO] [stdout] | ^^^^^^^^^^^ help: convert the identifier to upper camel case: `TokenState` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_STRING_OPEN` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | ARG_STRING_OPEN, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `ArgStringOpen` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_STRING_CLOSE` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | ARG_STRING_CLOSE, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `ArgStringClose` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_PATH` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | ARG_PATH, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `ArgPath` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `OPEN_VAR` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | OPEN_VAR, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `OpenVar` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `CLOSE_VAR` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | CLOSE_VAR, [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `CloseVar` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `OPEN_STRING` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | OPEN_STRING, [INFO] [stdout] | ^^^^^^^^^^^ help: convert the identifier to upper camel case: `OpenString` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `CLOSE_STRING` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | CLOSE_STRING, [INFO] [stdout] | ^^^^^^^^^^^^ help: convert the identifier to upper camel case: `CloseString` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `TOKEN_TAG` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:28:6 [INFO] [stdout] | [INFO] [stdout] 28 | enum TOKEN_TAG { [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `TokenTag` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_STRING` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | ARG_STRING, [INFO] [stdout] | ^^^^^^^^^^ help: convert the identifier to upper camel case: `ArgString` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_PATH` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | ARG_PATH, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `ArgPath` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> src/emake/loader.rs:3:40 [INFO] [stdout] | [INFO] [stdout] 3 | use std::{collections::HashMap, path::{Path, PathBuf}}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> src/commands/graph.rs:1:17 [INFO] [stdout] | [INFO] [stdout] 1 | use std::path::{Path, PathBuf}; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `minijinja::render` [INFO] [stdout] --> src/commands/doc.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use minijinja::render; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/commands/keyring.rs:14:21 [INFO] [stdout] | [INFO] [stdout] 14 | const LINE_ENDING: &'static str = "\n"; [INFO] [stdout] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes [INFO] [stdout] = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> src/emake/compiler.rs:1:40 [INFO] [stdout] | [INFO] [stdout] 1 | use std::{collections::HashMap, path::{Path, PathBuf}}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `TOKEN_STATE` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:14:6 [INFO] [stdout] | [INFO] [stdout] 14 | enum TOKEN_STATE { [INFO] [stdout] | ^^^^^^^^^^^ help: convert the identifier to upper camel case: `TokenState` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_STRING_OPEN` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | ARG_STRING_OPEN, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `ArgStringOpen` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_STRING_CLOSE` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | ARG_STRING_CLOSE, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `ArgStringClose` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_PATH` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | ARG_PATH, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `ArgPath` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `OPEN_VAR` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | OPEN_VAR, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `OpenVar` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `CLOSE_VAR` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | CLOSE_VAR, [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `CloseVar` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `OPEN_STRING` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | OPEN_STRING, [INFO] [stdout] | ^^^^^^^^^^^ help: convert the identifier to upper camel case: `OpenString` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `CLOSE_STRING` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | CLOSE_STRING, [INFO] [stdout] | ^^^^^^^^^^^^ help: convert the identifier to upper camel case: `CloseString` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `TOKEN_TAG` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:28:6 [INFO] [stdout] | [INFO] [stdout] 28 | enum TOKEN_TAG { [INFO] [stdout] | ^^^^^^^^^ help: convert the identifier to upper camel case: `TokenTag` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_STRING` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | ARG_STRING, [INFO] [stdout] | ^^^^^^^^^^ help: convert the identifier to upper camel case: `ArgString` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `ARG_PATH` should have an upper camel case name [INFO] [stdout] --> src/emake/compiler.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | ARG_PATH, [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `ArgPath` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Path` [INFO] [stdout] --> src/emake/loader.rs:3:40 [INFO] [stdout] | [INFO] [stdout] 3 | use std::{collections::HashMap, path::{Path, PathBuf}}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `time::Duration` [INFO] [stdout] --> src/utils.rs:6:32 [INFO] [stdout] | [INFO] [stdout] 6 | process::{Command, Stdio}, time::Duration, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `time::Duration` [INFO] [stdout] --> src/utils.rs:6:32 [INFO] [stdout] | [INFO] [stdout] 6 | process::{Command, Stdio}, time::Duration, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `result` is never read [INFO] [stdout] --> src/emake/compiler.rs:745:46 [INFO] [stdout] | [INFO] [stdout] 745 | ... let mut result = replacements [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 746 | | ... .get(&var_caps[1].trim().to_string()) [INFO] [stdout] 747 | | ... .unwrap_or(&&var_caps[0].to_string()) [INFO] [stdout] 748 | | ... .to_string(); [INFO] [stdout] | |______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `result` is never read [INFO] [stdout] --> src/emake/compiler.rs:689:46 [INFO] [stdout] | [INFO] [stdout] 689 | ... let mut result = replacements [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 690 | | ... .get(&var_caps[1].trim().to_string()) [INFO] [stdout] 691 | | ... .unwrap_or(&&var_caps[0].to_string()) [INFO] [stdout] 692 | | ... .to_string(); [INFO] [stdout] | |______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `result` is never read [INFO] [stdout] --> src/emake/compiler.rs:745:46 [INFO] [stdout] | [INFO] [stdout] 745 | ... let mut result = replacements [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 746 | | ... .get(&var_caps[1].trim().to_string()) [INFO] [stdout] 747 | | ... .unwrap_or(&&var_caps[0].to_string()) [INFO] [stdout] 748 | | ... .to_string(); [INFO] [stdout] | |______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `result` is never read [INFO] [stdout] --> src/emake/compiler.rs:689:46 [INFO] [stdout] | [INFO] [stdout] 689 | ... let mut result = replacements [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 690 | | ... .get(&var_caps[1].trim().to_string()) [INFO] [stdout] 691 | | ... .unwrap_or(&&var_caps[0].to_string()) [INFO] [stdout] 692 | | ... .to_string(); [INFO] [stdout] | |______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_types_doc` is never used [INFO] [stdout] --> src/commands/doc.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 59 | pub fn generate_types_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `short_desc`, and `description` are never read [INFO] [stdout] --> src/doc/action.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct TypeDocEntry { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 29 | pub name: &'static str, [INFO] [stdout] | ^^^^ [INFO] [stdout] 30 | pub short_desc: &'static str, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 31 | pub description: &'static str, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/emake/loader.rs:21:17 [INFO] [stdout] | [INFO] [stdout] 21 | TargetEntry(emake::Target), [INFO] [stdout] | ----------- ^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `Target` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 21 - TargetEntry(emake::Target), [INFO] [stdout] 21 + TargetEntry(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `InFile` is never constructed [INFO] [stdout] --> src/graph.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct InFile { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ActionPlugin` is never constructed [INFO] [stdout] --> src/graph/generator.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 60 | pub struct ActionPlugin { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ActionProperties` is never constructed [INFO] [stdout] --> src/graph/generator.rs:66:12 [INFO] [stdout] | [INFO] [stdout] 66 | pub struct ActionProperties { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TargetProperties` is never constructed [INFO] [stdout] --> src/graph/generator.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 76 | pub struct TargetProperties { [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] --> src/actions/shell.rs:70:13 [INFO] [stdout] | [INFO] [stdout] 70 | / match action { [INFO] [stdout] 71 | | PluginAction::Shell { shell } => { [INFO] [stdout] 72 | | if let Some(plugin_in_files) = &shell.in_files { [INFO] [stdout] 73 | | for in_file in plugin_in_files { [INFO] [stdout] ... | [INFO] [stdout] 78 | | _ => {} [INFO] [stdout] 79 | | } [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] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 70 ~ if let PluginAction::Shell { shell } = action { [INFO] [stdout] 71 + if let Some(plugin_in_files) = &shell.in_files { [INFO] [stdout] 72 + for in_file in plugin_in_files { [INFO] [stdout] 73 + in_files.push(in_file.clone()); [INFO] [stdout] 74 + } [INFO] [stdout] 75 + } [INFO] [stdout] 76 + } [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] --> src/actions/shell.rs:89:13 [INFO] [stdout] | [INFO] [stdout] 89 | / match action { [INFO] [stdout] 90 | | PluginAction::Shell { shell } => { [INFO] [stdout] 91 | | if let Some(plugin_out_files) = &shell.out_files { [INFO] [stdout] 92 | | for out_file in plugin_out_files { [INFO] [stdout] ... | [INFO] [stdout] 97 | | _ => {} [INFO] [stdout] 98 | | } [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] 89 ~ if let PluginAction::Shell { shell } = action { [INFO] [stdout] 90 + if let Some(plugin_out_files) = &shell.out_files { [INFO] [stdout] 91 + for out_file in plugin_out_files { [INFO] [stdout] 92 + out_files.push(out_file.clone()); [INFO] [stdout] 93 + } [INFO] [stdout] 94 + } [INFO] [stdout] 95 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/actions/shell.rs:140:21 [INFO] [stdout] | [INFO] [stdout] 140 | &emakefile_cwd.to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_cwd` [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: unnecessary use of `to_string` [INFO] [stdout] --> src/actions/shell.rs:148:21 [INFO] [stdout] | [INFO] [stdout] 148 | &emakefile_cwd.to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_cwd` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/actions/shell.rs:195:25 [INFO] [stdout] | [INFO] [stdout] 195 | / for line in stdout_reader.lines() { [INFO] [stdout] 196 | | if let Ok(text) = line { [INFO] [stdout] 197 | | let output = format!("[stdout] {}", text); [INFO] [stdout] 198 | | log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 199 | | } [INFO] [stdout] 200 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/actions/shell.rs:196:29 [INFO] [stdout] | [INFO] [stdout] 196 | / ... if let Ok(text) = line { [INFO] [stdout] 197 | | ... let output = format!("[stdout] {}", text); [INFO] [stdout] 198 | | ... log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 199 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 195 ~ for text in stdout_reader.lines().flatten() { [INFO] [stdout] 196 + let output = format!("[stdout] {}", text); [INFO] [stdout] 197 + log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 198 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/actions/shell.rs:205:25 [INFO] [stdout] | [INFO] [stdout] 205 | / for line in stderr_reader.lines() { [INFO] [stdout] 206 | | if let Ok(text) = line { [INFO] [stdout] 207 | | let output = format!("[stderr] {}", text); [INFO] [stdout] 208 | | log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 209 | | } [INFO] [stdout] 210 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/actions/shell.rs:206:29 [INFO] [stdout] | [INFO] [stdout] 206 | / ... if let Ok(text) = line { [INFO] [stdout] 207 | | ... let output = format!("[stderr] {}", text); [INFO] [stdout] 208 | | ... log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 209 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 205 ~ for text in stderr_reader.lines().flatten() { [INFO] [stdout] 206 + let output = format!("[stderr] {}", text); [INFO] [stdout] 207 + log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 208 + } [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] --> src/actions/copy.rs:70:13 [INFO] [stdout] | [INFO] [stdout] 70 | / match action { [INFO] [stdout] 71 | | PluginAction::Copy { copy } => { [INFO] [stdout] 72 | | for from in ©.from { [INFO] [stdout] 73 | | in_files.push(InFile::Simple(from.to_string())); [INFO] [stdout] ... | [INFO] [stdout] 76 | | _ => {} [INFO] [stdout] 77 | | } [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] 70 ~ if let PluginAction::Copy { copy } = action { [INFO] [stdout] 71 + for from in ©.from { [INFO] [stdout] 72 + in_files.push(InFile::Simple(from.to_string())); [INFO] [stdout] 73 + } [INFO] [stdout] 74 + } [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] --> src/actions/copy.rs:87:13 [INFO] [stdout] | [INFO] [stdout] 87 | / match action { [INFO] [stdout] 88 | | PluginAction::Copy { copy } => { [INFO] [stdout] 89 | | let dest_path = PathBuf::from(©.to); [INFO] [stdout] 90 | | if dest_path.is_dir() || copy.to.ends_with("/") { [INFO] [stdout] ... | [INFO] [stdout] 105 | | _ => {} [INFO] [stdout] 106 | | } [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] 87 ~ if let PluginAction::Copy { copy } = action { [INFO] [stdout] 88 + let dest_path = PathBuf::from(©.to); [INFO] [stdout] 89 + if dest_path.is_dir() || copy.to.ends_with("/") { [INFO] [stdout] 90 + for src in ©.from { [INFO] [stdout] 91 + let src_path = PathBuf::from(src); [INFO] [stdout] 92 + let dirname = src_path.file_name().unwrap(); [INFO] [stdout] 93 + out_files.push( [INFO] [stdout] 94 + PathBuf::from(copy.to.to_string()) [INFO] [stdout] 95 + .join(&dirname) [INFO] [stdout] 96 + .to_string_lossy() [INFO] [stdout] 97 + .to_string(), [INFO] [stdout] 98 + ); [INFO] [stdout] 99 + } [INFO] [stdout] 100 + } else { [INFO] [stdout] 101 + out_files.push(copy.to.to_string()); [INFO] [stdout] 102 + } [INFO] [stdout] 103 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/actions/copy.rs:96:43 [INFO] [stdout] | [INFO] [stdout] 96 | ... .join(&dirname) [INFO] [stdout] | ^^^^^^^^ help: change this to: `dirname` [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: called `unwrap` on `result` after checking its variant with `is_err` [INFO] [stdout] --> src/actions/copy.rs:203:41 [INFO] [stdout] | [INFO] [stdout] 200 | if result.is_err() { [INFO] [stdout] | ------------------ help: try: `if let Ok() = result` [INFO] [stdout] ... [INFO] [stdout] 203 | let thread_result = result.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 can be `std::io::Error::other(_)` [INFO] [stdout] --> src/actions/extract.rs:77:26 [INFO] [stdout] | [INFO] [stdout] 77 | .map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 77 - .map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; [INFO] [stdout] 77 + .map_err(|e| io::Error::other(e))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/actions/extract.rs:79:50 [INFO] [stdout] | [INFO] [stdout] 79 | let outpath = Path::new(output_dir).join(&filename); [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_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_types_doc` is never used [INFO] [stdout] --> src/commands/doc.rs:59:8 [INFO] [stdout] | [INFO] [stdout] 59 | pub fn generate_types_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name`, `short_desc`, and `description` are never read [INFO] [stdout] --> src/doc/action.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct TypeDocEntry { [INFO] [stdout] | ------------ fields in this struct [INFO] [stdout] 29 | pub name: &'static str, [INFO] [stdout] | ^^^^ [INFO] [stdout] 30 | pub short_desc: &'static str, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 31 | pub description: &'static str, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/emake/loader.rs:21:17 [INFO] [stdout] | [INFO] [stdout] 21 | TargetEntry(emake::Target), [INFO] [stdout] | ----------- ^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `Target` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 21 - TargetEntry(emake::Target), [INFO] [stdout] 21 + TargetEntry(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `InFile` is never constructed [INFO] [stdout] --> src/graph.rs:9:12 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct InFile { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ActionPlugin` is never constructed [INFO] [stdout] --> src/graph/generator.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 60 | pub struct ActionPlugin { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ActionProperties` is never constructed [INFO] [stdout] --> src/graph/generator.rs:66:12 [INFO] [stdout] | [INFO] [stdout] 66 | pub struct ActionProperties { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TargetProperties` is never constructed [INFO] [stdout] --> src/graph/generator.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 76 | pub struct TargetProperties { [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] --> src/actions/extract.rs:152:13 [INFO] [stdout] | [INFO] [stdout] 152 | / match action { [INFO] [stdout] 153 | | PluginAction::Extract { extract } => { [INFO] [stdout] 154 | | in_files.push(extract.from.clone()); [INFO] [stdout] ... | [INFO] [stdout] 157 | | } [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] 152 ~ if let PluginAction::Extract { extract } = action { [INFO] [stdout] 153 + in_files.push(extract.from.clone()); [INFO] [stdout] 154 + } [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] --> src/actions/extract.rs:167:13 [INFO] [stdout] | [INFO] [stdout] 167 | / match action { [INFO] [stdout] 168 | | PluginAction::Extract { extract } => { [INFO] [stdout] 169 | | out_files.push(extract.to.clone()); [INFO] [stdout] 170 | | if let Some(plugin_out_files) = &extract.out_files { [INFO] [stdout] ... | [INFO] [stdout] 176 | | _ => {} [INFO] [stdout] 177 | | } [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] 167 ~ if let PluginAction::Extract { extract } = action { [INFO] [stdout] 168 + out_files.push(extract.to.clone()); [INFO] [stdout] 169 + if let Some(plugin_out_files) = &extract.out_files { [INFO] [stdout] 170 + for out_file in plugin_out_files { [INFO] [stdout] 171 + out_files.push(out_file.clone()); [INFO] [stdout] 172 + } [INFO] [stdout] 173 + } [INFO] [stdout] 174 + } [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] --> src/actions/shell.rs:70:13 [INFO] [stdout] | [INFO] [stdout] 70 | / match action { [INFO] [stdout] 71 | | PluginAction::Shell { shell } => { [INFO] [stdout] 72 | | if let Some(plugin_in_files) = &shell.in_files { [INFO] [stdout] 73 | | for in_file in plugin_in_files { [INFO] [stdout] ... | [INFO] [stdout] 78 | | _ => {} [INFO] [stdout] 79 | | } [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] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 70 ~ if let PluginAction::Shell { shell } = action { [INFO] [stdout] 71 + if let Some(plugin_in_files) = &shell.in_files { [INFO] [stdout] 72 + for in_file in plugin_in_files { [INFO] [stdout] 73 + in_files.push(in_file.clone()); [INFO] [stdout] 74 + } [INFO] [stdout] 75 + } [INFO] [stdout] 76 + } [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] --> src/actions/mv.rs:73:13 [INFO] [stdout] | [INFO] [stdout] 73 | / match action { [INFO] [stdout] 74 | | PluginAction::Move { mv } => { [INFO] [stdout] 75 | | for file in &mv.from { [INFO] [stdout] 76 | | in_files.push(file.clone()); [INFO] [stdout] ... | [INFO] [stdout] 79 | | _ => {} [INFO] [stdout] 80 | | } [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] 73 ~ if let PluginAction::Move { mv } = action { [INFO] [stdout] 74 + for file in &mv.from { [INFO] [stdout] 75 + in_files.push(file.clone()); [INFO] [stdout] 76 + } [INFO] [stdout] 77 + } [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] --> src/actions/mv.rs:90:13 [INFO] [stdout] | [INFO] [stdout] 90 | / match action { [INFO] [stdout] 91 | | PluginAction::Move { mv } => { [INFO] [stdout] 92 | | out_files.push(mv.to.clone()); [INFO] [stdout] ... | [INFO] [stdout] 95 | | } [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] 90 ~ if let PluginAction::Move { mv } = action { [INFO] [stdout] 91 + out_files.push(mv.to.clone()); [INFO] [stdout] 92 + } [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] --> src/actions/shell.rs:89:13 [INFO] [stdout] | [INFO] [stdout] 89 | / match action { [INFO] [stdout] 90 | | PluginAction::Shell { shell } => { [INFO] [stdout] 91 | | if let Some(plugin_out_files) = &shell.out_files { [INFO] [stdout] 92 | | for out_file in plugin_out_files { [INFO] [stdout] ... | [INFO] [stdout] 97 | | _ => {} [INFO] [stdout] 98 | | } [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] 89 ~ if let PluginAction::Shell { shell } = action { [INFO] [stdout] 90 + if let Some(plugin_out_files) = &shell.out_files { [INFO] [stdout] 91 + for out_file in plugin_out_files { [INFO] [stdout] 92 + out_files.push(out_file.clone()); [INFO] [stdout] 93 + } [INFO] [stdout] 94 + } [INFO] [stdout] 95 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/actions/mv.rs:123:13 [INFO] [stdout] | [INFO] [stdout] 123 | let parent_folder; [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 `parent_folder` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 123 ~ [INFO] [stdout] 124 ~ let parent_folder = if is_dest_dir { [INFO] [stdout] 125 ~ destination.clone() [INFO] [stdout] 126 | } else { [INFO] [stdout] 127 ~ dest_path.parent().unwrap().to_string_lossy().to_string() [INFO] [stdout] 128 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/actions/shell.rs:140:21 [INFO] [stdout] | [INFO] [stdout] 140 | &emakefile_cwd.to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_cwd` [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: manual checked division [INFO] [stdout] --> src/actions/mv.rs:148:28 [INFO] [stdout] | [INFO] [stdout] 148 | if process_info.total_bytes > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ check performed here [INFO] [stdout] 149 | percent = ((process_info.copied_bytes * 100) / process_info.total_bytes) [INFO] [stdout] | -------------------------------------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] = note: `#[warn(clippy::manual_checked_ops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/actions/shell.rs:148:21 [INFO] [stdout] | [INFO] [stdout] 148 | &emakefile_cwd.to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_cwd` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/actions/shell.rs:195:25 [INFO] [stdout] | [INFO] [stdout] 195 | / for line in stdout_reader.lines() { [INFO] [stdout] 196 | | if let Ok(text) = line { [INFO] [stdout] 197 | | let output = format!("[stdout] {}", text); [INFO] [stdout] 198 | | log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 199 | | } [INFO] [stdout] 200 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/actions/shell.rs:196:29 [INFO] [stdout] | [INFO] [stdout] 196 | / ... if let Ok(text) = line { [INFO] [stdout] 197 | | ... let output = format!("[stdout] {}", text); [INFO] [stdout] 198 | | ... log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 199 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 195 ~ for text in stdout_reader.lines().flatten() { [INFO] [stdout] 196 + let output = format!("[stdout] {}", text); [INFO] [stdout] 197 + log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 198 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/actions/shell.rs:205:25 [INFO] [stdout] | [INFO] [stdout] 205 | / for line in stderr_reader.lines() { [INFO] [stdout] 206 | | if let Ok(text) = line { [INFO] [stdout] 207 | | let output = format!("[stderr] {}", text); [INFO] [stdout] 208 | | log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 209 | | } [INFO] [stdout] 210 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/actions/shell.rs:206:29 [INFO] [stdout] | [INFO] [stdout] 206 | / ... if let Ok(text) = line { [INFO] [stdout] 207 | | ... let output = format!("[stderr] {}", text); [INFO] [stdout] 208 | | ... log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 209 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 205 ~ for text in stderr_reader.lines().flatten() { [INFO] [stdout] 206 + let output = format!("[stderr] {}", text); [INFO] [stdout] 207 + log::action_info!(stderr_step_id_clone, ID, "{}", output); [INFO] [stdout] 208 + } [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] --> src/actions/remove.rs:51:13 [INFO] [stdout] | [INFO] [stdout] 51 | / match action { [INFO] [stdout] 52 | | PluginAction::Remove { remove } => { [INFO] [stdout] 53 | | for path in &remove.paths { [INFO] [stdout] 54 | | in_files.push(InFile::Simple(path.to_string())); [INFO] [stdout] ... | [INFO] [stdout] 57 | | _ => {} [INFO] [stdout] 58 | | } [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] 51 ~ if let PluginAction::Remove { remove } = action { [INFO] [stdout] 52 + for path in &remove.paths { [INFO] [stdout] 53 + in_files.push(InFile::Simple(path.to_string())); [INFO] [stdout] 54 + } [INFO] [stdout] 55 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/actions/archive.rs:68:23 [INFO] [stdout] | [INFO] [stdout] 68 | fn walk_with_excludes<'a>( [INFO] [stdout] | ^^ [INFO] [stdout] 69 | dir_path: &'a Path, [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 68 ~ fn walk_with_excludes( [INFO] [stdout] 69 ~ dir_path: &Path, [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] --> src/actions/copy.rs:70:13 [INFO] [stdout] | [INFO] [stdout] 70 | / match action { [INFO] [stdout] 71 | | PluginAction::Copy { copy } => { [INFO] [stdout] 72 | | for from in ©.from { [INFO] [stdout] 73 | | in_files.push(InFile::Simple(from.to_string())); [INFO] [stdout] ... | [INFO] [stdout] 76 | | _ => {} [INFO] [stdout] 77 | | } [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] 70 ~ if let PluginAction::Copy { copy } = action { [INFO] [stdout] 71 + for from in ©.from { [INFO] [stdout] 72 + in_files.push(InFile::Simple(from.to_string())); [INFO] [stdout] 73 + } [INFO] [stdout] 74 + } [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] --> src/actions/copy.rs:87:13 [INFO] [stdout] | [INFO] [stdout] 87 | / match action { [INFO] [stdout] 88 | | PluginAction::Copy { copy } => { [INFO] [stdout] 89 | | let dest_path = PathBuf::from(©.to); [INFO] [stdout] 90 | | if dest_path.is_dir() || copy.to.ends_with("/") { [INFO] [stdout] ... | [INFO] [stdout] 105 | | _ => {} [INFO] [stdout] 106 | | } [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] 87 ~ if let PluginAction::Copy { copy } = action { [INFO] [stdout] 88 + let dest_path = PathBuf::from(©.to); [INFO] [stdout] 89 + if dest_path.is_dir() || copy.to.ends_with("/") { [INFO] [stdout] 90 + for src in ©.from { [INFO] [stdout] 91 + let src_path = PathBuf::from(src); [INFO] [stdout] 92 + let dirname = src_path.file_name().unwrap(); [INFO] [stdout] 93 + out_files.push( [INFO] [stdout] 94 + PathBuf::from(copy.to.to_string()) [INFO] [stdout] 95 + .join(&dirname) [INFO] [stdout] 96 + .to_string_lossy() [INFO] [stdout] 97 + .to_string(), [INFO] [stdout] 98 + ); [INFO] [stdout] 99 + } [INFO] [stdout] 100 + } else { [INFO] [stdout] 101 + out_files.push(copy.to.to_string()); [INFO] [stdout] 102 + } [INFO] [stdout] 103 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/actions/copy.rs:96:43 [INFO] [stdout] | [INFO] [stdout] 96 | ... .join(&dirname) [INFO] [stdout] | ^^^^^^^^ help: change this to: `dirname` [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: called `unwrap` on `result` after checking its variant with `is_err` [INFO] [stdout] --> src/actions/copy.rs:203:41 [INFO] [stdout] | [INFO] [stdout] 200 | if result.is_err() { [INFO] [stdout] | ------------------ help: try: `if let Ok() = result` [INFO] [stdout] ... [INFO] [stdout] 203 | let thread_result = result.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: manual checked division [INFO] [stdout] --> src/actions/archive.rs:150:38 [INFO] [stdout] | [INFO] [stdout] 150 | let percent = if total > 0 { [INFO] [stdout] | ^^^^^^^^^ check performed here [INFO] [stdout] 151 | Some(current * 100 / total) [INFO] [stdout] | --------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/archive.rs:207:34 [INFO] [stdout] | [INFO] [stdout] 207 | let percent = if total > 0 { Some(current * 100 / total) } else { None }; [INFO] [stdout] | ^^^^^^^^^ --------------------- division performed here [INFO] [stdout] | | [INFO] [stdout] | check performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/archive.rs:258:34 [INFO] [stdout] | [INFO] [stdout] 258 | let percent = if total > 0 { Some(current * 100 / total) } else { None }; [INFO] [stdout] | ^^^^^^^^^ --------------------- division performed here [INFO] [stdout] | | [INFO] [stdout] | check performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/actions/extract.rs:77:26 [INFO] [stdout] | [INFO] [stdout] 77 | .map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 77 - .map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; [INFO] [stdout] 77 + .map_err(|e| io::Error::other(e))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/actions/extract.rs:79:50 [INFO] [stdout] | [INFO] [stdout] 79 | let outpath = Path::new(output_dir).join(&filename); [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_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/archive.rs:311:34 [INFO] [stdout] | [INFO] [stdout] 311 | let percent = if total > 0 { [INFO] [stdout] | ^^^^^^^^^ check performed here [INFO] [stdout] 312 | Some(current * 100 / total) [INFO] [stdout] | --------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/archive.rs:345:13 [INFO] [stdout] | [INFO] [stdout] 345 | / match action { [INFO] [stdout] 346 | | PluginAction::Archive { archive } => { [INFO] [stdout] 347 | | for path in &archive.from { [INFO] [stdout] 348 | | in_files.push(path.clone()); [INFO] [stdout] ... | [INFO] [stdout] 351 | | _ => {} [INFO] [stdout] 352 | | } [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] 345 ~ if let PluginAction::Archive { archive } = action { [INFO] [stdout] 346 + for path in &archive.from { [INFO] [stdout] 347 + in_files.push(path.clone()); [INFO] [stdout] 348 + } [INFO] [stdout] 349 + } [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] --> src/actions/archive.rs:362:13 [INFO] [stdout] | [INFO] [stdout] 362 | / match action { [INFO] [stdout] 363 | | PluginAction::Archive { archive } => { [INFO] [stdout] 364 | | out_files.push(archive.to.clone()); [INFO] [stdout] ... | [INFO] [stdout] 367 | | } [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] 362 ~ if let PluginAction::Archive { archive } = action { [INFO] [stdout] 363 + out_files.push(archive.to.clone()); [INFO] [stdout] 364 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/actions/archive.rs:387:33 [INFO] [stdout] | [INFO] [stdout] 387 | if !std::fs::exists(&to_path.parent().unwrap()).unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `to_path.parent().unwrap()` [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/actions/archive.rs:388:36 [INFO] [stdout] | [INFO] [stdout] 388 | fs::create_dir_all(&to_path.parent().unwrap()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `to_path.parent().unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/extract.rs:152:13 [INFO] [stdout] | [INFO] [stdout] 152 | / match action { [INFO] [stdout] 153 | | PluginAction::Extract { extract } => { [INFO] [stdout] 154 | | in_files.push(extract.from.clone()); [INFO] [stdout] ... | [INFO] [stdout] 157 | | } [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] 152 ~ if let PluginAction::Extract { extract } = action { [INFO] [stdout] 153 + in_files.push(extract.from.clone()); [INFO] [stdout] 154 + } [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] --> src/actions/extract.rs:167:13 [INFO] [stdout] | [INFO] [stdout] 167 | / match action { [INFO] [stdout] 168 | | PluginAction::Extract { extract } => { [INFO] [stdout] 169 | | out_files.push(extract.to.clone()); [INFO] [stdout] 170 | | if let Some(plugin_out_files) = &extract.out_files { [INFO] [stdout] ... | [INFO] [stdout] 176 | | _ => {} [INFO] [stdout] 177 | | } [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] 167 ~ if let PluginAction::Extract { extract } = action { [INFO] [stdout] 168 + out_files.push(extract.to.clone()); [INFO] [stdout] 169 + if let Some(plugin_out_files) = &extract.out_files { [INFO] [stdout] 170 + for out_file in plugin_out_files { [INFO] [stdout] 171 + out_files.push(out_file.clone()); [INFO] [stdout] 172 + } [INFO] [stdout] 173 + } [INFO] [stdout] 174 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `result_secret` after checking its variant with `is_ok` [INFO] [stdout] --> src/actions/git_clone.rs:108:15 [INFO] [stdout] | [INFO] [stdout] 107 | if result_secret.is_ok() { [INFO] [stdout] | ------------------------ help: try: `if let Ok() = result_secret` [INFO] [stdout] 108 | match result_secret.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] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/actions/git_clone.rs:100:42 [INFO] [stdout] | [INFO] [stdout] 100 | emake::compiler::compile(secret, &emakefile_cwd.to_string(), maybe_replacements.as_ref(), None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_cwd` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/git_clone.rs:108:9 [INFO] [stdout] | [INFO] [stdout] 108 | / match result_secret.unwrap() { [INFO] [stdout] 109 | | emake::loader::Target::SecretEntry(secret_config) => { [INFO] [stdout] 110 | | if !secret_config.contains_key("type") { [INFO] [stdout] 111 | | return Err(format!("The secret {} must contains a type", secret).into()); [INFO] [stdout] ... | [INFO] [stdout] 124 | | _ => {} [INFO] [stdout] 125 | | }; [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] 108 ~ if let emake::loader::Target::SecretEntry(secret_config) = result_secret.unwrap() { [INFO] [stdout] 109 + if !secret_config.contains_key("type") { [INFO] [stdout] 110 + return Err(format!("The secret {} must contains a type", secret).into()); [INFO] [stdout] 111 + } [INFO] [stdout] 112 + let secret_type = [INFO] [stdout] 113 + String::from(secret_config.get("type").unwrap().as_str().unwrap()); [INFO] [stdout] 114 + let maybe_secret_plugin = CREDENTIALS_STORE.get(&secret_type); [INFO] [stdout] 115 + if let Some(secret_plugin) = maybe_secret_plugin { [INFO] [stdout] 116 + compiled_secret = secret_plugin.extract(&secret_config); [INFO] [stdout] 117 + } else { [INFO] [stdout] 118 + return Err( [INFO] [stdout] 119 + format!("The credential type {} does not exist", secret_type).into(), [INFO] [stdout] 120 + ); [INFO] [stdout] 121 + } [INFO] [stdout] 122 ~ }; [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] --> src/actions/mv.rs:73:13 [INFO] [stdout] | [INFO] [stdout] 73 | / match action { [INFO] [stdout] 74 | | PluginAction::Move { mv } => { [INFO] [stdout] 75 | | for file in &mv.from { [INFO] [stdout] 76 | | in_files.push(file.clone()); [INFO] [stdout] ... | [INFO] [stdout] 79 | | _ => {} [INFO] [stdout] 80 | | } [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] 73 ~ if let PluginAction::Move { mv } = action { [INFO] [stdout] 74 + for file in &mv.from { [INFO] [stdout] 75 + in_files.push(file.clone()); [INFO] [stdout] 76 + } [INFO] [stdout] 77 + } [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] --> src/actions/mv.rs:90:13 [INFO] [stdout] | [INFO] [stdout] 90 | / match action { [INFO] [stdout] 91 | | PluginAction::Move { mv } => { [INFO] [stdout] 92 | | out_files.push(mv.to.clone()); [INFO] [stdout] ... | [INFO] [stdout] 95 | | } [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] 90 ~ if let PluginAction::Move { mv } = action { [INFO] [stdout] 91 + out_files.push(mv.to.clone()); [INFO] [stdout] 92 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/actions/mv.rs:123:13 [INFO] [stdout] | [INFO] [stdout] 123 | let parent_folder; [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 `parent_folder` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 123 ~ [INFO] [stdout] 124 ~ let parent_folder = if is_dest_dir { [INFO] [stdout] 125 ~ destination.clone() [INFO] [stdout] 126 | } else { [INFO] [stdout] 127 ~ dest_path.parent().unwrap().to_string_lossy().to_string() [INFO] [stdout] 128 ~ }; [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] --> src/actions/git_clone.rs:268:13 [INFO] [stdout] | [INFO] [stdout] 268 | / match action { [INFO] [stdout] 269 | | PluginAction::GitClone { git_clone } => { [INFO] [stdout] 270 | | in_files.push(InFile::Simple(git_clone.url.clone())); [INFO] [stdout] ... | [INFO] [stdout] 273 | | } [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] 268 ~ if let PluginAction::GitClone { git_clone } = action { [INFO] [stdout] 269 + in_files.push(InFile::Simple(git_clone.url.clone())); [INFO] [stdout] 270 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/mv.rs:148:28 [INFO] [stdout] | [INFO] [stdout] 148 | if process_info.total_bytes > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ check performed here [INFO] [stdout] 149 | percent = ((process_info.copied_bytes * 100) / process_info.total_bytes) [INFO] [stdout] | -------------------------------------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] = note: `#[warn(clippy::manual_checked_ops)]` 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] --> src/actions/git_clone.rs:283:13 [INFO] [stdout] | [INFO] [stdout] 283 | / match action { [INFO] [stdout] 284 | | PluginAction::GitClone { git_clone } => { [INFO] [stdout] 285 | | let destination = PathBuf::from(git_clone.destination.clone()); [INFO] [stdout] 286 | | out_files.push(destination.to_string_lossy().to_string()); [INFO] [stdout] 287 | | } [INFO] [stdout] 288 | | _ => {} [INFO] [stdout] 289 | | } [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] 283 ~ if let PluginAction::GitClone { git_clone } = action { [INFO] [stdout] 284 + let destination = PathBuf::from(git_clone.destination.clone()); [INFO] [stdout] 285 + out_files.push(destination.to_string_lossy().to_string()); [INFO] [stdout] 286 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/actions/git_clone.rs:317:17 [INFO] [stdout] | [INFO] [stdout] 317 | maybe_replacements.map(|h| h.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `cloned` method: `maybe_replacements.cloned()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` 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] --> src/actions/git_clone.rs:336:21 [INFO] [stdout] | [INFO] [stdout] 336 | / match parsed_default_branch_result { [INFO] [stdout] 337 | | Ok(parsed_default_branch) => { [INFO] [stdout] 338 | | if parsed_default_branch.len() == 1 { [INFO] [stdout] 339 | | default_branch = parsed_default_branch[0].clone(); [INFO] [stdout] ... | [INFO] [stdout] 344 | | Err(_) => (), [INFO] [stdout] 345 | | } [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] 336 ~ if let Ok(parsed_default_branch) = parsed_default_branch_result { [INFO] [stdout] 337 + if parsed_default_branch.len() == 1 { [INFO] [stdout] 338 + default_branch = parsed_default_branch[0].clone(); [INFO] [stdout] 339 + } else { [INFO] [stdout] 340 + default_branch = parsed_default_branch[index].clone(); [INFO] [stdout] 341 + } [INFO] [stdout] 342 + } [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/actions/git_clone.rs:355:41 [INFO] [stdout] | [INFO] [stdout] 355 | let repo_name = repository [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 356 | | .split('/') [INFO] [stdout] 357 | | .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] 357 - .last() [INFO] [stdout] 357 + .next_back() [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] --> src/actions/remove.rs:51:13 [INFO] [stdout] | [INFO] [stdout] 51 | / match action { [INFO] [stdout] 52 | | PluginAction::Remove { remove } => { [INFO] [stdout] 53 | | for path in &remove.paths { [INFO] [stdout] 54 | | in_files.push(InFile::Simple(path.to_string())); [INFO] [stdout] ... | [INFO] [stdout] 57 | | _ => {} [INFO] [stdout] 58 | | } [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] 51 ~ if let PluginAction::Remove { remove } = action { [INFO] [stdout] 52 + for path in &remove.paths { [INFO] [stdout] 53 + in_files.push(InFile::Simple(path.to_string())); [INFO] [stdout] 54 + } [INFO] [stdout] 55 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/actions/git_clone.rs:388:36 [INFO] [stdout] | [INFO] [stdout] 388 | ...turn Err(format!("Error when cloning repository: You can't specify a password and an ssh_key at same time").into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `format!("Error when cloning repository: You can't specify a password and an ssh_key at same time")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/actions/git_clone.rs:388:36 [INFO] [stdout] | [INFO] [stdout] 388 | ...return Err(format!("Error when cloning repository: You can't specify a password and an ssh_key at same time").into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Error when cloning repository: You can't specify a password and an ssh_key at same time".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/git_clone.rs:397:28 [INFO] [stdout] | [INFO] [stdout] 397 | if total > 0 { [INFO] [stdout] | ^^^^^^^^^ check performed here [INFO] [stdout] ... [INFO] [stdout] 401 | let download_percent = received * 100 / total; [INFO] [stdout] | ---------------------- division performed here [INFO] [stdout] 402 | let index_percent = indexed * 100 / total; [INFO] [stdout] | --------------------- ... and here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/actions/archive.rs:68:23 [INFO] [stdout] | [INFO] [stdout] 68 | fn walk_with_excludes<'a>( [INFO] [stdout] | ^^ [INFO] [stdout] 69 | dir_path: &'a Path, [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 68 ~ fn walk_with_excludes( [INFO] [stdout] 69 ~ dir_path: &Path, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/actions/yaml.rs:87:21 [INFO] [stdout] | [INFO] [stdout] 87 | &update_value_string, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `update_value_string` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/yaml.rs:108:13 [INFO] [stdout] | [INFO] [stdout] 108 | / match action { [INFO] [stdout] 109 | | PluginAction::Yaml { yaml } => { [INFO] [stdout] 110 | | if let Some(from) = &yaml.from { [INFO] [stdout] 111 | | in_files.push(InFile::Simple(from.clone())); [INFO] [stdout] ... | [INFO] [stdout] 114 | | _ => {} [INFO] [stdout] 115 | | } [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] 108 ~ if let PluginAction::Yaml { yaml } = action { [INFO] [stdout] 109 + if let Some(from) = &yaml.from { [INFO] [stdout] 110 + in_files.push(InFile::Simple(from.clone())); [INFO] [stdout] 111 + } [INFO] [stdout] 112 + } [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] --> src/actions/yaml.rs:125:13 [INFO] [stdout] | [INFO] [stdout] 125 | / match action { [INFO] [stdout] 126 | | PluginAction::Yaml { yaml } => { [INFO] [stdout] 127 | | if let Some(to) = &yaml.to { [INFO] [stdout] 128 | | out_files.push(to.clone()); [INFO] [stdout] ... | [INFO] [stdout] 131 | | _ => {} [INFO] [stdout] 132 | | } [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] 125 ~ if let PluginAction::Yaml { yaml } = action { [INFO] [stdout] 126 + if let Some(to) = &yaml.to { [INFO] [stdout] 127 + out_files.push(to.clone()); [INFO] [stdout] 128 + } [INFO] [stdout] 129 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/archive.rs:150:38 [INFO] [stdout] | [INFO] [stdout] 150 | let percent = if total > 0 { [INFO] [stdout] | ^^^^^^^^^ check performed here [INFO] [stdout] 151 | Some(current * 100 / total) [INFO] [stdout] | --------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/yaml.rs:149:13 [INFO] [stdout] | [INFO] [stdout] 149 | / match action { [INFO] [stdout] 150 | | PluginAction::Yaml { yaml } => { [INFO] [stdout] 151 | | if yaml.from.is_none() && yaml.to.is_none() { [INFO] [stdout] 152 | | log::panic!( [INFO] [stdout] ... | [INFO] [stdout] 184 | | _ => {} [INFO] [stdout] 185 | | } [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] 149 ~ if let PluginAction::Yaml { yaml } = action { [INFO] [stdout] 150 + if yaml.from.is_none() && yaml.to.is_none() { [INFO] [stdout] 151 + log::panic!( [INFO] [stdout] 152 + "When using yaml action, you must define at least from or to property" [INFO] [stdout] 153 + ); [INFO] [stdout] 154 + } [INFO] [stdout] 155 + [INFO] [stdout] 156 + if yaml.from.is_some() { [INFO] [stdout] 157 + let from = &in_files[0]; [INFO] [stdout] 158 + let file_content = fs::read(from).unwrap(); [INFO] [stdout] 159 + let file_content_string = String::from_utf8(file_content).unwrap(); [INFO] [stdout] 160 + let mut from_yaml = [INFO] [stdout] 161 + serde_yml::from_str::(&file_content_string).unwrap(); [INFO] [stdout] 162 + merge_yaml( [INFO] [stdout] 163 + &mut from_yaml, [INFO] [stdout] 164 + &yaml.set, [INFO] [stdout] 165 + emakefile_cwd, [INFO] [stdout] 166 + maybe_replacements, [INFO] [stdout] 167 + ); [INFO] [stdout] 168 + [INFO] [stdout] 169 + let mut to = from; [INFO] [stdout] 170 + if yaml.to.is_some() { [INFO] [stdout] 171 + to = &out_files[0]; [INFO] [stdout] 172 + } [INFO] [stdout] 173 + [INFO] [stdout] 174 + fs::write(to, serde_yml::to_string(&from_yaml).unwrap()).unwrap(); [INFO] [stdout] 175 + } else if yaml.to.is_some() { [INFO] [stdout] 176 + let to = &out_files[0]; [INFO] [stdout] 177 + let mut to_yaml = [INFO] [stdout] 178 + serde_yml::from_str::("").unwrap(); [INFO] [stdout] 179 + merge_yaml(&mut to_yaml, &yaml.set, emakefile_cwd, maybe_replacements); [INFO] [stdout] 180 + fs::write(to, serde_yml::to_string(&to_yaml).unwrap()).unwrap(); [INFO] [stdout] 181 + } [INFO] [stdout] 182 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/actions.rs:47:10 [INFO] [stdout] | [INFO] [stdout] 47 | ) -> Pin>> + Send + 'a>>; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` 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] --> src/actions.rs:43:19 [INFO] [stdout] | [INFO] [stdout] 43 | in_files: &'a Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `&'a [String]` [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] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/actions.rs:44:19 [INFO] [stdout] | [INFO] [stdout] 44 | out_file: &'a Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `&'a [String]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/actions.rs:45:22 [INFO] [stdout] | [INFO] [stdout] 45 | working_dir: &'a String, [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `&'a str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (10/7) [INFO] [stdout] --> src/actions.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | / fn run<'a>( [INFO] [stdout] 37 | | &'a self, [INFO] [stdout] 38 | | target_id: &'a str, [INFO] [stdout] 39 | | step_id: &'a str, [INFO] [stdout] ... | [INFO] [stdout] 46 | | default_replacments: Option<&'a HashMap>, [INFO] [stdout] 47 | | ) -> Pin>> + Send + 'a>>; [INFO] [stdout] | |__________________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/actions.rs:65:31 [INFO] [stdout] | [INFO] [stdout] 65 | pub fn add(mut self, key: &String, action: Box) -> ActionsStore { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 65 ~ pub fn add(mut self, key: &str, action: Box) -> ActionsStore { [INFO] [stdout] 66 ~ self.actions.insert(key.to_owned(), action); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/actions.rs:70:56 [INFO] [stdout] | [INFO] [stdout] 70 | pub fn get(&self, action: &PluginAction) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&(dyn Action + Send + Sync)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/archive.rs:207:34 [INFO] [stdout] | [INFO] [stdout] 207 | let percent = if total > 0 { Some(current * 100 / total) } else { None }; [INFO] [stdout] | ^^^^^^^^^ --------------------- division performed here [INFO] [stdout] | | [INFO] [stdout] | check performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:43:49 [INFO] [stdout] | [INFO] [stdout] 43 | write_file_cache(&cache_out_file_to_update, &ignore_not_exists, &Vec::from([String::from("out_file")])); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `ignore_not_exists` [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/cache.rs:48:50 [INFO] [stdout] | [INFO] [stdout] 48 | if let Ok(file_exists) = std::fs::exists(&file_absolute_path) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:51:73 [INFO] [stdout] | [INFO] [stdout] 51 | let maybe_current_time = get_file_modification_time(&file_absolute_path); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [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/cache.rs:70:27 [INFO] [stdout] | [INFO] [stdout] 70 | match std::fs::exists(&file_absolute_path) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/cache.rs:71:45 [INFO] [stdout] | [INFO] [stdout] 71 | Ok(true) => match std::fs::metadata(&file_absolute_path) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/archive.rs:258:34 [INFO] [stdout] | [INFO] [stdout] 258 | let percent = if total > 0 { Some(current * 100 / total) } else { None }; [INFO] [stdout] | ^^^^^^^^^ --------------------- division performed here [INFO] [stdout] | | [INFO] [stdout] | check performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:99:42 [INFO] [stdout] | [INFO] [stdout] 99 | let cache_file_path = get_file_cache(&file_absolute_path); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [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/cache.rs:101:56 [INFO] [stdout] | [INFO] [stdout] 101 | if let Ok(cache_file_dir_exists) = std::fs::exists(&cache_file_dir) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `cache_file_dir` [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/cache.rs:104:37 [INFO] [stdout] | [INFO] [stdout] 104 | std::fs::create_dir_all(&cache_file_dir).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `cache_file_dir` [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: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/cache.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 109 | / for path in glob_paths { [INFO] [stdout] 110 | | if let Ok(p) = path { [INFO] [stdout] 111 | | fs::remove_file(p).unwrap(); [INFO] [stdout] 112 | | } [INFO] [stdout] 113 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/cache.rs:110:13 [INFO] [stdout] | [INFO] [stdout] 110 | / if let Ok(p) = path { [INFO] [stdout] 111 | | fs::remove_file(p).unwrap(); [INFO] [stdout] 112 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 109 ~ for p in glob_paths.flatten() { [INFO] [stdout] 110 + fs::remove_file(p).unwrap(); [INFO] [stdout] 111 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/cache.rs:121:9 [INFO] [stdout] | [INFO] [stdout] 121 | action_line.push_str(" "); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `action_line.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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:122:30 [INFO] [stdout] | [INFO] [stdout] 122 | action_line.push_str(&modification_date); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `modification_date` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:143:32 [INFO] [stdout] | [INFO] [stdout] 143 | lines.push(&action_line.as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `action_line.as_str()` [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/cache.rs:146:50 [INFO] [stdout] | [INFO] [stdout] 146 | std::fs::write(&cache_file_path, &lines.join("\n")).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `lines.join("\n")` [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: unneeded `()` [INFO] [stdout] --> src/cache.rs:147:24 [INFO] [stdout] | [INFO] [stdout] 147 | return (); [INFO] [stdout] | ^^ help: remove the `()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/archive.rs:311:34 [INFO] [stdout] | [INFO] [stdout] 311 | let percent = if total > 0 { [INFO] [stdout] | ^^^^^^^^^ check performed here [INFO] [stdout] 312 | Some(current * 100 / total) [INFO] [stdout] | --------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/archive.rs:345:13 [INFO] [stdout] | [INFO] [stdout] 345 | / match action { [INFO] [stdout] 346 | | PluginAction::Archive { archive } => { [INFO] [stdout] 347 | | for path in &archive.from { [INFO] [stdout] 348 | | in_files.push(path.clone()); [INFO] [stdout] ... | [INFO] [stdout] 351 | | _ => {} [INFO] [stdout] 352 | | } [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] 345 ~ if let PluginAction::Archive { archive } = action { [INFO] [stdout] 346 + for path in &archive.from { [INFO] [stdout] 347 + in_files.push(path.clone()); [INFO] [stdout] 348 + } [INFO] [stdout] 349 + } [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] --> src/actions/archive.rs:362:13 [INFO] [stdout] | [INFO] [stdout] 362 | / match action { [INFO] [stdout] 363 | | PluginAction::Archive { archive } => { [INFO] [stdout] 364 | | out_files.push(archive.to.clone()); [INFO] [stdout] ... | [INFO] [stdout] 367 | | } [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] 362 ~ if let PluginAction::Archive { archive } = action { [INFO] [stdout] 363 + out_files.push(archive.to.clone()); [INFO] [stdout] 364 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/actions/archive.rs:387:33 [INFO] [stdout] | [INFO] [stdout] 387 | if !std::fs::exists(&to_path.parent().unwrap()).unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `to_path.parent().unwrap()` [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/actions/archive.rs:388:36 [INFO] [stdout] | [INFO] [stdout] 388 | fs::create_dir_all(&to_path.parent().unwrap()).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `to_path.parent().unwrap()` [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: useless conversion to the same type: `std::path::PathBuf` [INFO] [stdout] --> src/commands/build.rs:63:26 [INFO] [stdout] | [INFO] [stdout] 63 | let mut build_file = PathBuf::from(get_cwd()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `PathBuf::from()`: `get_cwd()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `duration` after checking its variant with `is_some` [INFO] [stdout] --> src/commands/build.rs:76:42 [INFO] [stdout] | [INFO] [stdout] 75 | if duration.is_some() { [INFO] [stdout] | --------------------- help: try: `if let Some() = duration` [INFO] [stdout] 76 | let elapsed = format_elapsed(duration.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] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/commands/clean.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | / for out_file_result in glob::glob(&format!("{}/**/tag_out_file", cache_folder.to_str().unwrap())).unwrap() [INFO] [stdout] 23 | | { [INFO] [stdout] 24 | | if let Ok(out_file) = out_file_result { [INFO] [stdout] 25 | | let dirname = out_file.parent().unwrap(); [INFO] [stdout] ... | [INFO] [stdout] 36 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/commands/clean.rs:24:9 [INFO] [stdout] | [INFO] [stdout] 24 | / if let Ok(out_file) = out_file_result { [INFO] [stdout] 25 | | let dirname = out_file.parent().unwrap(); [INFO] [stdout] 26 | | // Exclude outfile that are also in_file for the same target [INFO] [stdout] 27 | | let has_in_file = dirname.join("tag_in_file").exists(); [INFO] [stdout] ... | [INFO] [stdout] 34 | | files_to_delete.push(file_to_delete); [INFO] [stdout] 35 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 22 ~ for out_file in glob::glob(&format!("{}/**/tag_out_file", cache_folder.to_str().unwrap())).unwrap().flatten() [INFO] [stdout] 23 ~ { [INFO] [stdout] 24 + let dirname = out_file.parent().unwrap(); [INFO] [stdout] 25 + // Exclude outfile that are also in_file for the same target [INFO] [stdout] 26 + let has_in_file = dirname.join("tag_in_file").exists(); [INFO] [stdout] 27 + if has_in_file { [INFO] [stdout] 28 + log::debug!("Ignoring file because it's also an in_file {:?}", out_file); [INFO] [stdout] 29 + continue; [INFO] [stdout] 30 + } [INFO] [stdout] 31 + [INFO] [stdout] 32 + let file_to_delete = dirname.to_string_lossy().replacen(cache_folder.to_str().unwrap(), "", 1); [INFO] [stdout] 33 + files_to_delete.push(file_to_delete); [INFO] [stdout] 34 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `result_secret` after checking its variant with `is_ok` [INFO] [stdout] --> src/actions/git_clone.rs:108:15 [INFO] [stdout] | [INFO] [stdout] 107 | if result_secret.is_ok() { [INFO] [stdout] | ------------------------ help: try: `if let Ok() = result_secret` [INFO] [stdout] 108 | match result_secret.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] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/actions/git_clone.rs:100:42 [INFO] [stdout] | [INFO] [stdout] 100 | emake::compiler::compile(secret, &emakefile_cwd.to_string(), maybe_replacements.as_ref(), None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_cwd` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/git_clone.rs:108:9 [INFO] [stdout] | [INFO] [stdout] 108 | / match result_secret.unwrap() { [INFO] [stdout] 109 | | emake::loader::Target::SecretEntry(secret_config) => { [INFO] [stdout] 110 | | if !secret_config.contains_key("type") { [INFO] [stdout] 111 | | return Err(format!("The secret {} must contains a type", secret).into()); [INFO] [stdout] ... | [INFO] [stdout] 124 | | _ => {} [INFO] [stdout] 125 | | }; [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] 108 ~ if let emake::loader::Target::SecretEntry(secret_config) = result_secret.unwrap() { [INFO] [stdout] 109 + if !secret_config.contains_key("type") { [INFO] [stdout] 110 + return Err(format!("The secret {} must contains a type", secret).into()); [INFO] [stdout] 111 + } [INFO] [stdout] 112 + let secret_type = [INFO] [stdout] 113 + String::from(secret_config.get("type").unwrap().as_str().unwrap()); [INFO] [stdout] 114 + let maybe_secret_plugin = CREDENTIALS_STORE.get(&secret_type); [INFO] [stdout] 115 + if let Some(secret_plugin) = maybe_secret_plugin { [INFO] [stdout] 116 + compiled_secret = secret_plugin.extract(&secret_config); [INFO] [stdout] 117 + } else { [INFO] [stdout] 118 + return Err( [INFO] [stdout] 119 + format!("The credential type {} does not exist", secret_type).into(), [INFO] [stdout] 120 + ); [INFO] [stdout] 121 + } [INFO] [stdout] 122 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/commands/doc.rs:28:55 [INFO] [stdout] | [INFO] [stdout] 28 | pub fn generate_secret_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 28 - pub fn generate_secret_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] 28 + pub fn generate_secret_doc(documentation_folder_path: &Path) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/commands/doc.rs:50:19 [INFO] [stdout] | [INFO] [stdout] 50 | fs::write(&secrets_doc_folder.join(format!("{}.md", doc.id)), secret_doc).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `secrets_doc_folder.join(format!("{}.md", doc.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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/git_clone.rs:268:13 [INFO] [stdout] | [INFO] [stdout] 268 | / match action { [INFO] [stdout] 269 | | PluginAction::GitClone { git_clone } => { [INFO] [stdout] 270 | | in_files.push(InFile::Simple(git_clone.url.clone())); [INFO] [stdout] ... | [INFO] [stdout] 273 | | } [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] 268 ~ if let PluginAction::GitClone { git_clone } = action { [INFO] [stdout] 269 + in_files.push(InFile::Simple(git_clone.url.clone())); [INFO] [stdout] 270 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/commands/doc.rs:59:54 [INFO] [stdout] | [INFO] [stdout] 59 | pub fn generate_types_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 59 - pub fn generate_types_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] 59 + pub fn generate_types_doc(documentation_folder_path: &Path) { [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] --> src/actions/git_clone.rs:283:13 [INFO] [stdout] | [INFO] [stdout] 283 | / match action { [INFO] [stdout] 284 | | PluginAction::GitClone { git_clone } => { [INFO] [stdout] 285 | | let destination = PathBuf::from(git_clone.destination.clone()); [INFO] [stdout] 286 | | out_files.push(destination.to_string_lossy().to_string()); [INFO] [stdout] 287 | | } [INFO] [stdout] 288 | | _ => {} [INFO] [stdout] 289 | | } [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] 283 ~ if let PluginAction::GitClone { git_clone } = action { [INFO] [stdout] 284 + let destination = PathBuf::from(git_clone.destination.clone()); [INFO] [stdout] 285 + out_files.push(destination.to_string_lossy().to_string()); [INFO] [stdout] 286 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/commands/doc.rs:90:56 [INFO] [stdout] | [INFO] [stdout] 90 | pub fn generate_actions_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 90 - pub fn generate_actions_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] 90 + pub fn generate_actions_doc(documentation_folder_path: &Path) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/actions/git_clone.rs:317:17 [INFO] [stdout] | [INFO] [stdout] 317 | maybe_replacements.map(|h| h.clone()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `cloned` method: `maybe_replacements.cloned()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/commands/doc.rs:119:27 [INFO] [stdout] | [INFO] [stdout] 119 | content.push_str(&format!("## Configuration options\n\n")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"## Configuration options\n\n".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/git_clone.rs:336:21 [INFO] [stdout] | [INFO] [stdout] 336 | / match parsed_default_branch_result { [INFO] [stdout] 337 | | Ok(parsed_default_branch) => { [INFO] [stdout] 338 | | if parsed_default_branch.len() == 1 { [INFO] [stdout] 339 | | default_branch = parsed_default_branch[0].clone(); [INFO] [stdout] ... | [INFO] [stdout] 344 | | Err(_) => (), [INFO] [stdout] 345 | | } [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] 336 ~ if let Ok(parsed_default_branch) = parsed_default_branch_result { [INFO] [stdout] 337 + if parsed_default_branch.len() == 1 { [INFO] [stdout] 338 + default_branch = parsed_default_branch[0].clone(); [INFO] [stdout] 339 + } else { [INFO] [stdout] 340 + default_branch = parsed_default_branch[index].clone(); [INFO] [stdout] 341 + } [INFO] [stdout] 342 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/commands/doc.rs:121:27 [INFO] [stdout] | [INFO] [stdout] 121 | content.push_str(&format!("| ---- | ----------- | -- | -- |\n")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"| ---- | ----------- | -- | -- |\n".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/actions/git_clone.rs:355:41 [INFO] [stdout] | [INFO] [stdout] 355 | let repo_name = repository [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 356 | | .split('/') [INFO] [stdout] 357 | | .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] 357 - .last() [INFO] [stdout] 357 + .next_back() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:18:34 [INFO] [stdout] | [INFO] [stdout] 18 | let keyring_entry = Entry::new(&service, &name).unwrap(); [INFO] [stdout] | ^^^^^^^^ help: change this to: `service` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:18:44 [INFO] [stdout] | [INFO] [stdout] 18 | let keyring_entry = Entry::new(&service, &name).unwrap(); [INFO] [stdout] | ^^^^^ help: change this to: `name` [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: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/commands/keyring.rs:20:10 [INFO] [stdout] | [INFO] [stdout] 20 | if let Ok(_) = keyring_entry.get_password() { [INFO] [stdout] | -------^^^^^------------------------------- help: try: `if keyring_entry.get_password().is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:31:30 [INFO] [stdout] | [INFO] [stdout] 31 | keyring_entry.set_password(&input.trim_end_matches(LINE_ENDING)).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `input.trim_end_matches(LINE_ENDING)` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:42:36 [INFO] [stdout] | [INFO] [stdout] 42 | let keyring_entry = Entry::new(&service, &name).unwrap(); [INFO] [stdout] | ^^^^^^^^ help: change this to: `service` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:42:46 [INFO] [stdout] | [INFO] [stdout] 42 | let keyring_entry = Entry::new(&service, &name).unwrap(); [INFO] [stdout] | ^^^^^ help: change this to: `name` [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: name `UNKNOWN` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | UNKNOWN, [INFO] [stdout] | ^^^^^^^ help: consider making the acronym lowercase, except the initial letter: `Unknown` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PIPE` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | PIPE, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Pipe` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PATH` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | PATH, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `HELPER` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | HELPER, [INFO] [stdout] | ^^^^^^ help: consider making the acronym lowercase, except the initial letter: `Helper` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PATH` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | PATH, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `VAR` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 33 | VAR, [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Var` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PIPE` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:34:5 [INFO] [stdout] | [INFO] [stdout] 34 | PIPE, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Pipe` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `STRING` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 35 | STRING, [INFO] [stdout] | ^^^^^^ help: consider making the acronym lowercase, except the initial letter: `String` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `UNKNOWN` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | UNKNOWN, [INFO] [stdout] | ^^^^^^^ help: consider making the acronym lowercase, except the initial letter: `Unknown` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> src/actions/git_clone.rs:388:36 [INFO] [stdout] | [INFO] [stdout] 388 | ...turn Err(format!("Error when cloning repository: You can't specify a password and an ssh_key at same time").into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `format!("Error when cloning repository: You can't specify a password and an ssh_key at same time")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/actions/git_clone.rs:388:36 [INFO] [stdout] | [INFO] [stdout] 388 | ...return Err(format!("Error when cloning repository: You can't specify a password and an ssh_key at same time").into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Error when cloning repository: You can't specify a password and an ssh_key at same time".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/actions/git_clone.rs:397:28 [INFO] [stdout] | [INFO] [stdout] 397 | if total > 0 { [INFO] [stdout] | ^^^^^^^^^ check performed here [INFO] [stdout] ... [INFO] [stdout] 401 | let download_percent = received * 100 / total; [INFO] [stdout] | ---------------------- division performed here [INFO] [stdout] 402 | let index_percent = indexed * 100 / total; [INFO] [stdout] | --------------------- ... and here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:84:34 [INFO] [stdout] | [INFO] [stdout] 84 | let real_cwd = cwd.unwrap_or(&global_cwd.as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `global_cwd.as_str()` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/actions/yaml.rs:87:21 [INFO] [stdout] | [INFO] [stdout] 87 | &update_value_string, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `update_value_string` [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: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/actions/yaml.rs:108:13 [INFO] [stdout] | [INFO] [stdout] 108 | / match action { [INFO] [stdout] 109 | | PluginAction::Yaml { yaml } => { [INFO] [stdout] 110 | | if let Some(from) = &yaml.from { [INFO] [stdout] 111 | | in_files.push(InFile::Simple(from.clone())); [INFO] [stdout] ... | [INFO] [stdout] 114 | | _ => {} [INFO] [stdout] 115 | | } [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] 108 ~ if let PluginAction::Yaml { yaml } = action { [INFO] [stdout] 109 + if let Some(from) = &yaml.from { [INFO] [stdout] 110 + in_files.push(InFile::Simple(from.clone())); [INFO] [stdout] 111 + } [INFO] [stdout] 112 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/compiler.rs:212:25 [INFO] [stdout] | [INFO] [stdout] 212 | return Some(credential_plugin.extract(&raw_credential)); [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] 212 - return Some(credential_plugin.extract(&raw_credential)); [INFO] [stdout] 212 + Some(credential_plugin.extract(&raw_credential)) [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] --> src/actions/yaml.rs:125:13 [INFO] [stdout] | [INFO] [stdout] 125 | / match action { [INFO] [stdout] 126 | | PluginAction::Yaml { yaml } => { [INFO] [stdout] 127 | | if let Some(to) = &yaml.to { [INFO] [stdout] 128 | | out_files.push(to.clone()); [INFO] [stdout] ... | [INFO] [stdout] 131 | | _ => {} [INFO] [stdout] 132 | | } [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] 125 ~ if let PluginAction::Yaml { yaml } = action { [INFO] [stdout] 126 + if let Some(to) = &yaml.to { [INFO] [stdout] 127 + out_files.push(to.clone()); [INFO] [stdout] 128 + } [INFO] [stdout] 129 + } [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] --> src/actions/yaml.rs:149:13 [INFO] [stdout] | [INFO] [stdout] 149 | / match action { [INFO] [stdout] 150 | | PluginAction::Yaml { yaml } => { [INFO] [stdout] 151 | | if yaml.from.is_none() && yaml.to.is_none() { [INFO] [stdout] 152 | | log::panic!( [INFO] [stdout] ... | [INFO] [stdout] 184 | | _ => {} [INFO] [stdout] 185 | | } [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] 149 ~ if let PluginAction::Yaml { yaml } = action { [INFO] [stdout] 150 + if yaml.from.is_none() && yaml.to.is_none() { [INFO] [stdout] 151 + log::panic!( [INFO] [stdout] 152 + "When using yaml action, you must define at least from or to property" [INFO] [stdout] 153 + ); [INFO] [stdout] 154 + } [INFO] [stdout] 155 + [INFO] [stdout] 156 + if yaml.from.is_some() { [INFO] [stdout] 157 + let from = &in_files[0]; [INFO] [stdout] 158 + let file_content = fs::read(from).unwrap(); [INFO] [stdout] 159 + let file_content_string = String::from_utf8(file_content).unwrap(); [INFO] [stdout] 160 + let mut from_yaml = [INFO] [stdout] 161 + serde_yml::from_str::(&file_content_string).unwrap(); [INFO] [stdout] 162 + merge_yaml( [INFO] [stdout] 163 + &mut from_yaml, [INFO] [stdout] 164 + &yaml.set, [INFO] [stdout] 165 + emakefile_cwd, [INFO] [stdout] 166 + maybe_replacements, [INFO] [stdout] 167 + ); [INFO] [stdout] 168 + [INFO] [stdout] 169 + let mut to = from; [INFO] [stdout] 170 + if yaml.to.is_some() { [INFO] [stdout] 171 + to = &out_files[0]; [INFO] [stdout] 172 + } [INFO] [stdout] 173 + [INFO] [stdout] 174 + fs::write(to, serde_yml::to_string(&from_yaml).unwrap()).unwrap(); [INFO] [stdout] 175 + } else if yaml.to.is_some() { [INFO] [stdout] 176 + let to = &out_files[0]; [INFO] [stdout] 177 + let mut to_yaml = [INFO] [stdout] 178 + serde_yml::from_str::("").unwrap(); [INFO] [stdout] 179 + merge_yaml(&mut to_yaml, &yaml.set, emakefile_cwd, maybe_replacements); [INFO] [stdout] 180 + fs::write(to, serde_yml::to_string(&to_yaml).unwrap()).unwrap(); [INFO] [stdout] 181 + } [INFO] [stdout] 182 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/actions.rs:47:10 [INFO] [stdout] | [INFO] [stdout] 47 | ) -> Pin>> + Send + 'a>>; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` 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] --> src/actions.rs:43:19 [INFO] [stdout] | [INFO] [stdout] 43 | in_files: &'a Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `&'a [String]` [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] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/actions.rs:44:19 [INFO] [stdout] | [INFO] [stdout] 44 | out_file: &'a Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `&'a [String]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/actions.rs:45:22 [INFO] [stdout] | [INFO] [stdout] 45 | working_dir: &'a String, [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `&'a str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (10/7) [INFO] [stdout] --> src/actions.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | / fn run<'a>( [INFO] [stdout] 37 | | &'a self, [INFO] [stdout] 38 | | target_id: &'a str, [INFO] [stdout] 39 | | step_id: &'a str, [INFO] [stdout] ... | [INFO] [stdout] 46 | | default_replacments: Option<&'a HashMap>, [INFO] [stdout] 47 | | ) -> Pin>> + Send + 'a>>; [INFO] [stdout] | |__________________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/actions.rs:65:31 [INFO] [stdout] | [INFO] [stdout] 65 | pub fn add(mut self, key: &String, action: Box) -> ActionsStore { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 65 ~ pub fn add(mut self, key: &str, action: Box) -> ActionsStore { [INFO] [stdout] 66 ~ self.actions.insert(key.to_owned(), action); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/actions.rs:70:56 [INFO] [stdout] | [INFO] [stdout] 70 | pub fn get(&self, action: &PluginAction) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&(dyn Action + Send + Sync)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/compiler.rs:298:13 [INFO] [stdout] | [INFO] [stdout] 298 | return _resolve_variable(&v, original, emakefile_current_path, counter); [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] 298 - return _resolve_variable(&v, original, emakefile_current_path, counter); [INFO] [stdout] 298 + _resolve_variable(&v, original, emakefile_current_path, counter) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:314:38 [INFO] [stdout] | [INFO] [stdout] 314 | let resolved = get_user_variable(&pipe_in, emakefile_current_path) [INFO] [stdout] | ^^^^^^^^ help: change this to: `pipe_in` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:43:49 [INFO] [stdout] | [INFO] [stdout] 43 | write_file_cache(&cache_out_file_to_update, &ignore_not_exists, &Vec::from([String::from("out_file")])); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `ignore_not_exists` [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/cache.rs:48:50 [INFO] [stdout] | [INFO] [stdout] 48 | if let Ok(file_exists) = std::fs::exists(&file_absolute_path) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:51:73 [INFO] [stdout] | [INFO] [stdout] 51 | let maybe_current_time = get_file_modification_time(&file_absolute_path); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [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/cache.rs:70:27 [INFO] [stdout] | [INFO] [stdout] 70 | match std::fs::exists(&file_absolute_path) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/cache.rs:71:45 [INFO] [stdout] | [INFO] [stdout] 71 | Ok(true) => match std::fs::metadata(&file_absolute_path) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:417:24 [INFO] [stdout] | [INFO] [stdout] 417 | if cumulate_token_chars.trim().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!cumulate_token_chars.trim().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] --> src/emake/compiler.rs:425:24 [INFO] [stdout] | [INFO] [stdout] 425 | if cumulate_token_chars.trim().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!cumulate_token_chars.trim().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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:99:42 [INFO] [stdout] | [INFO] [stdout] 99 | let cache_file_path = get_file_cache(&file_absolute_path); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: change this to: `file_absolute_path` [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: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:435:24 [INFO] [stdout] | [INFO] [stdout] 435 | if cumulate_token_chars.trim().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!cumulate_token_chars.trim().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] --> src/cache.rs:101:56 [INFO] [stdout] | [INFO] [stdout] 101 | if let Ok(cache_file_dir_exists) = std::fs::exists(&cache_file_dir) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `cache_file_dir` [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/cache.rs:104:37 [INFO] [stdout] | [INFO] [stdout] 104 | std::fs::create_dir_all(&cache_file_dir).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `cache_file_dir` [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: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/cache.rs:109:9 [INFO] [stdout] | [INFO] [stdout] 109 | / for path in glob_paths { [INFO] [stdout] 110 | | if let Ok(p) = path { [INFO] [stdout] 111 | | fs::remove_file(p).unwrap(); [INFO] [stdout] 112 | | } [INFO] [stdout] 113 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/cache.rs:110:13 [INFO] [stdout] | [INFO] [stdout] 110 | / if let Ok(p) = path { [INFO] [stdout] 111 | | fs::remove_file(p).unwrap(); [INFO] [stdout] 112 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 109 ~ for p in glob_paths.flatten() { [INFO] [stdout] 110 + fs::remove_file(p).unwrap(); [INFO] [stdout] 111 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/cache.rs:121:9 [INFO] [stdout] | [INFO] [stdout] 121 | action_line.push_str(" "); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `action_line.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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:122:30 [INFO] [stdout] | [INFO] [stdout] 122 | action_line.push_str(&modification_date); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `modification_date` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/cache.rs:143:32 [INFO] [stdout] | [INFO] [stdout] 143 | lines.push(&action_line.as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `action_line.as_str()` [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/cache.rs:146:50 [INFO] [stdout] | [INFO] [stdout] 146 | std::fs::write(&cache_file_path, &lines.join("\n")).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: change this to: `lines.join("\n")` [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: unneeded `()` [INFO] [stdout] --> src/cache.rs:147:24 [INFO] [stdout] | [INFO] [stdout] 147 | return (); [INFO] [stdout] | ^^ help: remove the `()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit [INFO] [stdout] = note: `#[warn(clippy::unused_unit)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:537:8 [INFO] [stdout] | [INFO] [stdout] 537 | if cumulate_token_chars.trim().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!cumulate_token_chars.trim().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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:561:20 [INFO] [stdout] | [INFO] [stdout] 561 | if helper.1 == String::from("glob") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `"glob"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] = note: `#[warn(clippy::cmp_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:562:12 [INFO] [stdout] | [INFO] [stdout] 562 | if args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:570:27 [INFO] [stdout] | [INFO] [stdout] 570 | } else if helper.1 == String::from("array_to_shell") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"array_to_shell"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:571:12 [INFO] [stdout] | [INFO] [stdout] 571 | if args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:579:27 [INFO] [stdout] | [INFO] [stdout] 579 | } else if helper.1 == String::from("values_of") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"values_of"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:580:12 [INFO] [stdout] | [INFO] [stdout] 580 | if args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:589:27 [INFO] [stdout] | [INFO] [stdout] 589 | } else if helper.1 == String::from("keys_of") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"keys_of"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:590:12 [INFO] [stdout] | [INFO] [stdout] 590 | if args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:599:27 [INFO] [stdout] | [INFO] [stdout] 599 | } else if helper.1 == String::from("prepend_text") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"prepend_text"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:609:27 [INFO] [stdout] | [INFO] [stdout] 609 | } else if helper.1 == String::from("append_text") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"append_text"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::path::PathBuf` [INFO] [stdout] --> src/commands/build.rs:63:26 [INFO] [stdout] | [INFO] [stdout] 63 | let mut build_file = PathBuf::from(get_cwd()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `PathBuf::from()`: `get_cwd()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `duration` after checking its variant with `is_some` [INFO] [stdout] --> src/commands/build.rs:76:42 [INFO] [stdout] | [INFO] [stdout] 75 | if duration.is_some() { [INFO] [stdout] | --------------------- help: try: `if let Some() = duration` [INFO] [stdout] 76 | let elapsed = format_elapsed(duration.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] [INFO] [stdout] [INFO] [stdout] warning: this creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:619:27 [INFO] [stdout] | [INFO] [stdout] 619 | } else if helper.1 == String::from("prepend_in_array") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"prepend_in_array"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:629:27 [INFO] [stdout] | [INFO] [stdout] 629 | } else if helper.1 == String::from("append_in_array") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"append_in_array"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/commands/clean.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | / for out_file_result in glob::glob(&format!("{}/**/tag_out_file", cache_folder.to_str().unwrap())).unwrap() [INFO] [stdout] 23 | | { [INFO] [stdout] 24 | | if let Ok(out_file) = out_file_result { [INFO] [stdout] 25 | | let dirname = out_file.parent().unwrap(); [INFO] [stdout] ... | [INFO] [stdout] 36 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/commands/clean.rs:24:9 [INFO] [stdout] | [INFO] [stdout] 24 | / if let Ok(out_file) = out_file_result { [INFO] [stdout] 25 | | let dirname = out_file.parent().unwrap(); [INFO] [stdout] 26 | | // Exclude outfile that are also in_file for the same target [INFO] [stdout] 27 | | let has_in_file = dirname.join("tag_in_file").exists(); [INFO] [stdout] ... | [INFO] [stdout] 34 | | files_to_delete.push(file_to_delete); [INFO] [stdout] 35 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 22 ~ for out_file in glob::glob(&format!("{}/**/tag_out_file", cache_folder.to_str().unwrap())).unwrap().flatten() [INFO] [stdout] 23 ~ { [INFO] [stdout] 24 + let dirname = out_file.parent().unwrap(); [INFO] [stdout] 25 + // Exclude outfile that are also in_file for the same target [INFO] [stdout] 26 + let has_in_file = dirname.join("tag_in_file").exists(); [INFO] [stdout] 27 + if has_in_file { [INFO] [stdout] 28 + log::debug!("Ignoring file because it's also an in_file {:?}", out_file); [INFO] [stdout] 29 + continue; [INFO] [stdout] 30 + } [INFO] [stdout] 31 + [INFO] [stdout] 32 + let file_to_delete = dirname.to_string_lossy().replacen(cache_folder.to_str().unwrap(), "", 1); [INFO] [stdout] 33 + files_to_delete.push(file_to_delete); [INFO] [stdout] 34 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/emake/compiler.rs:655:9 [INFO] [stdout] | [INFO] [stdout] 655 | / if context.0 == TOKEN_TAG::HELPER { [INFO] [stdout] 656 | | if current_token.0 != TOKEN_TAG::ARG_PATH && current_token.0 != TOKEN_TAG::ARG_STRING { [INFO] [stdout] 657 | | execute_helper( [INFO] [stdout] 658 | | &context, [INFO] [stdout] ... | [INFO] [stdout] 669 | | } [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] 655 ~ if context.0 == TOKEN_TAG::HELPER [INFO] [stdout] 656 ~ && current_token.0 != TOKEN_TAG::ARG_PATH && current_token.0 != TOKEN_TAG::ARG_STRING { [INFO] [stdout] 657 | execute_helper( [INFO] [stdout] ... [INFO] [stdout] 667 | args.clear(); [INFO] [stdout] 668 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: compiling a regex in a loop [INFO] [stdout] --> src/emake/compiler.rs:686:34 [INFO] [stdout] | [INFO] [stdout] 686 | let var_re = Regex::new(r"\$\{([^}]+)\}").unwrap(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/emake/compiler.rs:654:5 [INFO] [stdout] | [INFO] [stdout] 654 | for current_token in tokens { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] = note: `#[warn(clippy::regex_creation_in_loops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:691:44 [INFO] [stdout] | [INFO] [stdout] 691 | ... .unwrap_or(&&var_caps[0].to_string()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `(&var_caps[0].to_string())` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:718:53 [INFO] [stdout] | [INFO] [stdout] 718 | get_target_on_path(current_str, &emakefile_current_path, None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `emakefile_current_path` [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: compiling a regex in a loop [INFO] [stdout] --> src/emake/compiler.rs:742:34 [INFO] [stdout] | [INFO] [stdout] 742 | let var_re = Regex::new(r"\$\{([^}]+)\}").unwrap(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/emake/compiler.rs:654:5 [INFO] [stdout] | [INFO] [stdout] 654 | for current_token in tokens { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:747:44 [INFO] [stdout] | [INFO] [stdout] 747 | ... .unwrap_or(&&var_caps[0].to_string()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `(&var_caps[0].to_string())` [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: variant name starts with the enum's name [INFO] [stdout] --> src/emake/loader.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | TargetEntry(emake::Target), [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: all variants have the same postfix: `Entry` [INFO] [stdout] --> src/emake/loader.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | / pub enum Target { [INFO] [stdout] 21 | | TargetEntry(emake::Target), [INFO] [stdout] 22 | | VariableEntry(VariableEntry), [INFO] [stdout] 23 | | SecretEntry(SecretEntry), [INFO] [stdout] 24 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [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: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:34:5 [INFO] [stdout] | [INFO] [stdout] 34 | return content_result.ok().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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 34 - return content_result.ok().unwrap(); [INFO] [stdout] 34 + content_result.ok().unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/loader.rs:79:12 [INFO] [stdout] | [INFO] [stdout] 79 | if target_split.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!target_split.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: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/commands/doc.rs:28:55 [INFO] [stdout] | [INFO] [stdout] 28 | pub fn generate_secret_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 28 - pub fn generate_secret_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] 28 + pub fn generate_secret_doc(documentation_folder_path: &Path) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/commands/doc.rs:50:19 [INFO] [stdout] | [INFO] [stdout] 50 | fs::write(&secrets_doc_folder.join(format!("{}.md", doc.id)), secret_doc).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `secrets_doc_folder.join(format!("{}.md", doc.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: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/commands/doc.rs:59:54 [INFO] [stdout] | [INFO] [stdout] 59 | pub fn generate_types_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 59 - pub fn generate_types_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] 59 + pub fn generate_types_doc(documentation_folder_path: &Path) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:195:17 [INFO] [stdout] | [INFO] [stdout] 195 | / return Ok(Target::TargetEntry( [INFO] [stdout] 196 | | emakefile [INFO] [stdout] 197 | | .targets [INFO] [stdout] 198 | | .get(&secrets_path_info.target_name) [INFO] [stdout] 199 | | .unwrap() [INFO] [stdout] 200 | | .to_owned(), [INFO] [stdout] 201 | | )); [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] 195 ~ Ok(Target::TargetEntry( [INFO] [stdout] 196 + emakefile [INFO] [stdout] 197 + .targets [INFO] [stdout] 198 + .get(&secrets_path_info.target_name) [INFO] [stdout] 199 + .unwrap() [INFO] [stdout] 200 + .to_owned(), [INFO] [stdout] 201 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:203:17 [INFO] [stdout] | [INFO] [stdout] 203 | / return Err(format!( [INFO] [stdout] 204 | | "No target named {} found in Emakefile {}", [INFO] [stdout] 205 | | secrets_path_info.target_name, [INFO] [stdout] 206 | | secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 207 | | )); [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] 203 ~ Err(format!( [INFO] [stdout] 204 + "No target named {} found in Emakefile {}", [INFO] [stdout] 205 + secrets_path_info.target_name, [INFO] [stdout] 206 + secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 207 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:213:21 [INFO] [stdout] | [INFO] [stdout] 213 | / return Ok(Target::SecretEntry( [INFO] [stdout] 214 | | secrets [INFO] [stdout] 215 | | .get(&secrets_path_info.target_name) [INFO] [stdout] 216 | | .unwrap() [INFO] [stdout] 217 | | .to_owned(), [INFO] [stdout] 218 | | )); [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] 213 ~ Ok(Target::SecretEntry( [INFO] [stdout] 214 + secrets [INFO] [stdout] 215 + .get(&secrets_path_info.target_name) [INFO] [stdout] 216 + .unwrap() [INFO] [stdout] 217 + .to_owned(), [INFO] [stdout] 218 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:220:21 [INFO] [stdout] | [INFO] [stdout] 220 | / return Err(format!( [INFO] [stdout] 221 | | "No secrets named {} found in Emakefile {}", [INFO] [stdout] 222 | | secrets_path_info.target_name, [INFO] [stdout] 223 | | secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 224 | | )); [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] 220 ~ Err(format!( [INFO] [stdout] 221 + "No secrets named {} found in Emakefile {}", [INFO] [stdout] 222 + secrets_path_info.target_name, [INFO] [stdout] 223 + secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 224 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:227:17 [INFO] [stdout] | [INFO] [stdout] 227 | / return Err(format!( [INFO] [stdout] 228 | | "No secrets defined in Emakefile {}. Expected a credential named {}", [INFO] [stdout] 229 | | secrets_path_info.emakefile_path.to_str().unwrap(), [INFO] [stdout] 230 | | secrets_path_info.target_name [INFO] [stdout] 231 | | )); [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] 227 ~ Err(format!( [INFO] [stdout] 228 + "No secrets defined in Emakefile {}. Expected a credential named {}", [INFO] [stdout] 229 + secrets_path_info.emakefile_path.to_str().unwrap(), [INFO] [stdout] 230 + secrets_path_info.target_name [INFO] [stdout] 231 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:238:25 [INFO] [stdout] | [INFO] [stdout] 238 | / return Ok(Target::VariableEntry( [INFO] [stdout] 239 | | val.to_owned(), [INFO] [stdout] 240 | | )); [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] 238 ~ Ok(Target::VariableEntry( [INFO] [stdout] 239 + val.to_owned(), [INFO] [stdout] 240 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:243:25 [INFO] [stdout] | [INFO] [stdout] 243 | / return Err(format!( [INFO] [stdout] 244 | | "No variable named {} found in Emakefile {}", [INFO] [stdout] 245 | | secrets_path_info.target_name, [INFO] [stdout] 246 | | secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 247 | | )); [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] 243 ~ Err(format!( [INFO] [stdout] 244 + "No variable named {} found in Emakefile {}", [INFO] [stdout] 245 + secrets_path_info.target_name, [INFO] [stdout] 246 + secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 247 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:251:17 [INFO] [stdout] | [INFO] [stdout] 251 | / return Err(format!( [INFO] [stdout] 252 | | "No variables defined in Emakefile {}. Expected a variable named {}", [INFO] [stdout] 253 | | secrets_path_info.emakefile_path.to_str().unwrap(), [INFO] [stdout] 254 | | secrets_path_info.target_name [INFO] [stdout] 255 | | )); [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] 251 ~ Err(format!( [INFO] [stdout] 252 + "No variables defined in Emakefile {}. Expected a variable named {}", [INFO] [stdout] 253 + secrets_path_info.emakefile_path.to_str().unwrap(), [INFO] [stdout] 254 + secrets_path_info.target_name [INFO] [stdout] 255 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/loader.rs:183:46 [INFO] [stdout] | [INFO] [stdout] 183 | let emakefile = emake::loader::load_file(&secrets_path_info.emakefile_path.to_str().unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `secrets_path_info.emakefile_path.to_str().unwrap()` [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: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/commands/doc.rs:90:56 [INFO] [stdout] | [INFO] [stdout] 90 | pub fn generate_actions_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 90 - pub fn generate_actions_doc(documentation_folder_path: &PathBuf) { [INFO] [stdout] 90 + pub fn generate_actions_doc(documentation_folder_path: &Path) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:272:5 [INFO] [stdout] | [INFO] [stdout] 272 | return emakefile; [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] 272 - return emakefile; [INFO] [stdout] 272 + emakefile [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/commands/doc.rs:119:27 [INFO] [stdout] | [INFO] [stdout] 119 | content.push_str(&format!("## Configuration options\n\n")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"## Configuration options\n\n".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/commands/doc.rs:121:27 [INFO] [stdout] | [INFO] [stdout] 121 | content.push_str(&format!("| ---- | ----------- | -- | -- |\n")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"| ---- | ----------- | -- | -- |\n".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:18:34 [INFO] [stdout] | [INFO] [stdout] 18 | let keyring_entry = Entry::new(&service, &name).unwrap(); [INFO] [stdout] | ^^^^^^^^ help: change this to: `service` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:18:44 [INFO] [stdout] | [INFO] [stdout] 18 | let keyring_entry = Entry::new(&service, &name).unwrap(); [INFO] [stdout] | ^^^^^ help: change this to: `name` [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: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/commands/keyring.rs:20:10 [INFO] [stdout] | [INFO] [stdout] 20 | if let Ok(_) = keyring_entry.get_password() { [INFO] [stdout] | -------^^^^^------------------------------- help: try: `if keyring_entry.get_password().is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:31:30 [INFO] [stdout] | [INFO] [stdout] 31 | keyring_entry.set_password(&input.trim_end_matches(LINE_ENDING)).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `input.trim_end_matches(LINE_ENDING)` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:42:36 [INFO] [stdout] | [INFO] [stdout] 42 | let keyring_entry = Entry::new(&service, &name).unwrap(); [INFO] [stdout] | ^^^^^^^^ help: change this to: `service` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/commands/keyring.rs:42:46 [INFO] [stdout] | [INFO] [stdout] 42 | let keyring_entry = Entry::new(&service, &name).unwrap(); [INFO] [stdout] | ^^^^^ help: change this to: `name` [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: name `UNKNOWN` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | UNKNOWN, [INFO] [stdout] | ^^^^^^^ help: consider making the acronym lowercase, except the initial letter: `Unknown` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PIPE` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | PIPE, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Pipe` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PATH` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | PATH, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `HELPER` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | HELPER, [INFO] [stdout] | ^^^^^^ help: consider making the acronym lowercase, except the initial letter: `Helper` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PATH` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | PATH, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `VAR` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 33 | VAR, [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Var` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `PIPE` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:34:5 [INFO] [stdout] | [INFO] [stdout] 34 | PIPE, [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Pipe` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `STRING` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 35 | STRING, [INFO] [stdout] | ^^^^^^ help: consider making the acronym lowercase, except the initial letter: `String` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `UNKNOWN` contains a capitalized acronym [INFO] [stdout] --> src/emake/compiler.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | UNKNOWN, [INFO] [stdout] | ^^^^^^^ help: consider making the acronym lowercase, except the initial letter: `Unknown` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:84:34 [INFO] [stdout] | [INFO] [stdout] 84 | let real_cwd = cwd.unwrap_or(&global_cwd.as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `global_cwd.as_str()` [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: unneeded `return` statement [INFO] [stdout] --> src/emake/compiler.rs:212:25 [INFO] [stdout] | [INFO] [stdout] 212 | return Some(credential_plugin.extract(&raw_credential)); [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] 212 - return Some(credential_plugin.extract(&raw_credential)); [INFO] [stdout] 212 + Some(credential_plugin.extract(&raw_credential)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/compiler.rs:298:13 [INFO] [stdout] | [INFO] [stdout] 298 | return _resolve_variable(&v, original, emakefile_current_path, counter); [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] 298 - return _resolve_variable(&v, original, emakefile_current_path, counter); [INFO] [stdout] 298 + _resolve_variable(&v, original, emakefile_current_path, counter) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/graph/generator.rs:13:11 [INFO] [stdout] | [INFO] [stdout] 13 | path: &String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 13 - path: &String, [INFO] [stdout] 13 + path: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/graph/generator.rs:40:9 [INFO] [stdout] | [INFO] [stdout] 40 | let target_path; [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] help: move the declaration `target_path` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 40 ~ [INFO] [stdout] 41 ~ let target_path = if path_parts.len() > 0 { [INFO] [stdout] 42 ~ format!( [INFO] [stdout] 43 | "{}/{}/targets:{}", [INFO] [stdout] ... [INFO] [stdout] 46 | target_key [INFO] [stdout] 47 ~ ) [INFO] [stdout] 48 | } else { [INFO] [stdout] 49 ~ format!("{}/targets:{}", &parent_target_path, target_key) [INFO] [stdout] 50 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/graph/generator.rs:41:12 [INFO] [stdout] | [INFO] [stdout] 41 | if path_parts.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!path_parts.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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:314:38 [INFO] [stdout] | [INFO] [stdout] 314 | let resolved = get_user_variable(&pipe_in, emakefile_current_path) [INFO] [stdout] | ^^^^^^^^ help: change this to: `pipe_in` [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: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:417:24 [INFO] [stdout] | [INFO] [stdout] 417 | if cumulate_token_chars.trim().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!cumulate_token_chars.trim().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] --> src/emake/compiler.rs:425:24 [INFO] [stdout] | [INFO] [stdout] 425 | if cumulate_token_chars.trim().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!cumulate_token_chars.trim().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: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:435:24 [INFO] [stdout] | [INFO] [stdout] 435 | if cumulate_token_chars.trim().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!cumulate_token_chars.trim().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: returning the result of a `let` binding from a block [INFO] [stdout] --> src/graph/generator.rs:94:5 [INFO] [stdout] | [INFO] [stdout] 93 | let target_path_parts = cwd.join(result).join("Emakefile"); [INFO] [stdout] | ----------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 94 | target_path_parts [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 93 ~ [INFO] [stdout] 94 ~ cwd.join(result).join("Emakefile") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:537:8 [INFO] [stdout] | [INFO] [stdout] 537 | if cumulate_token_chars.trim().len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!cumulate_token_chars.trim().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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:60:17 [INFO] [stdout] | [INFO] [stdout] 60 | &credential_password, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `credential_password` [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: this creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:561:20 [INFO] [stdout] | [INFO] [stdout] 561 | if helper.1 == String::from("glob") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `"glob"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] = note: `#[warn(clippy::cmp_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:562:12 [INFO] [stdout] | [INFO] [stdout] 562 | if args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:570:27 [INFO] [stdout] | [INFO] [stdout] 570 | } else if helper.1 == String::from("array_to_shell") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"array_to_shell"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:571:12 [INFO] [stdout] | [INFO] [stdout] 571 | if args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:579:27 [INFO] [stdout] | [INFO] [stdout] 579 | } else if helper.1 == String::from("values_of") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"values_of"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:580:12 [INFO] [stdout] | [INFO] [stdout] 580 | if args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:589:27 [INFO] [stdout] | [INFO] [stdout] 589 | } else if helper.1 == String::from("keys_of") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"keys_of"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/compiler.rs:590:12 [INFO] [stdout] | [INFO] [stdout] 590 | if args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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 creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:599:27 [INFO] [stdout] | [INFO] [stdout] 599 | } else if helper.1 == String::from("prepend_text") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"prepend_text"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:609:27 [INFO] [stdout] | [INFO] [stdout] 609 | } else if helper.1 == String::from("append_text") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"append_text"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:619:27 [INFO] [stdout] | [INFO] [stdout] 619 | } else if helper.1 == String::from("prepend_in_array") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"prepend_in_array"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this creates an owned instance just for comparison [INFO] [stdout] --> src/emake/compiler.rs:629:27 [INFO] [stdout] | [INFO] [stdout] 629 | } else if helper.1 == String::from("append_in_array") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `"append_in_array"` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/graph/runner.rs:164:12 [INFO] [stdout] | [INFO] [stdout] 164 | if total_size > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ check performed here [INFO] [stdout] 165 | percent = ((downloaded * 100) / total_size) as usize [INFO] [stdout] | --------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/emake/compiler.rs:655:9 [INFO] [stdout] | [INFO] [stdout] 655 | / if context.0 == TOKEN_TAG::HELPER { [INFO] [stdout] 656 | | if current_token.0 != TOKEN_TAG::ARG_PATH && current_token.0 != TOKEN_TAG::ARG_STRING { [INFO] [stdout] 657 | | execute_helper( [INFO] [stdout] 658 | | &context, [INFO] [stdout] ... | [INFO] [stdout] 669 | | } [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] 655 ~ if context.0 == TOKEN_TAG::HELPER [INFO] [stdout] 656 ~ && current_token.0 != TOKEN_TAG::ARG_PATH && current_token.0 != TOKEN_TAG::ARG_STRING { [INFO] [stdout] 657 | execute_helper( [INFO] [stdout] ... [INFO] [stdout] 667 | args.clear(); [INFO] [stdout] 668 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: compiling a regex in a loop [INFO] [stdout] --> src/emake/compiler.rs:686:34 [INFO] [stdout] | [INFO] [stdout] 686 | let var_re = Regex::new(r"\$\{([^}]+)\}").unwrap(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/emake/compiler.rs:654:5 [INFO] [stdout] | [INFO] [stdout] 654 | for current_token in tokens { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] = note: `#[warn(clippy::regex_creation_in_loops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/graph/runner.rs:184:20 [INFO] [stdout] | [INFO] [stdout] 184 | return segments.last().map(|s| s.to_string()); [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] 183 ~ if let Some(mut segments) = parsed_url.path_segments() { [INFO] [stdout] 184 ~ return segments.next_back().map(|s| s.to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:691:44 [INFO] [stdout] | [INFO] [stdout] 691 | ... .unwrap_or(&&var_caps[0].to_string()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `(&var_caps[0].to_string())` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:718:53 [INFO] [stdout] | [INFO] [stdout] 718 | get_target_on_path(current_str, &emakefile_current_path, None); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `emakefile_current_path` [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: function call inside of `expect` [INFO] [stdout] --> src/graph/runner.rs:196:50 [INFO] [stdout] | [INFO] [stdout] 196 | let plugin = ACTIONS_STORE.get(&step.action).expect(&format!( [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 197 | | "Can't execute step \"{}\", we are not able to find the action used in this step", [INFO] [stdout] 198 | | step.description.clone() [INFO] [stdout] 199 | | )); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] = note: `#[warn(clippy::expect_fun_call)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 196 ~ let plugin = ACTIONS_STORE.get(&step.action).unwrap_or_else(|| panic!("Can't execute step \"{}\", we are not able to find the action used in this step", [INFO] [stdout] 197 ~ step.description.clone())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:230:29 [INFO] [stdout] | [INFO] [stdout] 230 | file_path = &detailed_file; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `detailed_file` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:236:13 [INFO] [stdout] | [INFO] [stdout] 236 | &file_path, [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `file_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/graph/runner.rs:246:9 [INFO] [stdout] | [INFO] [stdout] 246 | / match parsed_compiled_files_result { [INFO] [stdout] 247 | | Ok(parsed_compiled_files) => files = parsed_compiled_files, [INFO] [stdout] 248 | | Err(_) => (), [INFO] [stdout] 249 | | } [INFO] [stdout] | |_________^ help: try: `if let Ok(parsed_compiled_files) = parsed_compiled_files_result { files = parsed_compiled_files }` [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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:252:52 [INFO] [stdout] | [INFO] [stdout] 252 | if graph::common::is_downloadable_file(&file) { [INFO] [stdout] | ^^^^^ help: change this to: `file` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:253:54 [INFO] [stdout] | [INFO] [stdout] 253 | let filename = get_filename_from_url(&file).unwrap(); [INFO] [stdout] | ^^^^^ help: change this to: `file` [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: compiling a regex in a loop [INFO] [stdout] --> src/emake/compiler.rs:742:34 [INFO] [stdout] | [INFO] [stdout] 742 | let var_re = Regex::new(r"\$\{([^}]+)\}").unwrap(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/emake/compiler.rs:654:5 [INFO] [stdout] | [INFO] [stdout] 654 | for current_token in tokens { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/compiler.rs:747:44 [INFO] [stdout] | [INFO] [stdout] 747 | ... .unwrap_or(&&var_caps[0].to_string()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `(&var_caps[0].to_string())` [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: function call inside of `expect` [INFO] [stdout] --> src/graph/runner.rs:327:50 [INFO] [stdout] | [INFO] [stdout] 327 | let plugin = ACTIONS_STORE.get(&step.action).expect(&format!( [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 328 | | "Can't execute step \"{}\", we are not able to find the plugin used in this step", [INFO] [stdout] 329 | | step.description.clone() [INFO] [stdout] 330 | | )); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 327 ~ let plugin = ACTIONS_STORE.get(&step.action).unwrap_or_else(|| panic!("Can't execute step \"{}\", we are not able to find the plugin used in this step", [INFO] [stdout] 328 ~ step.description.clone())); [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] --> src/graph/runner.rs:356:9 [INFO] [stdout] | [INFO] [stdout] 356 | / match parsed_compiled_files_result { [INFO] [stdout] 357 | | Ok(parsed_compiled_files) => files = parsed_compiled_files, [INFO] [stdout] 358 | | Err(_) => (), [INFO] [stdout] 359 | | } [INFO] [stdout] | |_________^ help: try: `if let Ok(parsed_compiled_files) = parsed_compiled_files_result { files = parsed_compiled_files }` [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: variant name starts with the enum's name [INFO] [stdout] --> src/emake/loader.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | TargetEntry(emake::Target), [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: all variants have the same postfix: `Entry` [INFO] [stdout] --> src/emake/loader.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | / pub enum Target { [INFO] [stdout] 21 | | TargetEntry(emake::Target), [INFO] [stdout] 22 | | VariableEntry(VariableEntry), [INFO] [stdout] 23 | | SecretEntry(SecretEntry), [INFO] [stdout] 24 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [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: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:34:5 [INFO] [stdout] | [INFO] [stdout] 34 | return content_result.ok().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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 34 - return content_result.ok().unwrap(); [INFO] [stdout] 34 + content_result.ok().unwrap() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/emake/loader.rs:79:12 [INFO] [stdout] | [INFO] [stdout] 79 | if target_split.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!target_split.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: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:195:17 [INFO] [stdout] | [INFO] [stdout] 195 | / return Ok(Target::TargetEntry( [INFO] [stdout] 196 | | emakefile [INFO] [stdout] 197 | | .targets [INFO] [stdout] 198 | | .get(&secrets_path_info.target_name) [INFO] [stdout] 199 | | .unwrap() [INFO] [stdout] 200 | | .to_owned(), [INFO] [stdout] 201 | | )); [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] 195 ~ Ok(Target::TargetEntry( [INFO] [stdout] 196 + emakefile [INFO] [stdout] 197 + .targets [INFO] [stdout] 198 + .get(&secrets_path_info.target_name) [INFO] [stdout] 199 + .unwrap() [INFO] [stdout] 200 + .to_owned(), [INFO] [stdout] 201 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:203:17 [INFO] [stdout] | [INFO] [stdout] 203 | / return Err(format!( [INFO] [stdout] 204 | | "No target named {} found in Emakefile {}", [INFO] [stdout] 205 | | secrets_path_info.target_name, [INFO] [stdout] 206 | | secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 207 | | )); [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] 203 ~ Err(format!( [INFO] [stdout] 204 + "No target named {} found in Emakefile {}", [INFO] [stdout] 205 + secrets_path_info.target_name, [INFO] [stdout] 206 + secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 207 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:213:21 [INFO] [stdout] | [INFO] [stdout] 213 | / return Ok(Target::SecretEntry( [INFO] [stdout] 214 | | secrets [INFO] [stdout] 215 | | .get(&secrets_path_info.target_name) [INFO] [stdout] 216 | | .unwrap() [INFO] [stdout] 217 | | .to_owned(), [INFO] [stdout] 218 | | )); [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] 213 ~ Ok(Target::SecretEntry( [INFO] [stdout] 214 + secrets [INFO] [stdout] 215 + .get(&secrets_path_info.target_name) [INFO] [stdout] 216 + .unwrap() [INFO] [stdout] 217 + .to_owned(), [INFO] [stdout] 218 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:220:21 [INFO] [stdout] | [INFO] [stdout] 220 | / return Err(format!( [INFO] [stdout] 221 | | "No secrets named {} found in Emakefile {}", [INFO] [stdout] 222 | | secrets_path_info.target_name, [INFO] [stdout] 223 | | secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 224 | | )); [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] 220 ~ Err(format!( [INFO] [stdout] 221 + "No secrets named {} found in Emakefile {}", [INFO] [stdout] 222 + secrets_path_info.target_name, [INFO] [stdout] 223 + secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 224 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:227:17 [INFO] [stdout] | [INFO] [stdout] 227 | / return Err(format!( [INFO] [stdout] 228 | | "No secrets defined in Emakefile {}. Expected a credential named {}", [INFO] [stdout] 229 | | secrets_path_info.emakefile_path.to_str().unwrap(), [INFO] [stdout] 230 | | secrets_path_info.target_name [INFO] [stdout] 231 | | )); [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] 227 ~ Err(format!( [INFO] [stdout] 228 + "No secrets defined in Emakefile {}. Expected a credential named {}", [INFO] [stdout] 229 + secrets_path_info.emakefile_path.to_str().unwrap(), [INFO] [stdout] 230 + secrets_path_info.target_name [INFO] [stdout] 231 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:238:25 [INFO] [stdout] | [INFO] [stdout] 238 | / return Ok(Target::VariableEntry( [INFO] [stdout] 239 | | val.to_owned(), [INFO] [stdout] 240 | | )); [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] 238 ~ Ok(Target::VariableEntry( [INFO] [stdout] 239 + val.to_owned(), [INFO] [stdout] 240 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:243:25 [INFO] [stdout] | [INFO] [stdout] 243 | / return Err(format!( [INFO] [stdout] 244 | | "No variable named {} found in Emakefile {}", [INFO] [stdout] 245 | | secrets_path_info.target_name, [INFO] [stdout] 246 | | secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 247 | | )); [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] 243 ~ Err(format!( [INFO] [stdout] 244 + "No variable named {} found in Emakefile {}", [INFO] [stdout] 245 + secrets_path_info.target_name, [INFO] [stdout] 246 + secrets_path_info.emakefile_path.to_str().unwrap() [INFO] [stdout] 247 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:251:17 [INFO] [stdout] | [INFO] [stdout] 251 | / return Err(format!( [INFO] [stdout] 252 | | "No variables defined in Emakefile {}. Expected a variable named {}", [INFO] [stdout] 253 | | secrets_path_info.emakefile_path.to_str().unwrap(), [INFO] [stdout] 254 | | secrets_path_info.target_name [INFO] [stdout] 255 | | )); [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] 251 ~ Err(format!( [INFO] [stdout] 252 + "No variables defined in Emakefile {}. Expected a variable named {}", [INFO] [stdout] 253 + secrets_path_info.emakefile_path.to_str().unwrap(), [INFO] [stdout] 254 + secrets_path_info.target_name [INFO] [stdout] 255 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/graph/runner.rs:509:12 [INFO] [stdout] | [INFO] [stdout] 509 | if !run_result.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `run_result.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] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `force_out_files` after checking its variant with `is_some` [INFO] [stdout] --> src/graph/runner.rs:425:26 [INFO] [stdout] | [INFO] [stdout] 424 | if force_out_files.is_some() { [INFO] [stdout] | ---------------------------- help: try: `if let Some() = force_out_files` [INFO] [stdout] 425 | real_out_files = force_out_files.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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/emake/loader.rs:183:46 [INFO] [stdout] | [INFO] [stdout] 183 | let emakefile = emake::loader::load_file(&secrets_path_info.emakefile_path.to_str().unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `secrets_path_info.emakefile_path.to_str().unwrap()` [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: function call inside of `expect` [INFO] [stdout] --> src/graph/runner.rs:404:50 [INFO] [stdout] | [INFO] [stdout] 404 | let plugin = ACTIONS_STORE.get(&step.action).expect(&format!( [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 405 | | "Can't execute step \"{}\", we are not able to find the plugin used in this step", [INFO] [stdout] 406 | | step.description.clone() [INFO] [stdout] 407 | | )); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 404 ~ let plugin = ACTIONS_STORE.get(&step.action).unwrap_or_else(|| panic!("Can't execute step \"{}\", we are not able to find the plugin used in this step", [INFO] [stdout] 405 ~ step.description.clone())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/emake/loader.rs:272:5 [INFO] [stdout] | [INFO] [stdout] 272 | return emakefile; [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] 272 - return emakefile; [INFO] [stdout] 272 + emakefile [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/graph/runner.rs:430:10 [INFO] [stdout] | [INFO] [stdout] 430 | (real_in_files.len() == 0 && real_out_files.len() == 0) || checksum_command.is_some(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `real_in_files.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: length comparison to zero [INFO] [stdout] --> src/graph/runner.rs:430:38 [INFO] [stdout] | [INFO] [stdout] 430 | (real_in_files.len() == 0 && real_out_files.len() == 0) || checksum_command.is_some(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `real_out_files.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 creates an owned instance just for comparison [INFO] [stdout] --> src/graph/runner.rs:466:20 [INFO] [stdout] | [INFO] [stdout] 466 | if checksum.trim().to_string() != current_action_checksum { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `checksum.trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:480:62 [INFO] [stdout] | [INFO] [stdout] 480 | let register_footprint = get_registered_action_footprint(&step_id).await; [INFO] [stdout] | ^^^^^^^^ help: change this to: `step_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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:511:39 [INFO] [stdout] | [INFO] [stdout] 511 | register_action_footprint(&step_id, &action_footprint).await; [INFO] [stdout] | ^^^^^^^^ help: change this to: `step_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: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/runner.rs:555:65 [INFO] [stdout] | [INFO] [stdout] 555 | cache::write_cache_action_checksum(step_id, &checksum.trim().to_string()).await [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `checksum.trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/runner.rs:585:50 [INFO] [stdout] | [INFO] [stdout] 585 | let emakefile = emake::loader::load_file(&emakefile_path.to_string_lossy().to_string()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_path.to_string_lossy().as_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/runner.rs:588:13 [INFO] [stdout] | [INFO] [stdout] 588 | &emakefile_path.to_string_lossy().to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_path.to_string_lossy().as_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/graph/runner.rs:625:34 [INFO] [stdout] | [INFO] [stdout] 625 | let mut steps_tasks: Vec>)>> = [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/graph/runner.rs:653:33 [INFO] [stdout] | [INFO] [stdout] 653 | let handle: JoinHandle<(String, Result<(), Box>)> = [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:658:54 [INFO] [stdout] | [INFO] [stdout] 658 | get_real_out_files(&step_id, &step, &emakefile_path_str_clone).await; [INFO] [stdout] | ^^^^^ help: change this to: `step` [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: using `clone` on type `usize` which implements the `Copy` trait [INFO] [stdout] --> src/graph/runner.rs:660:50 [INFO] [stdout] | [INFO] [stdout] 660 | let mut current_step_index = step_index.clone() + 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `step_index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/viewer.rs:19:46 [INFO] [stdout] | [INFO] [stdout] 19 | let emakefile = emake::loader::load_file(&emakefile_path.to_string_lossy().to_string()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_path.to_string_lossy().as_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/viewer.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | &emakefile_path.to_string_lossy().to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_path.to_string_lossy().as_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/graph/viewer.rs:67:16 [INFO] [stdout] | [INFO] [stdout] 67 | if step.description == "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `step.description.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/graph/common.rs:10:45 [INFO] [stdout] | [INFO] [stdout] 10 | if let Some(last_segment) = path.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] help: try [INFO] [stdout] | [INFO] [stdout] 9 ~ if let Some(mut path) = parsed_url.path_segments() { [INFO] [stdout] 10 ~ if let Some(last_segment) = path.next_back() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/secrets.rs:26:31 [INFO] [stdout] | [INFO] [stdout] 26 | pub fn add(mut self, key: &String, action: Box) -> SecretsStore { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 26 ~ pub fn add(mut self, key: &str, action: Box) -> SecretsStore { [INFO] [stdout] 27 ~ self.secrets.insert(key.to_owned(), action); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/secrets.rs:31:55 [INFO] [stdout] | [INFO] [stdout] 31 | pub fn get(&self, secrets_key: &String) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&(dyn Secrets + Send + Sync)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/utils.rs:10:14 [INFO] [stdout] | [INFO] [stdout] 10 | command: &String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 10 - command: &String, [INFO] [stdout] 10 + command: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/graph/generator.rs:13:11 [INFO] [stdout] | [INFO] [stdout] 13 | path: &String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 13 - path: &String, [INFO] [stdout] 13 + path: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/graph/generator.rs:40:9 [INFO] [stdout] | [INFO] [stdout] 40 | let target_path; [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] help: move the declaration `target_path` here and remove the assignments from the branches [INFO] [stdout] | [INFO] [stdout] 40 ~ [INFO] [stdout] 41 ~ let target_path = if path_parts.len() > 0 { [INFO] [stdout] 42 ~ format!( [INFO] [stdout] 43 | "{}/{}/targets:{}", [INFO] [stdout] ... [INFO] [stdout] 46 | target_key [INFO] [stdout] 47 ~ ) [INFO] [stdout] 48 | } else { [INFO] [stdout] 49 ~ format!("{}/targets:{}", &parent_target_path, target_key) [INFO] [stdout] 50 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/graph/generator.rs:41:12 [INFO] [stdout] | [INFO] [stdout] 41 | if path_parts.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!path_parts.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: redundant closure [INFO] [stdout] --> src/main.rs:21:58 [INFO] [stdout] | [INFO] [stdout] 21 | pub static ACTIONS_STORE: Lazy = Lazy::new(|| actions::instanciate()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `actions::instanciate` [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: redundant closure [INFO] [stdout] --> src/main.rs:22:62 [INFO] [stdout] | [INFO] [stdout] 22 | pub static CREDENTIALS_STORE: Lazy = Lazy::new(|| secrets::instanciate()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `secrets::instanciate` [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: the borrowed expression implements the required traits [INFO] [stdout] --> src/main.rs:95:43 [INFO] [stdout] | [INFO] [stdout] 95 | cwd = Path::new(&fs::canonicalize(&custom_cwd).unwrap().to_str().unwrap()).to_path_buf(); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `custom_cwd` [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: returning the result of a `let` binding from a block [INFO] [stdout] --> src/graph/generator.rs:94:5 [INFO] [stdout] | [INFO] [stdout] 93 | let target_path_parts = cwd.join(result).join("Emakefile"); [INFO] [stdout] | ----------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 94 | target_path_parts [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 93 ~ [INFO] [stdout] 94 ~ cwd.join(result).join("Emakefile") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:60:17 [INFO] [stdout] | [INFO] [stdout] 60 | &credential_password, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `credential_password` [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: manual checked division [INFO] [stdout] --> src/graph/runner.rs:164:12 [INFO] [stdout] | [INFO] [stdout] 164 | if total_size > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ check performed here [INFO] [stdout] 165 | percent = ((downloaded * 100) / total_size) as usize [INFO] [stdout] | --------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/graph/runner.rs:184:20 [INFO] [stdout] | [INFO] [stdout] 184 | return segments.last().map(|s| s.to_string()); [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] 183 ~ if let Some(mut segments) = parsed_url.path_segments() { [INFO] [stdout] 184 ~ return segments.next_back().map(|s| s.to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/graph/runner.rs:196:50 [INFO] [stdout] | [INFO] [stdout] 196 | let plugin = ACTIONS_STORE.get(&step.action).expect(&format!( [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 197 | | "Can't execute step \"{}\", we are not able to find the action used in this step", [INFO] [stdout] 198 | | step.description.clone() [INFO] [stdout] 199 | | )); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] = note: `#[warn(clippy::expect_fun_call)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 196 ~ let plugin = ACTIONS_STORE.get(&step.action).unwrap_or_else(|| panic!("Can't execute step \"{}\", we are not able to find the action used in this step", [INFO] [stdout] 197 ~ step.description.clone())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:230:29 [INFO] [stdout] | [INFO] [stdout] 230 | file_path = &detailed_file; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `detailed_file` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:236:13 [INFO] [stdout] | [INFO] [stdout] 236 | &file_path, [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `file_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/graph/runner.rs:246:9 [INFO] [stdout] | [INFO] [stdout] 246 | / match parsed_compiled_files_result { [INFO] [stdout] 247 | | Ok(parsed_compiled_files) => files = parsed_compiled_files, [INFO] [stdout] 248 | | Err(_) => (), [INFO] [stdout] 249 | | } [INFO] [stdout] | |_________^ help: try: `if let Ok(parsed_compiled_files) = parsed_compiled_files_result { files = parsed_compiled_files }` [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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:252:52 [INFO] [stdout] | [INFO] [stdout] 252 | if graph::common::is_downloadable_file(&file) { [INFO] [stdout] | ^^^^^ help: change this to: `file` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:253:54 [INFO] [stdout] | [INFO] [stdout] 253 | let filename = get_filename_from_url(&file).unwrap(); [INFO] [stdout] | ^^^^^ help: change this to: `file` [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: function call inside of `expect` [INFO] [stdout] --> src/graph/runner.rs:327:50 [INFO] [stdout] | [INFO] [stdout] 327 | let plugin = ACTIONS_STORE.get(&step.action).expect(&format!( [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 328 | | "Can't execute step \"{}\", we are not able to find the plugin used in this step", [INFO] [stdout] 329 | | step.description.clone() [INFO] [stdout] 330 | | )); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 327 ~ let plugin = ACTIONS_STORE.get(&step.action).unwrap_or_else(|| panic!("Can't execute step \"{}\", we are not able to find the plugin used in this step", [INFO] [stdout] 328 ~ step.description.clone())); [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] --> src/graph/runner.rs:356:9 [INFO] [stdout] | [INFO] [stdout] 356 | / match parsed_compiled_files_result { [INFO] [stdout] 357 | | Ok(parsed_compiled_files) => files = parsed_compiled_files, [INFO] [stdout] 358 | | Err(_) => (), [INFO] [stdout] 359 | | } [INFO] [stdout] | |_________^ help: try: `if let Ok(parsed_compiled_files) = parsed_compiled_files_result { files = parsed_compiled_files }` [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] --> src/graph/runner.rs:509:12 [INFO] [stdout] | [INFO] [stdout] 509 | if !run_result.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `run_result.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] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `force_out_files` after checking its variant with `is_some` [INFO] [stdout] --> src/graph/runner.rs:425:26 [INFO] [stdout] | [INFO] [stdout] 424 | if force_out_files.is_some() { [INFO] [stdout] | ---------------------------- help: try: `if let Some() = force_out_files` [INFO] [stdout] 425 | real_out_files = force_out_files.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] [INFO] [stdout] [INFO] [stdout] warning: function call inside of `expect` [INFO] [stdout] --> src/graph/runner.rs:404:50 [INFO] [stdout] | [INFO] [stdout] 404 | let plugin = ACTIONS_STORE.get(&step.action).expect(&format!( [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 405 | | "Can't execute step \"{}\", we are not able to find the plugin used in this step", [INFO] [stdout] 406 | | step.description.clone() [INFO] [stdout] 407 | | )); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 404 ~ let plugin = ACTIONS_STORE.get(&step.action).unwrap_or_else(|| panic!("Can't execute step \"{}\", we are not able to find the plugin used in this step", [INFO] [stdout] 405 ~ step.description.clone())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/graph/runner.rs:430:10 [INFO] [stdout] | [INFO] [stdout] 430 | (real_in_files.len() == 0 && real_out_files.len() == 0) || checksum_command.is_some(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `real_in_files.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: length comparison to zero [INFO] [stdout] --> src/graph/runner.rs:430:38 [INFO] [stdout] | [INFO] [stdout] 430 | (real_in_files.len() == 0 && real_out_files.len() == 0) || checksum_command.is_some(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `real_out_files.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 creates an owned instance just for comparison [INFO] [stdout] --> src/graph/runner.rs:466:20 [INFO] [stdout] | [INFO] [stdout] 466 | if checksum.trim().to_string() != current_action_checksum { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `checksum.trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:480:62 [INFO] [stdout] | [INFO] [stdout] 480 | let register_footprint = get_registered_action_footprint(&step_id).await; [INFO] [stdout] | ^^^^^^^^ help: change this to: `step_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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:511:39 [INFO] [stdout] | [INFO] [stdout] 511 | register_action_footprint(&step_id, &action_footprint).await; [INFO] [stdout] | ^^^^^^^^ help: change this to: `step_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: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/runner.rs:555:65 [INFO] [stdout] | [INFO] [stdout] 555 | cache::write_cache_action_checksum(step_id, &checksum.trim().to_string()).await [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `checksum.trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/runner.rs:585:50 [INFO] [stdout] | [INFO] [stdout] 585 | let emakefile = emake::loader::load_file(&emakefile_path.to_string_lossy().to_string()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_path.to_string_lossy().as_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/runner.rs:588:13 [INFO] [stdout] | [INFO] [stdout] 588 | &emakefile_path.to_string_lossy().to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_path.to_string_lossy().as_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/graph/runner.rs:625:34 [INFO] [stdout] | [INFO] [stdout] 625 | let mut steps_tasks: Vec>)>> = [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/graph/runner.rs:653:33 [INFO] [stdout] | [INFO] [stdout] 653 | let handle: JoinHandle<(String, Result<(), Box>)> = [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/graph/runner.rs:658:54 [INFO] [stdout] | [INFO] [stdout] 658 | get_real_out_files(&step_id, &step, &emakefile_path_str_clone).await; [INFO] [stdout] | ^^^^^ help: change this to: `step` [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: using `clone` on type `usize` which implements the `Copy` trait [INFO] [stdout] --> src/graph/runner.rs:660:50 [INFO] [stdout] | [INFO] [stdout] 660 | let mut current_step_index = step_index.clone() + 1; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `step_index` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/viewer.rs:19:46 [INFO] [stdout] | [INFO] [stdout] 19 | let emakefile = emake::loader::load_file(&emakefile_path.to_string_lossy().to_string()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_path.to_string_lossy().as_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/graph/viewer.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | &emakefile_path.to_string_lossy().to_string(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `emakefile_path.to_string_lossy().as_ref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/graph/viewer.rs:67:16 [INFO] [stdout] | [INFO] [stdout] 67 | if step.description == "" { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `step.description.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#comparison_to_empty [INFO] [stdout] = note: `#[warn(clippy::comparison_to_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/graph/common.rs:10:45 [INFO] [stdout] | [INFO] [stdout] 10 | if let Some(last_segment) = path.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] help: try [INFO] [stdout] | [INFO] [stdout] 9 ~ if let Some(mut path) = parsed_url.path_segments() { [INFO] [stdout] 10 ~ if let Some(last_segment) = path.next_back() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/secrets.rs:26:31 [INFO] [stdout] | [INFO] [stdout] 26 | pub fn add(mut self, key: &String, action: Box) -> SecretsStore { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 26 ~ pub fn add(mut self, key: &str, action: Box) -> SecretsStore { [INFO] [stdout] 27 ~ self.secrets.insert(key.to_owned(), action); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/secrets.rs:31:55 [INFO] [stdout] | [INFO] [stdout] 31 | pub fn get(&self, secrets_key: &String) -> Option<&Box> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&(dyn Secrets + Send + Sync)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/utils.rs:10:14 [INFO] [stdout] | [INFO] [stdout] 10 | command: &String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 10 - command: &String, [INFO] [stdout] 10 + command: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/main.rs:21:58 [INFO] [stdout] | [INFO] [stdout] 21 | pub static ACTIONS_STORE: Lazy = Lazy::new(|| actions::instanciate()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `actions::instanciate` [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: redundant closure [INFO] [stdout] --> src/main.rs:22:62 [INFO] [stdout] | [INFO] [stdout] 22 | pub static CREDENTIALS_STORE: Lazy = Lazy::new(|| secrets::instanciate()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `secrets::instanciate` [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: the borrowed expression implements the required traits [INFO] [stdout] --> src/main.rs:95:43 [INFO] [stdout] | [INFO] [stdout] 95 | cwd = Path::new(&fs::canonicalize(&custom_cwd).unwrap().to_str().unwrap()).to_path_buf(); [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `custom_cwd` [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] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 51.68s [INFO] running `Command { std: "docker" "inspect" "ea37bb9ab3652ebc08c5b25b2f730add7ae059ff71e93e5651761d3a60e29493", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ea37bb9ab3652ebc08c5b25b2f730add7ae059ff71e93e5651761d3a60e29493", kill_on_drop: false }` [INFO] [stdout] ea37bb9ab3652ebc08c5b25b2f730add7ae059ff71e93e5651761d3a60e29493