[INFO] fetching crate calm 0.1.0... [INFO] linting calm-0.1.0 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate calm 0.1.0 into /workspace/builds/worker-4-tc1/source [INFO] started tweaking crates.io crate calm 0.1.0 [INFO] finished tweaking crates.io crate calm 0.1.0 [INFO] tweaked toml for crates.io crate calm 0.1.0 written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate calm 0.1.0 on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Locking 127 packages to latest compatible versions [INFO] [stderr] Adding clap v2.34.0 (available: v4.6.0) [INFO] [stderr] Adding console v0.5.0 (available: v0.16.3) [INFO] [stderr] Adding crossbeam v0.2.12 (available: v0.8.4) [INFO] [stderr] Adding dotenv v0.10.1 (available: v0.15.0) [INFO] [stderr] Adding elementtree v0.5.0 (available: v1.2.3) [INFO] [stderr] Adding error-chain v0.10.0 (available: v0.12.4) [INFO] [stderr] Adding git2 v0.6.11 (available: v0.20.4) [INFO] [stderr] Adding glob v0.2.11 (available: v0.3.3) [INFO] [stderr] Adding if_chain v0.1.3 (available: v1.0.3) [INFO] [stderr] Adding indicatif v0.6.0 (available: v0.18.4) [INFO] [stderr] Adding lazy_static v0.2.11 (available: v1.5.0) [INFO] [stderr] Adding parking_lot v0.4.8 (available: v0.12.5) [INFO] [stderr] Adding regex v0.2.11 (available: v1.12.3) [INFO] [stderr] Adding serde_yaml v0.7.5 (available: v0.9.34+deprecated) [INFO] [stderr] Adding sha1 v0.2.0 (available: v0.10.6) [INFO] [stderr] Adding walkdir v1.0.7 (available: v2.5.0) [INFO] [stderr] Adding which v1.0.5 (available: v8.0.2) [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] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded same-file v0.1.3 [INFO] [stderr] Downloaded console v0.16.3 [INFO] [stderr] Downloaded walkdir v1.0.7 [INFO] [stderr] Downloaded which v1.0.5 [INFO] [stderr] Downloaded owning_ref v0.3.3 [INFO] [stderr] Downloaded parking_lot v0.4.8 [INFO] [stderr] Downloaded parking_lot_core v0.2.14 [INFO] [stderr] Downloaded derive-error-chain v0.10.1 [INFO] [stderr] Downloaded clicolors-control v0.3.2 [INFO] [stderr] Downloaded if_chain v0.1.3 [INFO] [stderr] Downloaded console v0.5.0 [INFO] [stderr] Downloaded crossbeam v0.2.12 [INFO] [stderr] Downloaded string_cache v0.9.0 [INFO] [stderr] Downloaded elementtree v0.5.0 [INFO] [stderr] Downloaded dotenv v0.10.1 [INFO] [stderr] Downloaded serde_yaml v0.7.5 [INFO] [stderr] Downloaded git2 v0.6.11 [INFO] [stderr] Downloaded libssh2-sys v0.2.23 [INFO] [stderr] Downloaded indicatif v0.6.0 [INFO] [stderr] Downloaded libgit2-sys v0.6.19 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] c59aaab6652a99308b902845ac176ea971894d5beb902913cd0faffa7d057144 [INFO] running `Command { std: "docker" "start" "-a" "c59aaab6652a99308b902845ac176ea971894d5beb902913cd0faffa7d057144", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "c59aaab6652a99308b902845ac176ea971894d5beb902913cd0faffa7d057144", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c59aaab6652a99308b902845ac176ea971894d5beb902913cd0faffa7d057144", kill_on_drop: false }` [INFO] [stdout] c59aaab6652a99308b902845ac176ea971894d5beb902913cd0faffa7d057144 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] afc8038c6d0114166c4dc39eb50061dc6f16a9d9e5573ec1bed3a3c63d425d03 [INFO] running `Command { std: "docker" "start" "-a" "afc8038c6d0114166c4dc39eb50061dc6f16a9d9e5573ec1bed3a3c63d425d03", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Compiling maybe-uninit v2.0.0 [INFO] [stderr] Checking ucd-util v0.1.10 [INFO] [stderr] Compiling regex v0.2.11 [INFO] [stderr] Checking thread_local v0.3.6 [INFO] [stderr] Checking aho-corasick v0.6.10 [INFO] [stderr] Checking tinyvec v1.11.0 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling libz-sys v1.1.25 [INFO] [stderr] Compiling curl-sys v0.4.86+curl-8.19.0 [INFO] [stderr] Compiling libssh2-sys v0.2.23 [INFO] [stderr] Checking utf8-ranges v1.0.5 [INFO] [stderr] Checking object v0.37.3 [INFO] [stderr] Compiling libgit2-sys v0.6.19 [INFO] [stderr] Checking unicode-bidi v0.3.18 [INFO] [stderr] Compiling syn v0.11.11 [INFO] [stderr] Checking phf_shared v0.13.1 [INFO] [stderr] Checking term_size v0.3.2 [INFO] [stderr] Checking clicolors-control v1.0.1 [INFO] [stderr] Checking regex-syntax v0.5.6 [INFO] [stderr] Checking percent-encoding v1.0.1 [INFO] [stderr] Checking smallvec v0.6.14 [INFO] [stderr] Checking precomputed-hash v0.1.1 [INFO] [stderr] Checking stable_deref_trait v1.2.1 [INFO] [stderr] Checking lazy_static v0.2.11 [INFO] [stderr] Checking new_debug_unreachable v1.0.6 [INFO] [stderr] Checking linked-hash-map v0.5.6 [INFO] [stderr] Checking console v0.16.3 [INFO] [stderr] Checking parking_lot_core v0.2.14 [INFO] [stderr] Checking owning_ref v0.3.3 [INFO] [stderr] Checking clicolors-control v0.3.2 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking string_cache v0.9.0 [INFO] [stderr] Checking termios v0.2.2 [INFO] [stderr] Checking bitflags v0.9.1 [INFO] [stderr] Checking same-file v0.1.3 [INFO] [stderr] Checking xml-rs v0.8.28 [INFO] [stderr] Checking unicode-normalization v0.1.25 [INFO] [stderr] Checking yaml-rust v0.4.5 [INFO] [stderr] Checking dtoa v0.4.8 [INFO] [stderr] Checking walkdir v1.0.7 [INFO] [stderr] Checking clap v2.34.0 [INFO] [stderr] Checking which v1.0.5 [INFO] [stderr] Checking sha1 v0.2.0 [INFO] [stderr] Checking if_chain v0.1.3 [INFO] [stderr] Checking parking_lot v0.4.8 [INFO] [stderr] Checking crossbeam v0.2.12 [INFO] [stderr] Checking glob v0.2.11 [INFO] [stderr] Checking idna v0.1.5 [INFO] [stderr] Checking elementtree v0.5.0 [INFO] [stderr] Checking serde_yaml v0.7.5 [INFO] [stderr] Compiling derive-error-chain v0.10.1 [INFO] [stderr] Checking url v1.7.2 [INFO] [stderr] Checking console v0.5.0 [INFO] [stderr] Checking indicatif v0.6.0 [INFO] [stderr] Checking backtrace v0.3.76 [INFO] [stderr] Checking error-chain v0.10.0 [INFO] [stderr] Checking dotenv v0.10.1 [INFO] [stderr] Checking git2 v0.6.11 [INFO] [stderr] Checking calm v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/cli.rs:16:15 [INFO] [stdout] | [INFO] [stdout] 16 | const ABOUT: &'static str = " [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: redundant field names in struct initialization [INFO] [stdout] --> src/config.rs:270:13 [INFO] [stdout] | [INFO] [stdout] 270 | filename: filename, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `filename` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/config.rs:271:13 [INFO] [stdout] | [INFO] [stdout] 271 | config_dir: config_dir, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `config_dir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/config.rs:272:13 [INFO] [stdout] | [INFO] [stdout] 272 | cache_dir: cache_dir, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cache_dir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/ctx.rs:70:13 [INFO] [stdout] | [INFO] [stdout] 70 | config: config, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/report.rs:168:13 [INFO] [stdout] | [INFO] [stdout] 168 | ctx: ctx, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/rt/python.rs:13:24 [INFO] [stdout] | [INFO] [stdout] 13 | const DEFAULT_FLAVOR: &'static str = "python3"; [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] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/rt/python.rs:35:13 [INFO] [stdout] | [INFO] [stdout] 35 | ctx: ctx, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/cli.rs:16:15 [INFO] [stdout] | [INFO] [stdout] 16 | const ABOUT: &'static str = " [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: redundant field names in struct initialization [INFO] [stdout] --> src/rt/python.rs:37:13 [INFO] [stdout] | [INFO] [stdout] 37 | config: config, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/rt/js.rs:30:13 [INFO] [stdout] | [INFO] [stdout] 30 | ctx: ctx, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/rt/js.rs:32:13 [INFO] [stdout] | [INFO] [stdout] 32 | config: config, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tools.rs:41:13 [INFO] [stdout] | [INFO] [stdout] 41 | ctx: ctx, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tools.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | spec: spec, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `spec` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tools.rs:44:13 [INFO] [stdout] | [INFO] [stdout] 44 | runtimes: runtimes, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `runtimes` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils/cmd.rs:92:13 [INFO] [stdout] | [INFO] [stdout] 92 | cmd_name: cmd_name, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `cmd_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils/cmd.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | child: child, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `child` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils/cmd.rs:165:13 [INFO] [stdout] | [INFO] [stdout] 165 | cmd: cmd, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `cmd` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/config.rs:270:13 [INFO] [stdout] | [INFO] [stdout] 270 | filename: filename, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `filename` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/config.rs:271:13 [INFO] [stdout] | [INFO] [stdout] 271 | config_dir: config_dir, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `config_dir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/config.rs:272:13 [INFO] [stdout] | [INFO] [stdout] 272 | cache_dir: cache_dir, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `cache_dir` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/ctx.rs:70:13 [INFO] [stdout] | [INFO] [stdout] 70 | config: config, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/report.rs:168:13 [INFO] [stdout] | [INFO] [stdout] 168 | ctx: ctx, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constants have by default a `'static` lifetime [INFO] [stdout] --> src/rt/python.rs:13:24 [INFO] [stdout] | [INFO] [stdout] 13 | const DEFAULT_FLAVOR: &'static str = "python3"; [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] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/rt/python.rs:35:13 [INFO] [stdout] | [INFO] [stdout] 35 | ctx: ctx, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/rt/python.rs:37:13 [INFO] [stdout] | [INFO] [stdout] 37 | config: config, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/rt/js.rs:30:13 [INFO] [stdout] | [INFO] [stdout] 30 | ctx: ctx, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/rt/js.rs:32:13 [INFO] [stdout] | [INFO] [stdout] 32 | config: config, [INFO] [stdout] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tools.rs:41:13 [INFO] [stdout] | [INFO] [stdout] 41 | ctx: ctx, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tools.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | spec: spec, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `spec` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/tools.rs:44:13 [INFO] [stdout] | [INFO] [stdout] 44 | runtimes: runtimes, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `runtimes` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils/cmd.rs:92:13 [INFO] [stdout] | [INFO] [stdout] 92 | cmd_name: cmd_name, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `cmd_name` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils/cmd.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | child: child, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `child` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/utils/cmd.rs:165:13 [INFO] [stdout] | [INFO] [stdout] 165 | cmd: cmd, [INFO] [stdout] | ^^^^^^^^ help: replace it with: `cmd` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/errors.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | / error_chain! { [INFO] [stdout] 11 | | errors { [INFO] [stdout] 12 | | QuietExit(code: i32) { [INFO] [stdout] 13 | | description("calm quit") [INFO] [stdout] ... | [INFO] [stdout] 25 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] = note: this warning originates in the macro `error_chain_processed` which comes from the expansion of the macro `error_chain` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/report.rs:19:1 [INFO] [stdout] | [INFO] [stdout] 19 | / lazy_static! { [INFO] [stdout] 20 | | static ref IDENT_RE: Regex = Regex::new( [INFO] [stdout] 21 | | r#"(?x) [INFO] [stdout] 22 | | [\d\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}$_] [INFO] [stdout] 23 | | [\d\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Mn}\p{Mc}\p{Nd}\p{Pc}$_]* [INFO] [stdout] 24 | | "#).unwrap(); [INFO] [stdout] 25 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/utils/cmd.rs:220:5 [INFO] [stdout] | [INFO] [stdout] 220 | / lazy_static! { [INFO] [stdout] 221 | | static ref VAR_RE: Regex = Regex::new( [INFO] [stdout] 222 | | r"\$(\$|[a-zA-Z0-9_]+|\([^)]+\)|\{[^}]+\})").unwrap(); [INFO] [stdout] 223 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/utils/serde.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | / lazy_static! { [INFO] [stdout] 15 | | static ref REGEX_RE: Regex = Regex::new( [INFO] [stdout] 16 | | r#"(?sm)^\s*/(.*)/([a-z]*)\s*$"#).unwrap(); [INFO] [stdout] 17 | | static ref LINK_RE: Regex = Regex::new( [INFO] [stdout] 18 | | r#"^(.+?)(?:\s+->\s+(.+?))?$"#).unwrap(); [INFO] [stdout] 19 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/utils/serde.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | / lazy_static! { [INFO] [stdout] 15 | | static ref REGEX_RE: Regex = Regex::new( [INFO] [stdout] 16 | | r#"(?sm)^\s*/(.*)/([a-z]*)\s*$"#).unwrap(); [INFO] [stdout] 17 | | static ref LINK_RE: Regex = Regex::new( [INFO] [stdout] 18 | | r#"^(.+?)(?:\s+->\s+(.+?))?$"#).unwrap(); [INFO] [stdout] 19 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/utils/hooks.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | / lazy_static! { [INFO] [stdout] 13 | | static ref HOOK_RE: Regex = Regex::new( [INFO] [stdout] 14 | | r#"(?m)^calm\s+hook\s+--exec-([\w-]+)\s+\|\|\s+exit\s+1\s*?\r?\n?"#).unwrap(); [INFO] [stdout] 15 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/tools.rs:24:23 [INFO] [stdout] | [INFO] [stdout] 24 | runtimes: Vec + 'a>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 24 | runtimes: Vec + 'a>>, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/utils/cmd.rs:32:31 [INFO] [stdout] | [INFO] [stdout] 32 | pub on_stdout: Option Result> + Send + Sync + 'a>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 32 | pub on_stdout: Option Result> + Send + Sync + 'a>>, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/utils/cmd.rs:33:31 [INFO] [stdout] | [INFO] [stdout] 33 | pub on_stderr: Option Result> + Send + Sync + 'a>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 33 | pub on_stderr: Option Result> + Send + Sync + 'a>>, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/utils/cmd.rs:48:48 [INFO] [stdout] | [INFO] [stdout] 48 | mut f: Option<&mut Box Result> + Send + Sync + 'a>>, [INFO] [stdout] | |___________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 48 | mut f: Option<&mut Box src/rt/common.rs:32:35 [INFO] [stdout] | [INFO] [stdout] 32 | fn update_env(&self, _f: &mut FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 32 | fn update_env(&self, _f: &mut dyn FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/rt/python.rs:64:34 [INFO] [stdout] | [INFO] [stdout] 64 | fn update_env(&self, f: &mut FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 64 | fn update_env(&self, f: &mut dyn FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/rt/js.rs:59:34 [INFO] [stdout] | [INFO] [stdout] 59 | fn update_env(&self, f: &mut FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 59 | fn update_env(&self, f: &mut dyn FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/errors.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | / error_chain! { [INFO] [stdout] 11 | | errors { [INFO] [stdout] 12 | | QuietExit(code: i32) { [INFO] [stdout] 13 | | description("calm quit") [INFO] [stdout] ... | [INFO] [stdout] 25 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] = note: this warning originates in the macro `error_chain_processed` which comes from the expansion of the macro `error_chain` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/report.rs:19:1 [INFO] [stdout] | [INFO] [stdout] 19 | / lazy_static! { [INFO] [stdout] 20 | | static ref IDENT_RE: Regex = Regex::new( [INFO] [stdout] 21 | | r#"(?x) [INFO] [stdout] 22 | | [\d\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}$_] [INFO] [stdout] 23 | | [\d\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Mn}\p{Mc}\p{Nd}\p{Pc}$_]* [INFO] [stdout] 24 | | "#).unwrap(); [INFO] [stdout] 25 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/utils/cmd.rs:220:5 [INFO] [stdout] | [INFO] [stdout] 220 | / lazy_static! { [INFO] [stdout] 221 | | static ref VAR_RE: Regex = Regex::new( [INFO] [stdout] 222 | | r"\$(\$|[a-zA-Z0-9_]+|\([^)]+\)|\{[^}]+\})").unwrap(); [INFO] [stdout] 223 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/utils/serde.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | / lazy_static! { [INFO] [stdout] 15 | | static ref REGEX_RE: Regex = Regex::new( [INFO] [stdout] 16 | | r#"(?sm)^\s*/(.*)/([a-z]*)\s*$"#).unwrap(); [INFO] [stdout] 17 | | static ref LINK_RE: Regex = Regex::new( [INFO] [stdout] 18 | | r#"^(.+?)(?:\s+->\s+(.+?))?$"#).unwrap(); [INFO] [stdout] 19 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/utils/serde.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | / lazy_static! { [INFO] [stdout] 15 | | static ref REGEX_RE: Regex = Regex::new( [INFO] [stdout] 16 | | r#"(?sm)^\s*/(.*)/([a-z]*)\s*$"#).unwrap(); [INFO] [stdout] 17 | | static ref LINK_RE: Regex = Regex::new( [INFO] [stdout] 18 | | r#"^(.+?)(?:\s+->\s+(.+?))?$"#).unwrap(); [INFO] [stdout] 19 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated constant `std::sync::ONCE_INIT`: the `Once::new()` function is now preferred [INFO] [stdout] --> src/utils/hooks.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | / lazy_static! { [INFO] [stdout] 13 | | static ref HOOK_RE: Regex = Regex::new( [INFO] [stdout] 14 | | r#"(?m)^calm\s+hook\s+--exec-([\w-]+)\s+\|\|\s+exit\s+1\s*?\r?\n?"#).unwrap(); [INFO] [stdout] 15 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `__lazy_static_create` which comes from the expansion of the macro `lazy_static` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/tools.rs:24:23 [INFO] [stdout] | [INFO] [stdout] 24 | runtimes: Vec + 'a>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 24 | runtimes: Vec + 'a>>, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/utils/cmd.rs:32:31 [INFO] [stdout] | [INFO] [stdout] 32 | pub on_stdout: Option Result> + Send + Sync + 'a>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 32 | pub on_stdout: Option Result> + Send + Sync + 'a>>, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/utils/cmd.rs:33:31 [INFO] [stdout] | [INFO] [stdout] 33 | pub on_stderr: Option Result> + Send + Sync + 'a>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 33 | pub on_stderr: Option Result> + Send + Sync + 'a>>, [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/utils/cmd.rs:48:48 [INFO] [stdout] | [INFO] [stdout] 48 | mut f: Option<&mut Box Result> + Send + Sync + 'a>>, [INFO] [stdout] | |___________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 48 | mut f: Option<&mut Box src/rt/common.rs:32:35 [INFO] [stdout] | [INFO] [stdout] 32 | fn update_env(&self, _f: &mut FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 32 | fn update_env(&self, _f: &mut dyn FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/rt/python.rs:64:34 [INFO] [stdout] | [INFO] [stdout] 64 | fn update_env(&self, f: &mut FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 64 | fn update_env(&self, f: &mut dyn FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/rt/js.rs:59:34 [INFO] [stdout] | [INFO] [stdout] 59 | fn update_env(&self, f: &mut FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 59 | fn update_env(&self, f: &mut dyn FnMut(&OsStr, &OsStr)) -> Result<()> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/ctx.rs:114:23 [INFO] [stdout] | [INFO] [stdout] 114 | -> Result + 'a>> [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 114 | -> Result + 'a>> [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/ctx.rs:114:23 [INFO] [stdout] | [INFO] [stdout] 114 | -> Result + 'a>> [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! [INFO] [stdout] = note: for more information, see [INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn` [INFO] [stdout] | [INFO] [stdout] 114 | -> Result + 'a>> [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::cause`: replaced by Error::source, which can support downcasting [INFO] [stdout] --> src/cli.rs:173:25 [INFO] [stdout] | [INFO] [stdout] 173 | let mut cause = err.cause(); [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::cause`: replaced by Error::source, which can support downcasting [INFO] [stdout] --> src/cli.rs:176:27 [INFO] [stdout] | [INFO] [stdout] 176 | cause = the_cause.cause(); [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::cause`: replaced by Error::source, which can support downcasting [INFO] [stdout] --> src/cli.rs:173:25 [INFO] [stdout] | [INFO] [stdout] 173 | let mut cause = err.cause(); [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::cause`: replaced by Error::source, which can support downcasting [INFO] [stdout] --> src/cli.rs:176:27 [INFO] [stdout] | [INFO] [stdout] 176 | cause = the_cause.cause(); [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::cause`: replaced by Error::source, which can support downcasting [INFO] [stdout] --> src/errors.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | / error_chain! { [INFO] [stdout] 11 | | errors { [INFO] [stdout] 12 | | QuietExit(code: i32) { [INFO] [stdout] 13 | | description("calm quit") [INFO] [stdout] ... | [INFO] [stdout] 25 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `error_chain_processed` which comes from the expansion of the macro `error_chain` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::cause`: replaced by Error::source, which can support downcasting [INFO] [stdout] --> src/errors.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | / error_chain! { [INFO] [stdout] 11 | | errors { [INFO] [stdout] 12 | | QuietExit(code: i32) { [INFO] [stdout] 13 | | description("calm quit") [INFO] [stdout] ... | [INFO] [stdout] 25 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = note: this warning originates in the macro `error_chain_processed` which comes from the expansion of the macro `error_chain` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_left`: superseded by `trim_start` [INFO] [stdout] --> src/report.rs:103:42 [INFO] [stdout] | [INFO] [stdout] 103 | let stripped_line = line.trim_left(); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 103 - let stripped_line = line.trim_left(); [INFO] [stdout] 103 + let stripped_line = line.trim_start(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_right`: superseded by `trim_end` [INFO] [stdout] --> src/report.rs:111:57 [INFO] [stdout] | [INFO] [stdout] 111 | write!(f, "\n {}", style(stripped_line.trim_right()).dim())?; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 111 - write!(f, "\n {}", style(stripped_line.trim_right()).dim())?; [INFO] [stdout] 111 + write!(f, "\n {}", style(stripped_line.trim_end()).dim())?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_left`: superseded by `trim_start` [INFO] [stdout] --> src/report.rs:103:42 [INFO] [stdout] | [INFO] [stdout] 103 | let stripped_line = line.trim_left(); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 103 - let stripped_line = line.trim_left(); [INFO] [stdout] 103 + let stripped_line = line.trim_start(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_right`: superseded by `trim_end` [INFO] [stdout] --> src/report.rs:111:57 [INFO] [stdout] | [INFO] [stdout] 111 | write!(f, "\n {}", style(stripped_line.trim_right()).dim())?; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 111 - write!(f, "\n {}", style(stripped_line.trim_right()).dim())?; [INFO] [stdout] 111 + write!(f, "\n {}", style(stripped_line.trim_end()).dim())?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/tools.rs:134:50 [INFO] [stdout] | [INFO] [stdout] 134 | if let Some(report) = opts.and_then(|mut x| x.report.as_mut()) { [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/tools.rs:134:50 [INFO] [stdout] | [INFO] [stdout] 134 | if let Some(report) = opts.and_then(|mut x| x.report.as_mut()) { [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `patterns` and `run` are never read [INFO] [stdout] --> src/config.rs:105:5 [INFO] [stdout] | [INFO] [stdout] 104 | pub struct Rule { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] 105 | patterns: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 106 | run: String, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Rule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `rules` is never read [INFO] [stdout] --> src/config.rs:114:5 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct ConfigValues { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 114 | rules: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ConfigValues` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `filename` is never read [INFO] [stdout] --> src/config.rs:119:5 [INFO] [stdout] | [INFO] [stdout] 118 | pub struct Config { [INFO] [stdout] | ------ field in this struct [INFO] [stdout] 119 | filename: PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Config` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `config` and `type_name` are never used [INFO] [stdout] --> src/rt/common.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 10 | pub trait Runtime<'a>: Debug + Sync { [INFO] [stdout] | ------- methods in this trait [INFO] [stdout] ... [INFO] [stdout] 15 | fn config(&'a self) -> &'a RuntimeConfig; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 18 | fn type_name(&self) -> &str; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/cli.rs:105:38 [INFO] [stdout] | [INFO] [stdout] 105 | .map(|values| values.map(|x| Path::new(x)).collect::>()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Path::new` [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: fields `patterns` and `run` are never read [INFO] [stdout] --> src/config.rs:105:5 [INFO] [stdout] | [INFO] [stdout] 104 | pub struct Rule { [INFO] [stdout] | ---- fields in this struct [INFO] [stdout] 105 | patterns: Vec, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 106 | run: String, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Rule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `rules` is never read [INFO] [stdout] --> src/config.rs:114:5 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct ConfigValues { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 114 | rules: Vec, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ConfigValues` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `filename` is never read [INFO] [stdout] --> src/config.rs:119:5 [INFO] [stdout] | [INFO] [stdout] 118 | pub struct Config { [INFO] [stdout] | ------ field in this struct [INFO] [stdout] 119 | filename: PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Config` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/cli.rs:168:12 [INFO] [stdout] | [INFO] [stdout] 168 | if let &ErrorKind::Clap(ref clap_err) = err.kind() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 168 - if let &ErrorKind::Clap(ref clap_err) = err.kind() { [INFO] [stdout] 168 + if let ErrorKind::Clap(clap_err) = err.kind() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `config` and `type_name` are never used [INFO] [stdout] --> src/rt/common.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 10 | pub trait Runtime<'a>: Debug + Sync { [INFO] [stdout] | ------- methods in this trait [INFO] [stdout] ... [INFO] [stdout] 15 | fn config(&'a self) -> &'a RuntimeConfig; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 18 | fn type_name(&self) -> &str; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `writeln!` [INFO] [stdout] --> src/cli.rs:180:9 [INFO] [stdout] | [INFO] [stdout] 180 | writeln!(&mut io::stderr(), "").ok(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stdout] = note: `#[warn(clippy::writeln_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/cli.rs:105:38 [INFO] [stdout] | [INFO] [stdout] 105 | .map(|values| values.map(|x| Path::new(x)).collect::>()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Path::new` [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: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/cli.rs:168:12 [INFO] [stdout] | [INFO] [stdout] 168 | if let &ErrorKind::Clap(ref clap_err) = err.kind() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] = note: `#[warn(clippy::needless_borrowed_reference)]` on by default [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 168 - if let &ErrorKind::Clap(ref clap_err) = err.kind() { [INFO] [stdout] 168 + if let ErrorKind::Clap(clap_err) = err.kind() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `writeln!` [INFO] [stdout] --> src/cli.rs:180:9 [INFO] [stdout] | [INFO] [stdout] 180 | writeln!(&mut io::stderr(), "").ok(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#writeln_empty_string [INFO] [stdout] = note: `#[warn(clippy::writeln_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/config.rs:144:9 [INFO] [stdout] | [INFO] [stdout] 144 | self.flavor.as_ref().map(|x| x.as_str()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.flavor.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] = note: `#[warn(clippy::option_as_ref_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:156:24 [INFO] [stdout] | [INFO] [stdout] 156 | if let &Some(ref desc) = description { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 156 - if let &Some(ref desc) = description { [INFO] [stdout] 156 + if let Some(desc) = description { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:163:24 [INFO] [stdout] | [INFO] [stdout] 163 | if let &Some(ref desc) = description { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 163 - if let &Some(ref desc) = description { [INFO] [stdout] 163 + if let Some(desc) = description { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/config.rs:175:17 [INFO] [stdout] | [INFO] [stdout] 175 | / match cmd { [INFO] [stdout] 176 | | &ToolCommand::Shell(ref cmd) => cmd.split_whitespace().next(), [INFO] [stdout] 177 | | &ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] 178 | | }.unwrap_or("command") [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] = note: `#[warn(clippy::match_ref_pats)]` on by default [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 175 ~ match *cmd { [INFO] [stdout] 176 ~ ToolCommand::Shell(ref cmd) => cmd.split_whitespace().next(), [INFO] [stdout] 177 ~ ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:176:21 [INFO] [stdout] | [INFO] [stdout] 176 | &ToolCommand::Shell(ref cmd) => cmd.split_whitespace().next(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 176 - &ToolCommand::Shell(ref cmd) => cmd.split_whitespace().next(), [INFO] [stdout] 176 + ToolCommand::Shell(cmd) => cmd.split_whitespace().next(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:177:21 [INFO] [stdout] | [INFO] [stdout] 177 | &ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 177 - &ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] 177 + ToolCommand::Exec(cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmd.get(0)` [INFO] [stdout] --> src/config.rs:177:52 [INFO] [stdout] | [INFO] [stdout] 177 | &ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] | ^^^^^^^^^^ help: try: `cmd.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/config.rs:265:35 [INFO] [stdout] | [INFO] [stdout] 265 | merge_tool_config(&mut tool, &config_dir, &cache_dir)?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `tool` [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: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:317:24 [INFO] [stdout] | [INFO] [stdout] 317 | if let &Some(ref path) = path { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 317 - if let &Some(ref path) = path { [INFO] [stdout] 317 + if let Some(path) = path { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/config.rs:333:33 [INFO] [stdout] | [INFO] [stdout] 333 | pub fn local_path_reference<'a>(&'a self, config_dir: &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] 333 - pub fn local_path_reference<'a>(&'a self, config_dir: &Path, [INFO] [stdout] 333 + pub fn local_path_reference(&self, config_dir: &Path, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:351:24 [INFO] [stdout] | [INFO] [stdout] 351 | if let &Some(ref rev) = rev { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 351 - if let &Some(ref rev) = rev { [INFO] [stdout] 351 + if let Some(rev) = rev { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ctx.rs:36:29 [INFO] [stdout] | [INFO] [stdout] 36 | if fs::metadata(&path).is_err() { [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ctx.rs:37:36 [INFO] [stdout] | [INFO] [stdout] 37 | fs::create_dir_all(&path)?; [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ctx.rs:43:34 [INFO] [stdout] | [INFO] [stdout] 43 | .current_dir(&path); [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/ctx.rs:45:24 [INFO] [stdout] | [INFO] [stdout] 45 | if let &Some(ref rev) = rev { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 45 - if let &Some(ref rev) = rev { [INFO] [stdout] 45 + if let Some(rev) = rev { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ctx.rs:49:36 [INFO] [stdout] | [INFO] [stdout] 49 | fs::create_dir_all(&path)?; [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/ctx.rs:78:9 [INFO] [stdout] | [INFO] [stdout] 78 | &self.config.cache_dir() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `self.config.cache_dir()` [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 `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/ctx.rs:91:9 [INFO] [stdout] | [INFO] [stdout] 91 | / write!(&mut ::std::io::stderr(), "{} {}\n", [INFO] [stdout] 92 | | style(">").dim().bold(), [INFO] [stdout] 93 | | text).unwrap(); [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] = note: `#[warn(clippy::write_with_newline)]` on by default [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 91 - write!(&mut ::std::io::stderr(), "{} {}\n", [INFO] [stdout] 91 + writeln!(&mut ::std::io::stderr(), "{} {}", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/ctx.rs:158:40 [INFO] [stdout] | [INFO] [stdout] 158 | update_remote_tool(&tool_dir_base, &rti)?; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `tool_dir_base` [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/ctx.rs:158:56 [INFO] [stdout] | [INFO] [stdout] 158 | update_remote_tool(&tool_dir_base, &rti)?; [INFO] [stdout] | ^^^^ help: change this to: `rti` [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: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/config.rs:144:9 [INFO] [stdout] | [INFO] [stdout] 144 | self.flavor.as_ref().map(|x| x.as_str()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.flavor.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] = note: `#[warn(clippy::option_as_ref_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:156:24 [INFO] [stdout] | [INFO] [stdout] 156 | if let &Some(ref desc) = description { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 156 - if let &Some(ref desc) = description { [INFO] [stdout] 156 + if let Some(desc) = description { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:163:24 [INFO] [stdout] | [INFO] [stdout] 163 | if let &Some(ref desc) = description { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 163 - if let &Some(ref desc) = description { [INFO] [stdout] 163 + if let Some(desc) = description { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you don't need to add `&` to all patterns [INFO] [stdout] --> src/config.rs:175:17 [INFO] [stdout] | [INFO] [stdout] 175 | / match cmd { [INFO] [stdout] 176 | | &ToolCommand::Shell(ref cmd) => cmd.split_whitespace().next(), [INFO] [stdout] 177 | | &ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] 178 | | }.unwrap_or("command") [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] = note: `#[warn(clippy::match_ref_pats)]` on by default [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 175 ~ match *cmd { [INFO] [stdout] 176 ~ ToolCommand::Shell(ref cmd) => cmd.split_whitespace().next(), [INFO] [stdout] 177 ~ ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:176:21 [INFO] [stdout] | [INFO] [stdout] 176 | &ToolCommand::Shell(ref cmd) => cmd.split_whitespace().next(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 176 - &ToolCommand::Shell(ref cmd) => cmd.split_whitespace().next(), [INFO] [stdout] 176 + ToolCommand::Shell(cmd) => cmd.split_whitespace().next(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:177:21 [INFO] [stdout] | [INFO] [stdout] 177 | &ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 177 - &ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] 177 + ToolCommand::Exec(cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `cmd.get(0)` [INFO] [stdout] --> src/config.rs:177:52 [INFO] [stdout] | [INFO] [stdout] 177 | &ToolCommand::Exec(ref cmd) => cmd.get(0).map(|x| x.as_str()), [INFO] [stdout] | ^^^^^^^^^^ help: try: `cmd.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/config.rs:265:35 [INFO] [stdout] | [INFO] [stdout] 265 | merge_tool_config(&mut tool, &config_dir, &cache_dir)?; [INFO] [stdout] | ^^^^^^^^^ help: change this to: `tool` [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: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:317:24 [INFO] [stdout] | [INFO] [stdout] 317 | if let &Some(ref path) = path { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 317 - if let &Some(ref path) = path { [INFO] [stdout] 317 + if let Some(path) = path { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/report.rs:37:1 [INFO] [stdout] | [INFO] [stdout] 37 | / impl Default for Level { [INFO] [stdout] 38 | | fn default() -> Level { [INFO] [stdout] 39 | | Level::Error [INFO] [stdout] 40 | | } [INFO] [stdout] 41 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 28 + #[derive(Default)] [INFO] [stdout] 29 | pub enum Level { [INFO] [stdout] 30 | #[serde(rename="error")] [INFO] [stdout] 31 ~ #[default] [INFO] [stdout] 32 ~ Error, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/config.rs:333:33 [INFO] [stdout] | [INFO] [stdout] 333 | pub fn local_path_reference<'a>(&'a self, config_dir: &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] 333 - pub fn local_path_reference<'a>(&'a self, config_dir: &Path, [INFO] [stdout] 333 + pub fn local_path_reference(&self, config_dir: &Path, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/config.rs:351:24 [INFO] [stdout] | [INFO] [stdout] 351 | if let &Some(ref rev) = rev { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 351 - if let &Some(ref rev) = rev { [INFO] [stdout] 351 + if let Some(rev) = rev { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ctx.rs:36:29 [INFO] [stdout] | [INFO] [stdout] 36 | if fs::metadata(&path).is_err() { [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ctx.rs:37:36 [INFO] [stdout] | [INFO] [stdout] 37 | fs::create_dir_all(&path)?; [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ctx.rs:43:34 [INFO] [stdout] | [INFO] [stdout] 43 | .current_dir(&path); [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/ctx.rs:45:24 [INFO] [stdout] | [INFO] [stdout] 45 | if let &Some(ref rev) = rev { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 45 - if let &Some(ref rev) = rev { [INFO] [stdout] 45 + if let Some(rev) = rev { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ctx.rs:49:36 [INFO] [stdout] | [INFO] [stdout] 49 | fs::create_dir_all(&path)?; [INFO] [stdout] | ^^^^^ help: change this to: `path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/ctx.rs:78:9 [INFO] [stdout] | [INFO] [stdout] 78 | &self.config.cache_dir() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `self.config.cache_dir()` [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 `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/ctx.rs:91:9 [INFO] [stdout] | [INFO] [stdout] 91 | / write!(&mut ::std::io::stderr(), "{} {}\n", [INFO] [stdout] 92 | | style(">").dim().bold(), [INFO] [stdout] 93 | | text).unwrap(); [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] = note: `#[warn(clippy::write_with_newline)]` on by default [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 91 - write!(&mut ::std::io::stderr(), "{} {}\n", [INFO] [stdout] 91 + writeln!(&mut ::std::io::stderr(), "{} {}", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/ctx.rs:158:40 [INFO] [stdout] | [INFO] [stdout] 158 | update_remote_tool(&tool_dir_base, &rti)?; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `tool_dir_base` [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/ctx.rs:158:56 [INFO] [stdout] | [INFO] [stdout] 158 | update_remote_tool(&tool_dir_base, &rti)?; [INFO] [stdout] | ^^^^ help: change this to: `rti` [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: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:95:22 [INFO] [stdout] | [INFO] [stdout] 95 | style(self.code.as_ref().map(|x| x.as_str()).unwrap_or("E")).magenta().italic(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.code.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:96:16 [INFO] [stdout] | [INFO] [stdout] 96 | self.message.as_ref().map(|x| x.as_str()).unwrap_or("no info"))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.message.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `skip(..).next()` on an iterator [INFO] [stdout] --> src/report.rs:101:63 [INFO] [stdout] | [INFO] [stdout] 101 | if let Some(Ok(line)) = BufReader::new(sf).lines().skip(self.line as usize - 1).next(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `nth` instead: `.nth(self.line as usize - 1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stdout] = note: `#[warn(clippy::iter_skip_next)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:141:16 [INFO] [stdout] | [INFO] [stdout] 141 | self.lr.message.as_ref().map(|x| x.as_str()).unwrap_or("no info"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.lr.message.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:142:16 [INFO] [stdout] | [INFO] [stdout] 142 | self.lr.code.as_ref().map(|x| x.as_str()).unwrap_or("E"))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.lr.code.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/report.rs:177:23 [INFO] [stdout] | [INFO] [stdout] 177 | let f: &str = &matches.get("filename").ok_or_else(|| [INFO] [stdout] | _______________________^ [INFO] [stdout] 178 | | Error::from("No filename in lint result pattern"))?; [INFO] [stdout] | |_______________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 177 ~ let f: &str = matches.get("filename").ok_or_else(|| [INFO] [stdout] 178 ~ Error::from("No filename in lint result pattern"))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/report.rs:211:33 [INFO] [stdout] | [INFO] [stdout] 211 | .or_insert_with(|| vec![]) [INFO] [stdout] | ^^^^^^^^^ help: replace the closure with `Vec::new`: `std::vec::Vec::new` [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: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:227:41 [INFO] [stdout] | [INFO] [stdout] 227 | .set_attr("source", res.code [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 228 | | .as_ref() [INFO] [stdout] 229 | | .map(|x| x.as_str()) [INFO] [stdout] | |____________________________________________^ help: consider using as_deref: `res.code.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:232:42 [INFO] [stdout] | [INFO] [stdout] 232 | .set_attr("message", res.message [INFO] [stdout] | __________________________________________^ [INFO] [stdout] 233 | | .as_ref() [INFO] [stdout] 234 | | .map(|x| x.as_str()) [INFO] [stdout] | |____________________________________________^ help: consider using as_deref: `res.message.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/report.rs:37:1 [INFO] [stdout] | [INFO] [stdout] 37 | / impl Default for Level { [INFO] [stdout] 38 | | fn default() -> Level { [INFO] [stdout] 39 | | Level::Error [INFO] [stdout] 40 | | } [INFO] [stdout] 41 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 28 + #[derive(Default)] [INFO] [stdout] 29 | pub enum Level { [INFO] [stdout] 30 | #[serde(rename="error")] [INFO] [stdout] 31 ~ #[default] [INFO] [stdout] 32 ~ Error, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/report.rs:286:17 [INFO] [stdout] | [INFO] [stdout] 286 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/rt/common.rs:45:48 [INFO] [stdout] | [INFO] [stdout] 45 | self.ctx().cache_dir().join("rt").join(self.id().to_string()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: use: `self.id()` [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: this boolean expression can be simplified [INFO] [stdout] --> src/rt/python.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 81 | if !fs::metadata(path.join("bin").join("python")).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(path.join("bin").join("python")).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rt/js.rs:77:12 [INFO] [stdout] | [INFO] [stdout] 77 | if !fs::metadata(path.join("package.json")).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(path.join("package.json")).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rt/js.rs:95:12 [INFO] [stdout] | [INFO] [stdout] 95 | if !fs::metadata(path.join("node_modules/.bin/yarn")).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(path.join("node_modules/.bin/yarn")).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:95:22 [INFO] [stdout] | [INFO] [stdout] 95 | style(self.code.as_ref().map(|x| x.as_str()).unwrap_or("E")).magenta().italic(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.code.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:96:16 [INFO] [stdout] | [INFO] [stdout] 96 | self.message.as_ref().map(|x| x.as_str()).unwrap_or("no info"))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.message.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `skip(..).next()` on an iterator [INFO] [stdout] --> src/report.rs:101:63 [INFO] [stdout] | [INFO] [stdout] 101 | if let Some(Ok(line)) = BufReader::new(sf).lines().skip(self.line as usize - 1).next(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `nth` instead: `.nth(self.line as usize - 1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stdout] = note: `#[warn(clippy::iter_skip_next)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:141:16 [INFO] [stdout] | [INFO] [stdout] 141 | self.lr.message.as_ref().map(|x| x.as_str()).unwrap_or("no info"), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.lr.message.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:142:16 [INFO] [stdout] | [INFO] [stdout] 142 | self.lr.code.as_ref().map(|x| x.as_str()).unwrap_or("E"))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `self.lr.code.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/tools.rs:89:50 [INFO] [stdout] | [INFO] [stdout] 89 | let from_path = self.tool_dir().join(&res.src(Some(&env))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `res.src(Some(&env))` [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/tools.rs:90:56 [INFO] [stdout] | [INFO] [stdout] 90 | let target_path = self.ctx.base_dir().join(&res.dst(Some(&env))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `res.dst(Some(&env))` [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 don't need to add `&` to all patterns [INFO] [stdout] --> src/tools.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | / match tool_cmd { [INFO] [stdout] 100 | | &ToolCommand::Shell(ref cmdline) => { [INFO] [stdout] 101 | | cmd = CommandBuilder::new_shell(cmdline); [INFO] [stdout] ... | [INFO] [stdout] 112 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 99 ~ match *tool_cmd { [INFO] [stdout] 100 ~ ToolCommand::Shell(ref cmdline) => { [INFO] [stdout] 101 | cmd = CommandBuilder::new_shell(cmdline); [INFO] [stdout] 102 | } [INFO] [stdout] 103 ~ ToolCommand::Exec(ref args) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/tools.rs:100:17 [INFO] [stdout] | [INFO] [stdout] 100 | &ToolCommand::Shell(ref cmdline) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 100 - &ToolCommand::Shell(ref cmdline) => { [INFO] [stdout] 100 + ToolCommand::Shell(cmdline) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/tools.rs:103:17 [INFO] [stdout] | [INFO] [stdout] 103 | &ToolCommand::Exec(ref args) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 103 - &ToolCommand::Exec(ref args) => { [INFO] [stdout] 103 + ToolCommand::Exec(args) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/report.rs:177:23 [INFO] [stdout] | [INFO] [stdout] 177 | let f: &str = &matches.get("filename").ok_or_else(|| [INFO] [stdout] | _______________________^ [INFO] [stdout] 178 | | Error::from("No filename in lint result pattern"))?; [INFO] [stdout] | |_______________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 177 ~ let f: &str = matches.get("filename").ok_or_else(|| [INFO] [stdout] 178 ~ Error::from("No filename in lint result pattern"))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/report.rs:211:33 [INFO] [stdout] | [INFO] [stdout] 211 | .or_insert_with(|| vec![]) [INFO] [stdout] | ^^^^^^^^^ help: replace the closure with `Vec::new`: `std::vec::Vec::new` [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: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:227:41 [INFO] [stdout] | [INFO] [stdout] 227 | .set_attr("source", res.code [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 228 | | .as_ref() [INFO] [stdout] 229 | | .map(|x| x.as_str()) [INFO] [stdout] | |____________________________________________^ help: consider using as_deref: `res.code.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|x| x.as_str())` on an `Option` value [INFO] [stdout] --> src/report.rs:232:42 [INFO] [stdout] | [INFO] [stdout] 232 | .set_attr("message", res.message [INFO] [stdout] | __________________________________________^ [INFO] [stdout] 233 | | .as_ref() [INFO] [stdout] 234 | | .map(|x| x.as_str()) [INFO] [stdout] | |____________________________________________^ help: consider using as_deref: `res.message.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/report.rs:286:17 [INFO] [stdout] | [INFO] [stdout] 286 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/cmd.rs:32:20 [INFO] [stdout] | [INFO] [stdout] 32 | pub on_stdout: Option Result> + Send + Sync + '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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/cmd.rs:33:20 [INFO] [stdout] | [INFO] [stdout] 33 | pub on_stderr: Option Result> + Send + Sync + '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] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/cmd.rs:48:32 [INFO] [stdout] | [INFO] [stdout] 48 | mut f: Option<&mut Box Result> + Send + Sync + '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] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `to_string` [INFO] [stdout] --> src/rt/common.rs:45:48 [INFO] [stdout] | [INFO] [stdout] 45 | self.ctx().cache_dir().join("rt").join(self.id().to_string()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: use: `self.id()` [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: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/utils/cmd.rs:70:17 [INFO] [stdout] | [INFO] [stdout] 70 | write!(&mut ::std::io::stderr(), " {}\n", text).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 70 - write!(&mut ::std::io::stderr(), " {}\n", text).unwrap(); [INFO] [stdout] 70 + writeln!(&mut ::std::io::stderr(), " {}", text).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rt/python.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 81 | if !fs::metadata(path.join("bin").join("python")).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(path.join("bin").join("python")).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rt/js.rs:77:12 [INFO] [stdout] | [INFO] [stdout] 77 | if !fs::metadata(path.join("package.json")).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(path.join("package.json")).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/rt/js.rs:95:12 [INFO] [stdout] | [INFO] [stdout] 95 | if !fs::metadata(path.join("node_modules/.bin/yarn")).is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(path.join("node_modules/.bin/yarn")).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/utils/cmd.rs:210:30 [INFO] [stdout] | [INFO] [stdout] 210 | self.cmd.arg(&arg); [INFO] [stdout] | ^^^^ help: change this to: `arg` [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 pattern creates a reference to a reference [INFO] [stdout] --> src/utils/serde.rs:50:33 [INFO] [stdout] | [INFO] [stdout] 50 | if let Some(ref vars) = vars; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 50 - if let Some(ref vars) = vars; [INFO] [stdout] 50 + if let Some(vars) = vars; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/utils/serde.rs:85:24 [INFO] [stdout] | [INFO] [stdout] 85 | if &caps[2] != "" { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!caps[2].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: redundant closure [INFO] [stdout] --> src/utils/serde.rs:91:30 [INFO] [stdout] | [INFO] [stdout] 91 | .map(|re| Pattern::Regex(re)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Pattern::Regex` [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: redundant closure [INFO] [stdout] --> src/utils/serde.rs:97:30 [INFO] [stdout] | [INFO] [stdout] 97 | .map(|pat| Pattern::Glob(pat)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Pattern::Glob` [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/tools.rs:89:50 [INFO] [stdout] | [INFO] [stdout] 89 | let from_path = self.tool_dir().join(&res.src(Some(&env))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `res.src(Some(&env))` [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/tools.rs:90:56 [INFO] [stdout] | [INFO] [stdout] 90 | let target_path = self.ctx.base_dir().join(&res.dst(Some(&env))); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: change this to: `res.dst(Some(&env))` [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 don't need to add `&` to all patterns [INFO] [stdout] --> src/tools.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | / match tool_cmd { [INFO] [stdout] 100 | | &ToolCommand::Shell(ref cmdline) => { [INFO] [stdout] 101 | | cmd = CommandBuilder::new_shell(cmdline); [INFO] [stdout] ... | [INFO] [stdout] 112 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stdout] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stdout] | [INFO] [stdout] 99 ~ match *tool_cmd { [INFO] [stdout] 100 ~ ToolCommand::Shell(ref cmdline) => { [INFO] [stdout] 101 | cmd = CommandBuilder::new_shell(cmdline); [INFO] [stdout] 102 | } [INFO] [stdout] 103 ~ ToolCommand::Exec(ref args) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Some` variant of the iterator element is used [INFO] [stdout] --> src/utils/serde.rs:137:21 [INFO] [stdout] | [INFO] [stdout] 137 | / for name in regex.capture_names() { [INFO] [stdout] 138 | | if let Some(name) = name { [INFO] [stdout] 139 | | rv.insert( [INFO] [stdout] 140 | | Cow::Borrowed(name), [INFO] [stdout] ... | [INFO] [stdout] 144 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/utils/serde.rs:138:25 [INFO] [stdout] | [INFO] [stdout] 138 | / if let Some(name) = name { [INFO] [stdout] 139 | | rv.insert( [INFO] [stdout] 140 | | Cow::Borrowed(name), [INFO] [stdout] 141 | | Cow::Borrowed( [INFO] [stdout] 142 | | caps.name(name).map(|x| x.as_str()).unwrap_or(""))); [INFO] [stdout] 143 | | } [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] 137 ~ for name in regex.capture_names().flatten() { [INFO] [stdout] 138 + rv.insert( [INFO] [stdout] 139 + Cow::Borrowed(name), [INFO] [stdout] 140 + Cow::Borrowed( [INFO] [stdout] 141 + caps.name(name).map(|x| x.as_str()).unwrap_or(""))); [INFO] [stdout] 142 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/tools.rs:100:17 [INFO] [stdout] | [INFO] [stdout] 100 | &ToolCommand::Shell(ref cmdline) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 100 - &ToolCommand::Shell(ref cmdline) => { [INFO] [stdout] 100 + ToolCommand::Shell(cmdline) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: dereferencing a tuple pattern where every element takes a reference [INFO] [stdout] --> src/tools.rs:103:17 [INFO] [stdout] | [INFO] [stdout] 103 | &ToolCommand::Exec(ref args) => { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrowed_reference [INFO] [stdout] help: try removing the `&` and `ref` parts [INFO] [stdout] | [INFO] [stdout] 103 - &ToolCommand::Exec(ref args) => { [INFO] [stdout] 103 + ToolCommand::Exec(args) => { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/utils/hooks.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 60 | write!(&mut contents, "calm hook --exec-{} || exit 1\n", hook).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 60 - write!(&mut contents, "calm hook --exec-{} || exit 1\n", hook).unwrap(); [INFO] [stdout] 60 + writeln!(&mut contents, "calm hook --exec-{} || exit 1", hook).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/cmd.rs:32:20 [INFO] [stdout] | [INFO] [stdout] 32 | pub on_stdout: Option Result> + Send + Sync + '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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/cmd.rs:33:20 [INFO] [stdout] | [INFO] [stdout] 33 | pub on_stderr: Option Result> + Send + Sync + '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] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/utils/cmd.rs:48:32 [INFO] [stdout] | [INFO] [stdout] 48 | mut f: Option<&mut Box Result> + Send + Sync + '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] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/config.rs:285:23 [INFO] [stdout] | [INFO] [stdout] 285 | pub fn iter_tools(&self) -> HashMapKeys { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 285 | pub fn iter_tools(&self) -> HashMapKeys<'_, String, ToolSpec> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/utils/cmd.rs:70:17 [INFO] [stdout] | [INFO] [stdout] 70 | write!(&mut ::std::io::stderr(), " {}\n", text).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 70 - write!(&mut ::std::io::stderr(), " {}\n", text).unwrap(); [INFO] [stdout] 70 + writeln!(&mut ::std::io::stderr(), " {}", text).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ctx.rs:181:17 [INFO] [stdout] | [INFO] [stdout] 181 | pub fn lint(&self, files: Option<&[&Path]>) -> Result { [INFO] [stdout] | ^^^^^ the lifetime is elided here ^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 181 | pub fn lint(&self, files: Option<&[&Path]>) -> Result> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement [INFO] [stdout] --> src/utils/hooks.rs:42:22 [INFO] [stdout] | [INFO] [stdout] 42 | for m in HOOK_RE.captures(&contents) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(for_loops_over_fallibles)]` on by default [INFO] [stdout] help: to check pattern in a loop use `while let` [INFO] [stdout] | [INFO] [stdout] 42 - for m in HOOK_RE.captures(&contents) { [INFO] [stdout] 42 + while let Some(m) = HOOK_RE.captures(&contents) { [INFO] [stdout] | [INFO] [stdout] help: consider using `if let` to clear intent [INFO] [stdout] | [INFO] [stdout] 42 - for m in HOOK_RE.captures(&contents) { [INFO] [stdout] 42 + if let Some(m) = HOOK_RE.captures(&contents) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/utils/cmd.rs:210:30 [INFO] [stdout] | [INFO] [stdout] 210 | self.cmd.arg(&arg); [INFO] [stdout] | ^^^^ help: change this to: `arg` [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 pattern creates a reference to a reference [INFO] [stdout] --> src/utils/serde.rs:50:33 [INFO] [stdout] | [INFO] [stdout] 50 | if let Some(ref vars) = vars; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 50 - if let Some(ref vars) = vars; [INFO] [stdout] 50 + if let Some(vars) = vars; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: comparison to empty slice [INFO] [stdout] --> src/utils/serde.rs:85:24 [INFO] [stdout] | [INFO] [stdout] 85 | if &caps[2] != "" { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!caps[2].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: redundant closure [INFO] [stdout] --> src/utils/serde.rs:91:30 [INFO] [stdout] | [INFO] [stdout] 91 | .map(|re| Pattern::Regex(re)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Pattern::Regex` [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: redundant closure [INFO] [stdout] --> src/utils/serde.rs:97:30 [INFO] [stdout] | [INFO] [stdout] 97 | .map(|pat| Pattern::Glob(pat)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Pattern::Glob` [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: unnecessary `if let` since only the `Some` variant of the iterator element is used [INFO] [stdout] --> src/utils/serde.rs:137:21 [INFO] [stdout] | [INFO] [stdout] 137 | / for name in regex.capture_names() { [INFO] [stdout] 138 | | if let Some(name) = name { [INFO] [stdout] 139 | | rv.insert( [INFO] [stdout] 140 | | Cow::Borrowed(name), [INFO] [stdout] ... | [INFO] [stdout] 144 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/utils/serde.rs:138:25 [INFO] [stdout] | [INFO] [stdout] 138 | / if let Some(name) = name { [INFO] [stdout] 139 | | rv.insert( [INFO] [stdout] 140 | | Cow::Borrowed(name), [INFO] [stdout] 141 | | Cow::Borrowed( [INFO] [stdout] 142 | | caps.name(name).map(|x| x.as_str()).unwrap_or(""))); [INFO] [stdout] 143 | | } [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] 137 ~ for name in regex.capture_names().flatten() { [INFO] [stdout] 138 + rv.insert( [INFO] [stdout] 139 + Cow::Borrowed(name), [INFO] [stdout] 140 + Cow::Borrowed( [INFO] [stdout] 141 + caps.name(name).map(|x| x.as_str()).unwrap_or(""))); [INFO] [stdout] 142 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/utils/hooks.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 60 | write!(&mut contents, "calm hook --exec-{} || exit 1\n", hook).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stdout] help: use `writeln!` instead [INFO] [stdout] | [INFO] [stdout] 60 - write!(&mut contents, "calm hook --exec-{} || exit 1\n", hook).unwrap(); [INFO] [stdout] 60 + writeln!(&mut contents, "calm hook --exec-{} || exit 1", hook).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/config.rs:285:23 [INFO] [stdout] | [INFO] [stdout] 285 | pub fn iter_tools(&self) -> HashMapKeys { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 285 | pub fn iter_tools(&self) -> HashMapKeys<'_, String, ToolSpec> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ctx.rs:181:17 [INFO] [stdout] | [INFO] [stdout] 181 | pub fn lint(&self, files: Option<&[&Path]>) -> Result { [INFO] [stdout] | ^^^^^ the lifetime is elided here ^^^^^^ the same lifetime is hidden here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 181 | pub fn lint(&self, files: Option<&[&Path]>) -> Result> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: for loop over an `Option`. This is more readably written as an `if let` statement [INFO] [stdout] --> src/utils/hooks.rs:42:22 [INFO] [stdout] | [INFO] [stdout] 42 | for m in HOOK_RE.captures(&contents) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(for_loops_over_fallibles)]` on by default [INFO] [stdout] help: to check pattern in a loop use `while let` [INFO] [stdout] | [INFO] [stdout] 42 - for m in HOOK_RE.captures(&contents) { [INFO] [stdout] 42 + while let Some(m) = HOOK_RE.captures(&contents) { [INFO] [stdout] | [INFO] [stdout] help: consider using `if let` to clear intent [INFO] [stdout] | [INFO] [stdout] 42 - for m in HOOK_RE.captures(&contents) { [INFO] [stdout] 42 + if let Some(m) = HOOK_RE.captures(&contents) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 29.97s [INFO] running `Command { std: "docker" "inspect" "afc8038c6d0114166c4dc39eb50061dc6f16a9d9e5573ec1bed3a3c63d425d03", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "afc8038c6d0114166c4dc39eb50061dc6f16a9d9e5573ec1bed3a3c63d425d03", kill_on_drop: false }` [INFO] [stdout] afc8038c6d0114166c4dc39eb50061dc6f16a9d9e5573ec1bed3a3c63d425d03