[INFO] fetching crate reups 0.3.0... [INFO] linting reups-0.3.0 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate reups 0.3.0 into /workspace/builds/worker-7-tc1/source [INFO] started tweaking crates.io crate reups 0.3.0 [INFO] finished tweaking crates.io crate reups 0.3.0 [INFO] tweaked toml for crates.io crate reups 0.3.0 written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate reups 0.3.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] Updating crates.io index [INFO] [stderr] Locking 59 packages to latest compatible versions [INFO] [stderr] Adding clap v2.34.0 (available: v4.6.0) [INFO] [stderr] Adding dirs v1.0.5 (available: v6.0.0) [INFO] [stderr] Adding petgraph v0.4.13 (available: v0.8.3) [INFO] [stderr] Adding preferences v1.1.0 (available: v2.0.0) [INFO] [stderr] Adding regex v0.2.11 (available: v1.12.3) [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded itoa v0.3.4 [INFO] [stderr] Downloaded ole32-sys v0.2.0 [INFO] [stderr] Downloaded shell32-sys v0.1.2 [INFO] [stderr] Downloaded app_dirs v1.2.1 [INFO] [stderr] Downloaded serde v0.9.15 [INFO] [stderr] Downloaded serde_json v0.9.10 [INFO] [stderr] Downloaded preferences v1.1.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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] a4194a33221de73dc286b8b196e73d8511f7af45e3ebb1c4032b1f1cafe79090 [INFO] running `Command { std: "docker" "start" "-a" "a4194a33221de73dc286b8b196e73d8511f7af45e3ebb1c4032b1f1cafe79090", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "a4194a33221de73dc286b8b196e73d8511f7af45e3ebb1c4032b1f1cafe79090", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a4194a33221de73dc286b8b196e73d8511f7af45e3ebb1c4032b1f1cafe79090", kill_on_drop: false }` [INFO] [stdout] a4194a33221de73dc286b8b196e73d8511f7af45e3ebb1c4032b1f1cafe79090 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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] b6e226468e95965f7ba1c99afdb8807b2055fbb14909c58d992c707be20b9f83 [INFO] running `Command { std: "docker" "start" "-a" "b6e226468e95965f7ba1c99afdb8807b2055fbb14909c58d992c707be20b9f83", kill_on_drop: false }` [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Checking itoa v0.3.4 [INFO] [stderr] Checking serde v0.9.15 [INFO] [stderr] Checking unicode-width v0.1.14 [INFO] [stderr] Checking xdg v2.5.2 [INFO] [stderr] Checking dtoa v0.4.8 [INFO] [stderr] Checking num-traits v0.1.43 [INFO] [stderr] Checking atty v0.2.14 [INFO] [stderr] Checking ansi_term v0.12.1 [INFO] [stderr] Checking ordermap v0.3.5 [INFO] [stderr] Checking fixedbitset v0.1.9 [INFO] [stderr] Checking vec_map v0.8.2 [INFO] [stderr] Checking app_dirs v1.2.1 [INFO] [stderr] Checking dirs v1.0.5 [INFO] [stderr] Checking textwrap v0.11.0 [INFO] [stderr] Checking petgraph v0.4.13 [INFO] [stderr] Checking clap v2.34.0 [INFO] [stderr] Checking serde_json v0.9.10 [INFO] [stderr] Checking preferences v1.1.0 [INFO] [stderr] Checking log v0.4.29 [INFO] [stderr] Checking reups v0.3.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | use clap; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `clap` [INFO] [stdout] --> src/lib.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use clap; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | use dirs; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `dirs` [INFO] [stdout] --> src/lib.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use dirs; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | use fnv; [INFO] [stdout] | ^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `fnv` [INFO] [stdout] --> src/lib.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use fnv; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:17:1 [INFO] [stdout] | [INFO] [stdout] 17 | use lazy_static; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `lazy_static` [INFO] [stdout] --> src/lib.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use lazy_static; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `error` [INFO] [stdout] --> src/lib.rs:19:18 [INFO] [stdout] | [INFO] [stdout] 19 | use log::{debug, error, info, warn}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | use preferences; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `preferences` [INFO] [stdout] --> src/lib.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | use preferences; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:22:1 [INFO] [stdout] | [INFO] [stdout] 22 | use regex; [INFO] [stdout] | ^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `regex` [INFO] [stdout] --> src/lib.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | use regex; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/cogs.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | use dirs; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/db/graph.rs:16:1 [INFO] [stdout] | [INFO] [stdout] 16 | / /**! [INFO] [stdout] 17 | | The module graph contains all the machinery for turning products described [INFO] [stdout] 18 | | by table files into a relational graph of those products. [INFO] [stdout] 19 | | */ [INFO] [stdout] 20 | | [INFO] [stdout] | |_^ [INFO] [stdout] ... [INFO] [stdout] 24 | pub enum NodeType { [INFO] [stdout] | ----------------- the comment documents this enum [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_doc_comments)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> src/db/table.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | / /**! [INFO] [stdout] 15 | | A Table object is the in memory representation of a products table file. [INFO] [stdout] 16 | | */ [INFO] [stdout] | |__^ rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/db/table.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `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] = 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/db/table.rs:103:13 [INFO] [stdout] | [INFO] [stdout] 103 | path: path, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `path` [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/db/table.rs:105:13 [INFO] [stdout] | [INFO] [stdout] 105 | exact: exact, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `exact` [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/db/table.rs:106:13 [INFO] [stdout] | [INFO] [stdout] 106 | inexact: inexact, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `inexact` [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/db/table.rs:107:13 [INFO] [stdout] | [INFO] [stdout] 107 | env_var: env_var, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `env_var` [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/db/mod.rs:128:13 [INFO] [stdout] | [INFO] [stdout] 128 | directory: directory, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `directory` [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/db/mod.rs:131:13 [INFO] [stdout] | [INFO] [stdout] 131 | product_to_tags: product_to_tags, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `product_to_tags` [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/db/mod.rs:145:21 [INFO] [stdout] | [INFO] [stdout] 145 | directory: directory, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `directory` [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/db/mod.rs:148:21 [INFO] [stdout] | [INFO] [stdout] 148 | product_to_tags: product_to_tags, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `product_to_tags` [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: this import is redundant [INFO] [stdout] --> src/env.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | use preferences; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/env.rs:132:13 [INFO] [stdout] | [INFO] [stdout] 132 | saved_envs: saved_envs, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `saved_envs` [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: this import is redundant [INFO] [stdout] --> src/logger.rs:7:1 [INFO] [stdout] | [INFO] [stdout] 7 | use log; [INFO] [stdout] | ^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_right_matches`: superseded by `trim_end_matches` [INFO] [stdout] --> src/list.rs:142:43 [INFO] [stdout] | [INFO] [stdout] 142 | println!("{}", self.output_string.trim_right_matches("\n\n")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 142 - println!("{}", self.output_string.trim_right_matches("\n\n")); [INFO] [stdout] 142 + println!("{}", self.output_string.trim_end_matches("\n\n")); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_right_matches`: superseded by `trim_end_matches` [INFO] [stdout] --> src/list.rs:205:34 [INFO] [stdout] | [INFO] [stdout] 205 | ... .trim_right_matches(", ") [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 205 - .trim_right_matches(", ") [INFO] [stdout] 205 + .trim_end_matches(", ") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_right_matches`: superseded by `trim_end_matches` [INFO] [stdout] --> src/list.rs:232:30 [INFO] [stdout] | [INFO] [stdout] 232 | ... .trim_right_matches(", ") [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 232 - .trim_right_matches(", ") [INFO] [stdout] 232 + .trim_end_matches(", ") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | / return SubCommand::with_name("setup") [INFO] [stdout] 15 | | .arg(Arg::with_name("product").help("Product to setup").index(1)) [INFO] [stdout] 16 | | .arg( [INFO] [stdout] 17 | | Arg::with_name("just") [INFO] [stdout] ... | [INFO] [stdout] 55 | | .help("Sets the level of verbosity, multiple occurances increases verbosity"), [INFO] [stdout] 56 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 14 ~ SubCommand::with_name("setup") [INFO] [stdout] 15 + .arg(Arg::with_name("product").help("Product to setup").index(1)) [INFO] [stdout] 16 + .arg( [INFO] [stdout] 17 + Arg::with_name("just") [INFO] [stdout] 18 + .help("ignore dependncies") [INFO] [stdout] 19 + .short("j") [INFO] [stdout] 20 + .long("just"), [INFO] [stdout] 21 + ) [INFO] [stdout] 22 + .arg( [INFO] [stdout] 23 + Arg::with_name("relative") [INFO] [stdout] 24 + .help("setup relative path") [INFO] [stdout] 25 + .short("r") [INFO] [stdout] 26 + .long("relative") [INFO] [stdout] 27 + .takes_value(true), [INFO] [stdout] 28 + ) [INFO] [stdout] 29 + .arg( [INFO] [stdout] 30 + Arg::with_name("keep") [INFO] [stdout] 31 + .help("keep exsisting setup products") [INFO] [stdout] 32 + .short("k") [INFO] [stdout] 33 + .long("keep"), [INFO] [stdout] 34 + ) [INFO] [stdout] 35 + .arg( [INFO] [stdout] 36 + Arg::with_name("tag") [INFO] [stdout] 37 + .help("specify one or more tags to look up for products, evaluated left to right") [INFO] [stdout] 38 + .short("t") [INFO] [stdout] 39 + .long("tag") [INFO] [stdout] 40 + .multiple(true) [INFO] [stdout] 41 + .number_of_values(1) [INFO] [stdout] 42 + .takes_value(true), [INFO] [stdout] 43 + ) [INFO] [stdout] 44 + .arg( [INFO] [stdout] 45 + Arg::with_name("inexact") [INFO] [stdout] 46 + .help("Run setup with Inexact versions as specified in the table files") [INFO] [stdout] 47 + .short("E") [INFO] [stdout] 48 + .long("inexact"), [INFO] [stdout] 49 + ) [INFO] [stdout] 50 + .arg( [INFO] [stdout] 51 + Arg::with_name("verbose") [INFO] [stdout] 52 + .short("v") [INFO] [stdout] 53 + .long("verbose") [INFO] [stdout] 54 + .multiple(true) [INFO] [stdout] 55 + .help("Sets the level of verbosity, multiple occurances increases verbosity"), [INFO] [stdout] 56 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 63 | / return SubCommand::with_name("list") [INFO] [stdout] 64 | | .arg(Arg::with_name("product") [INFO] [stdout] 65 | | .help("Name of product to list (optional)") [INFO] [stdout] 66 | | .index(1) [INFO] [stdout] ... | [INFO] [stdout] 90 | | .long("local") [INFO] [stdout] 91 | | .conflicts_with_all(&["product", "setup"])); [INFO] [stdout] | |__________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 63 ~ SubCommand::with_name("list") [INFO] [stdout] 64 + .arg(Arg::with_name("product") [INFO] [stdout] 65 + .help("Name of product to list (optional)") [INFO] [stdout] 66 + .index(1) [INFO] [stdout] 67 + .conflicts_with_all(&["setup", "local"])) [INFO] [stdout] 68 + .arg(Arg::with_name("setup") [INFO] [stdout] 69 + .help("List only setup products") [INFO] [stdout] 70 + .short("s") [INFO] [stdout] 71 + .long("setup") [INFO] [stdout] 72 + .conflicts_with_all(&["product", "local"])) [INFO] [stdout] 73 + .arg(Arg::with_name("tags") [INFO] [stdout] 74 + .help("List only these tags (does not include current)") [INFO] [stdout] 75 + .short("t") [INFO] [stdout] 76 + .long("tags") [INFO] [stdout] 77 + .multiple(true) [INFO] [stdout] 78 + .number_of_values(1) [INFO] [stdout] 79 + .takes_value(true)) [INFO] [stdout] 80 + .arg(Arg::with_name("onlyTags") [INFO] [stdout] 81 + .help("Only list product & tags (faster than tags and versions, but does not indicate setup tag)") [INFO] [stdout] 82 + .long("onlyTags")) [INFO] [stdout] 83 + .arg(Arg::with_name("onlyVers") [INFO] [stdout] 84 + .help("Only list product & versions (faster than tags and versions)") [INFO] [stdout] 85 + .long("onlyVers") [INFO] [stdout] 86 + .conflicts_with("onlyTags")) [INFO] [stdout] 87 + .arg(Arg::with_name("local") [INFO] [stdout] 88 + .help("Only list products that are setup as local products") [INFO] [stdout] 89 + .short("l") [INFO] [stdout] 90 + .long("local") [INFO] [stdout] 91 ~ .conflicts_with_all(&["product", "setup"])) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:98:5 [INFO] [stdout] | [INFO] [stdout] 98 | / return SubCommand::with_name("completions") [INFO] [stdout] 99 | | .about("Creates auto completeion scripts for given shell") [INFO] [stdout] 100 | | .arg( [INFO] [stdout] 101 | | Arg::with_name("shell") [INFO] [stdout] ... | [INFO] [stdout] 104 | | .help("Shell to create completions for"), [INFO] [stdout] 105 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 98 ~ SubCommand::with_name("completions") [INFO] [stdout] 99 + .about("Creates auto completeion scripts for given shell") [INFO] [stdout] 100 + .arg( [INFO] [stdout] 101 + Arg::with_name("shell") [INFO] [stdout] 102 + .required(true) [INFO] [stdout] 103 + .possible_values(&["bash", "fish", "zsh", "elvish"]) [INFO] [stdout] 104 + .help("Shell to create completions for"), [INFO] [stdout] 105 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:113:5 [INFO] [stdout] | [INFO] [stdout] 113 | / return SubCommand::with_name("env") [INFO] [stdout] 114 | | .about("Save or restore an existing reups environment") [INFO] [stdout] 115 | | .arg( [INFO] [stdout] 116 | | Arg::with_name("command") [INFO] [stdout] ... | [INFO] [stdout] 131 | | .help("Sets the level of verbosity, multiple occurances increases verbosity"), [INFO] [stdout] 132 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 113 ~ SubCommand::with_name("env") [INFO] [stdout] 114 + .about("Save or restore an existing reups environment") [INFO] [stdout] 115 + .arg( [INFO] [stdout] 116 + Arg::with_name("command") [INFO] [stdout] 117 + .required(true) [INFO] [stdout] 118 + .possible_values(&["save", "restore", "delete", "list"]) [INFO] [stdout] 119 + .help("Action to take for a given environment, to restore you most likely want to use the rrestore shell function"), [INFO] [stdout] 120 + ) [INFO] [stdout] 121 + .arg( [INFO] [stdout] 122 + Arg::with_name("name") [INFO] [stdout] 123 + .required(false) [INFO] [stdout] 124 + .help("Optional name to save/restore"), [INFO] [stdout] 125 + ) [INFO] [stdout] 126 + .arg( [INFO] [stdout] 127 + Arg::with_name("verbose") [INFO] [stdout] 128 + .short("v") [INFO] [stdout] 129 + .long("verbose") [INFO] [stdout] 130 + .multiple(true) [INFO] [stdout] 131 + .help("Sets the level of verbosity, multiple occurances increases verbosity"), [INFO] [stdout] 132 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:142:5 [INFO] [stdout] | [INFO] [stdout] 142 | return SubCommand::with_name("prep"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 142 - return SubCommand::with_name("prep"); [INFO] [stdout] 142 + SubCommand::with_name("prep") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:166:5 [INFO] [stdout] | [INFO] [stdout] 166 | return matches; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 166 - return matches; [INFO] [stdout] 166 + matches [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this is an outer doc comment and does not apply to the parent module or crate [INFO] [stdout] --> src/db/mod.rs:6:1 [INFO] [stdout] | [INFO] [stdout] 6 | / /**! [INFO] [stdout] 7 | | The db module is the heart of the reups program. The custom in memory [INFO] [stdout] 8 | | database it provides encodes the tag, version, table file path relations [INFO] [stdout] 9 | | between all the products reups is aware of. [INFO] [stdout] 10 | | */ [INFO] [stdout] | |__^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_doc_comments [INFO] [stdout] = note: `#[warn(clippy::suspicious_doc_comments)]` on by default [INFO] [stdout] help: use an inner doc comment to document the parent module or crate [INFO] [stdout] | [INFO] [stdout] 6 + /*! [INFO] [stdout] 7 + The db module is the heart of the reups program. The custom in memory [INFO] [stdout] 8 + database it provides encodes the tag, version, table file path relations [INFO] [stdout] 9 + between all the products reups is aware of. [INFO] [stdout] 10 + */ [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/db/dbfile.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 69 | / match self.contents.borrow().get(key) { [INFO] [stdout] 70 | | Some(value) => Some(value.clone()), [INFO] [stdout] 71 | | None => None, [INFO] [stdout] 72 | | } [INFO] [stdout] | |_________^ help: try: `self.contents.borrow().get(key).map(|value| value.clone())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this is an outer doc comment and does not apply to the parent module or crate [INFO] [stdout] --> src/db/graph.rs:16:1 [INFO] [stdout] | [INFO] [stdout] 16 | / /**! [INFO] [stdout] 17 | | The module graph contains all the machinery for turning products described [INFO] [stdout] 18 | | by table files into a relational graph of those products. [INFO] [stdout] 19 | | */ [INFO] [stdout] | |___^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_doc_comments [INFO] [stdout] help: use an inner doc comment to document the parent module or crate [INFO] [stdout] | [INFO] [stdout] 16 + /*! [INFO] [stdout] 17 + The module graph contains all the machinery for turning products described [INFO] [stdout] 18 + by table files into a relational graph of those products. [INFO] [stdout] 19 + */ [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/db/graph.rs:66:9 [INFO] [stdout] | [INFO] [stdout] 66 | return self._index_map[&number].clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 66 - return self._index_map[&number].clone(); [INFO] [stdout] 66 + self._index_map[&number].clone() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/db/graph.rs:110:9 [INFO] [stdout] | [INFO] [stdout] 110 | / match weight { [INFO] [stdout] 111 | | Some(NodeType::Optional) => true, [INFO] [stdout] 112 | | _ => false, [INFO] [stdout] 113 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 110 - match weight { [INFO] [stdout] 111 - Some(NodeType::Optional) => true, [INFO] [stdout] 112 - _ => false, [INFO] [stdout] 113 - } [INFO] [stdout] 110 + matches!(weight, Some(NodeType::Optional)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_none()` [INFO] [stdout] --> src/db/graph.rs:194:16 [INFO] [stdout] | [INFO] [stdout] 194 | if let None = dependencies { [INFO] [stdout] | -------^^^^--------------- help: try: `if dependencies.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/db/graph.rs:206:24 [INFO] [stdout] | [INFO] [stdout] 206 | if let Err(_) = self.connect_products(top, &k, v.clone()) { [INFO] [stdout] | -------^^^^^^-------------------------------------------- help: try: `if self.connect_products(top, &k, v.clone()).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/db/graph.rs:206:60 [INFO] [stdout] | [INFO] [stdout] 206 | if let Err(_) = self.connect_products(top, &k, v.clone()) { [INFO] [stdout] | ^^ help: change this to: `k` [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/db/graph.rs:235:10 [INFO] [stdout] | [INFO] [stdout] 235 | ) -> petgraph::visit::WalkerIter< [INFO] [stdout] | __________^ [INFO] [stdout] 236 | | petgraph::visit::Topo< [INFO] [stdout] 237 | | as petgraph::visit::GraphBase>::NodeId, [INFO] [stdout] 238 | | as petgraph::visit::Visitable>::Map, [INFO] [stdout] 239 | | >, [INFO] [stdout] 240 | | &petgraph::Graph, [INFO] [stdout] 241 | | > { [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: unneeded `return` statement [INFO] [stdout] --> src/db/graph.rs:243:9 [INFO] [stdout] | [INFO] [stdout] 243 | return topo.iter(&self._graph); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 243 - return topo.iter(&self._graph); [INFO] [stdout] 243 + topo.iter(&self._graph) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> src/db/table.rs:85:61 [INFO] [stdout] | [INFO] [stdout] 85 | let exact = Table::extract_setup(contents.as_str(), &*EXACT); [INFO] [stdout] | ^^^^^^^ help: try: `&EXACT` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] = note: `#[warn(clippy::explicit_auto_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> src/db/table.rs:87:63 [INFO] [stdout] | [INFO] [stdout] 87 | let inexact = Table::extract_setup(contents.as_str(), &*INEXACT); [INFO] [stdout] | ^^^^^^^^^ help: try: `&INEXACT` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/db/mod.rs:98:9 [INFO] [stdout] | [INFO] [stdout] 98 | write!(f, "Database at {:?}\n", self.system_db.directory)?; [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] 98 - write!(f, "Database at {:?}\n", self.system_db.directory)?; [INFO] [stdout] 98 + writeln!(f, "Database at {:?}", self.system_db.directory)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/db/mod.rs:100:13 [INFO] [stdout] | [INFO] [stdout] 100 | write!(f, "User database at {:?}\n", user_db.directory)?; [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] 100 - write!(f, "User database at {:?}\n", user_db.directory)?; [INFO] [stdout] 100 + writeln!(f, "User database at {:?}", user_db.directory)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/db/mod.rs:102:9 [INFO] [stdout] | [INFO] [stdout] 102 | write!(f, "Stack at {:?}\n", self.stack_root) [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] 102 - write!(f, "Stack at {:?}\n", self.stack_root) [INFO] [stdout] 102 + writeln!(f, "Stack at {:?}", self.stack_root) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::path::PathBuf` [INFO] [stdout] --> src/db/mod.rs:157:21 [INFO] [stdout] | [INFO] [stdout] 157 | None => path::PathBuf::from(eups_path) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `path::PathBuf::from()`: `eups_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/db/mod.rs:183:28 [INFO] [stdout] | [INFO] [stdout] 183 | acc.extend(db.product_to_tags.keys().map(|x| x.clone())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `cloned` method: `db.product_to_tags.keys().cloned()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/db/mod.rs:203:21 [INFO] [stdout] | [INFO] [stdout] 203 | / db.product_to_version_info[product] [INFO] [stdout] 204 | | .keys() [INFO] [stdout] 205 | | .map(|x| x.clone()), [INFO] [stdout] | |___________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 203 ~ db.product_to_version_info[product] [INFO] [stdout] 204 ~ .keys().cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stdout] --> src/db/mod.rs:307:25 [INFO] [stdout] | [INFO] [stdout] 307 | let ref tag_map = db.tag_to_product_info[t.clone()]; [INFO] [stdout] | ----^^^^^^^^^^^------------------------------------- help: try: `let tag_map = &db.tag_to_product_info[t.clone()];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stdout] = note: `#[warn(clippy::toplevel_ref_arg)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/db/mod.rs:363:9 [INFO] [stdout] | [INFO] [stdout] 363 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 363 - return false; [INFO] [stdout] 363 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/db/mod.rs:357:65 [INFO] [stdout] | [INFO] [stdout] 357 | if db.product_to_version_info.contains_key(product) { [INFO] [stdout] | _________________________________________________________________^ [INFO] [stdout] 358 | | return true; [INFO] [stdout] 359 | | } else if db.product_to_tags.contains_key(product) { [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/db/mod.rs:359:64 [INFO] [stdout] | [INFO] [stdout] 359 | } else if db.product_to_tags.contains_key(product) { [INFO] [stdout] | ________________________________________________________________^ [INFO] [stdout] 360 | | return true; [INFO] [stdout] 361 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/db/mod.rs:375:6 [INFO] [stdout] | [INFO] [stdout] 375 | ) -> ( [INFO] [stdout] | ______^ [INFO] [stdout] 376 | | path::PathBuf, [INFO] [stdout] 377 | | FnvHashMap>, [INFO] [stdout] 378 | | FnvHashMap>, [INFO] [stdout] 379 | | FnvHashMap>, [INFO] [stdout] 380 | | ) { [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: use of `or_insert` to construct default value [INFO] [stdout] --> src/db/mod.rs:449:64 [INFO] [stdout] | [INFO] [stdout] 449 | let version_hash = product_hash.entry(product).or_insert(FnvHashMap::default()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/db/mod.rs:487:71 [INFO] [stdout] | [INFO] [stdout] 487 | let tags_vec = product_to_tags.entry(product.clone()).or_insert(Vec::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/db/mod.rs:501:57 [INFO] [stdout] | [INFO] [stdout] 501 | let product_hash = tags_hash.entry(tag).or_insert(FnvHashMap::default()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this is an outer doc comment and does not apply to the parent module or crate [INFO] [stdout] --> src/env.rs:6:1 [INFO] [stdout] | [INFO] [stdout] 6 | / /**! [INFO] [stdout] 7 | | * This module manages saving and restoring a users environment as it is setup. The idea behind [INFO] [stdout] 8 | | * this module is that a user may issue several different calls to rsetup (reups setup) to [INFO] [stdout] 9 | | * configure the exact packages active. The user can then save this setup to restore into a [INFO] [stdout] ... | [INFO] [stdout] 16 | | * [INFO] [stdout] 17 | | **/ [INFO] [stdout] | |____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_doc_comments [INFO] [stdout] help: use an inner doc comment to document the parent module or crate [INFO] [stdout] | [INFO] [stdout] 6 + /*! [INFO] [stdout] 7 + * This module manages saving and restoring a users environment as it is setup. The idea behind [INFO] [stdout] 8 + * this module is that a user may issue several different calls to rsetup (reups setup) to [INFO] [stdout] 9 + * configure the exact packages active. The user can then save this setup to restore into a [INFO] [stdout] 10 + * different shell. This is not meant as a complete replacement for tagging product directories, [INFO] [stdout] 11 + * but as a sort of save your work buffer for setups that are not intended to live for a long [INFO] [stdout] 12 + * time. As a caveat this also replays the commands issued exactly, so if anything changed (such as [INFO] [stdout] 13 + * the current tag changing) commands will not necessarily recreate the exact environment at the [INFO] [stdout] 14 + * time of saving, but will reconstruct an environment as if the current (r)eups environment was [INFO] [stdout] 15 + * the environment when the commands were first issued. [INFO] [stdout] 16 + * [INFO] [stdout] 17 + **/ [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item overindented [INFO] [stdout] --> src/env.rs:50:4 [INFO] [stdout] | [INFO] [stdout] 50 | * global arguments [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try using ` ` (2 spaces) [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_overindented_list_items [INFO] [stdout] = note: `#[warn(clippy::doc_overindented_list_items)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `saved_envs` after checking its variant with `is_ok` [INFO] [stdout] --> src/env.rs:102:17 [INFO] [stdout] | [INFO] [stdout] 100 | if saved_envs.is_ok() { [INFO] [stdout] | --------------------- help: try: `if let Ok() = saved_envs` [INFO] [stdout] 101 | crate::debug!("saved_envs loaded existing env"); [INFO] [stdout] 102 | saved_envs.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/env.rs:83:53 [INFO] [stdout] | [INFO] [stdout] 83 | Ok(existing) => existing.split("|").map(|x| String::from(x)).collect(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::from` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | use clap; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `clap` [INFO] [stdout] --> src/lib.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | use clap; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | use dirs; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `dirs` [INFO] [stdout] --> src/lib.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | use dirs; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | use fnv; [INFO] [stdout] | ^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `fnv` [INFO] [stdout] --> src/lib.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use fnv; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:17:1 [INFO] [stdout] | [INFO] [stdout] 17 | use lazy_static; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `lazy_static` [INFO] [stdout] --> src/lib.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 17 | use lazy_static; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/env.rs:205:12 [INFO] [stdout] | [INFO] [stdout] 205 | if !save_result.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `save_result.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: unused import: `error` [INFO] [stdout] --> src/lib.rs:19:18 [INFO] [stdout] | [INFO] [stdout] 19 | use log::{debug, error, info, warn}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | use preferences; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `preferences` [INFO] [stdout] --> src/lib.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | use preferences; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/lib.rs:22:1 [INFO] [stdout] | [INFO] [stdout] 22 | use regex; [INFO] [stdout] | ^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `regex` [INFO] [stdout] --> src/lib.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | use regex; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/cogs.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | use dirs; [INFO] [stdout] | ^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/db/graph.rs:16:1 [INFO] [stdout] | [INFO] [stdout] 16 | / /**! [INFO] [stdout] 17 | | The module graph contains all the machinery for turning products described [INFO] [stdout] 18 | | by table files into a relational graph of those products. [INFO] [stdout] 19 | | */ [INFO] [stdout] 20 | | [INFO] [stdout] | |_^ [INFO] [stdout] ... [INFO] [stdout] 24 | pub enum NodeType { [INFO] [stdout] | ----------------- the comment documents this enum [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_doc_comments)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/list.rs:109:13 [INFO] [stdout] | [INFO] [stdout] 109 | self.local_setups.keys().map(|k| k.clone()).collect() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `cloned` method: `self.local_setups.keys().cloned()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> src/db/table.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | / /**! [INFO] [stdout] 15 | | A Table object is the in memory representation of a products table file. [INFO] [stdout] 16 | | */ [INFO] [stdout] | |__^ rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/db/table.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | name: name, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `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] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `self.tags` after checking its variant with `is_some` [INFO] [stdout] --> src/list.rs:154:13 [INFO] [stdout] | [INFO] [stdout] 153 | let tags = if self.tags.is_some() { [INFO] [stdout] | ---------------------- help: try: `if let Some() = &self.tags` [INFO] [stdout] 154 | self.tags.as_ref().unwrap().clone() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/db/table.rs:103:13 [INFO] [stdout] | [INFO] [stdout] 103 | path: path, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `path` [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/db/table.rs:105:13 [INFO] [stdout] | [INFO] [stdout] 105 | exact: exact, [INFO] [stdout] | ^^^^^^^^^^^^ help: replace it with: `exact` [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/db/table.rs:106:13 [INFO] [stdout] | [INFO] [stdout] 106 | inexact: inexact, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `inexact` [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/db/table.rs:107:13 [INFO] [stdout] | [INFO] [stdout] 107 | env_var: env_var, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `env_var` [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/db/mod.rs:128:13 [INFO] [stdout] | [INFO] [stdout] 128 | directory: directory, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `directory` [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/db/mod.rs:131:13 [INFO] [stdout] | [INFO] [stdout] 131 | product_to_tags: product_to_tags, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `product_to_tags` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/list.rs:228:37 [INFO] [stdout] | [INFO] [stdout] 228 | ... &x [INFO] [stdout] | ^^ help: change this to: `x` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/db/mod.rs:145:21 [INFO] [stdout] | [INFO] [stdout] 145 | directory: directory, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `directory` [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/db/mod.rs:148:21 [INFO] [stdout] | [INFO] [stdout] 148 | product_to_tags: product_to_tags, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `product_to_tags` [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: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/list.rs:249:17 [INFO] [stdout] | [INFO] [stdout] 249 | self.output_string.push_str("["); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `self.output_string.push('[')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/list.rs:265:17 [INFO] [stdout] | [INFO] [stdout] 265 | self.output_string.push_str("]"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `self.output_string.push(']')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/env.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | use preferences; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/env.rs:132:13 [INFO] [stdout] | [INFO] [stdout] 132 | saved_envs: saved_envs, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `saved_envs` [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: this import is redundant [INFO] [stdout] --> src/logger.rs:7:1 [INFO] [stdout] | [INFO] [stdout] 7 | use log; [INFO] [stdout] | ^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> src/setup.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | /// equal to the value of the variable. [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: if this is supposed to be its own paragraph, add a blank line [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation [INFO] [stdout] = note: `#[warn(clippy::doc_lazy_continuation)]` on by default [INFO] [stdout] help: indent this line [INFO] [stdout] | [INFO] [stdout] 36 | /// equal to the value of the variable. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/setup.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | flavor: &String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 43 ~ flavor: &str, [INFO] [stdout] 44 | db_path: PathBuf, [INFO] [stdout] ... [INFO] [stdout] 71 | } else { [INFO] [stdout] 72 ~ setup_string_vec.push(flavor.to_owned()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/setup.rs:101:21 [INFO] [stdout] | [INFO] [stdout] 101 | None => match env::var(k) { [INFO] [stdout] | _____________________^ [INFO] [stdout] 102 | | Ok(r) => r, [INFO] [stdout] 103 | | Err(_) => String::from(""), [INFO] [stdout] 104 | | }, [INFO] [stdout] | |_____________^ help: ascribe the type std::string::String and replace your expression with: `env::var(k).unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/setup.rs:190:12 [INFO] [stdout] | [INFO] [stdout] 190 | if !search_path.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `search_path.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `search_path` after checking its variant with `is_none` [INFO] [stdout] --> src/setup.rs:191:40 [INFO] [stdout] | [INFO] [stdout] 190 | if !search_path.is_none() { [INFO] [stdout] | --------------------- the check is happening here [INFO] [stdout] 191 | for entry in fs::read_dir(&search_path.unwrap()).unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/setup.rs:211:9 [INFO] [stdout] | [INFO] [stdout] 211 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 211 - return None; [INFO] [stdout] 211 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/setup.rs:191:39 [INFO] [stdout] | [INFO] [stdout] 191 | for entry in fs::read_dir(&search_path.unwrap()).unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `search_path.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/setup.rs:224:15 [INFO] [stdout] | [INFO] [stdout] 224 | let err = std::io::Error::new(std::io::ErrorKind::Other, "Problem normalizing Path"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 224 - let err = std::io::Error::new(std::io::ErrorKind::Other, "Problem normalizing Path"); [INFO] [stdout] 224 + let err = std::io::Error::other("Problem normalizing Path"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `table` after checking its variant with `is_some` [INFO] [stdout] --> src/setup.rs:332:30 [INFO] [stdout] | [INFO] [stdout] 330 | if table.is_some() { [INFO] [stdout] | ------------------ help: try: `if let Some() = &table` [INFO] [stdout] 331 | let mut tmp = String::from("LOCAL:"); [INFO] [stdout] 332 | tmp.push_str(table.as_ref().unwrap().path.to_str().unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/setup.rs:317:13 [INFO] [stdout] | [INFO] [stdout] 317 | / match versions.last() { [INFO] [stdout] 318 | | Some(v) => { [INFO] [stdout] 319 | | version = v.clone(); [INFO] [stdout] ... | [INFO] [stdout] 322 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 317 ~ if let Some(v) = versions.last() { [INFO] [stdout] 318 + version = v.clone(); [INFO] [stdout] 319 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/setup.rs:401:21 [INFO] [stdout] | [INFO] [stdout] 401 | / match versions.last() { [INFO] [stdout] 402 | | Some(v) => { [INFO] [stdout] 403 | | largest_version = v.clone(); [INFO] [stdout] ... | [INFO] [stdout] 406 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 401 ~ if let Some(v) = versions.last() { [INFO] [stdout] 402 + largest_version = v.clone(); [INFO] [stdout] 403 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/setup.rs:466:13 [INFO] [stdout] | [INFO] [stdout] 466 | return_string.push_str(" "); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `return_string.push(' ')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/db/graph.rs:200:37 [INFO] [stdout] | [INFO] [stdout] 200 | for (dep_vec, node_type) in vec![&dep_unwrap.required, &dep_unwrap.optional] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `[&dep_unwrap.required, &dep_unwrap.optional]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/setup.rs:241:20 [INFO] [stdout] | [INFO] [stdout] 241 | let switches = vec!["-r"]; [INFO] [stdout] | ^^^^^^^^^^ help: you can use an array directly: `["-r"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `.clone()` on a double reference, which returns `&std::string::String` instead of cloning the inner type [INFO] [stdout] --> src/db/mod.rs:306:57 [INFO] [stdout] | [INFO] [stdout] 306 | if db.tag_to_product_info.contains_key(t.clone()) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(suspicious_double_ref_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `.clone()` on a double reference, which returns `&std::string::String` instead of cloning the inner type [INFO] [stdout] --> src/db/mod.rs:307:63 [INFO] [stdout] | [INFO] [stdout] 307 | let ref tag_map = db.tag_to_product_info[t.clone()]; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/db/graph.rs:52:31 [INFO] [stdout] | [INFO] [stdout] 52 | pub fn new(db: &'a DB) -> Graph { [INFO] [stdout] | -- ^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is named 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: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 52 | pub fn new(db: &'a DB) -> Graph<'a> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `.clone()` on a double reference, which returns `&std::string::String` instead of cloning the inner type [INFO] [stdout] --> src/setup.rs:394:73 [INFO] [stdout] | [INFO] [stdout] 394 | let mut largest_version = versions.iter().max().unwrap().clone().clone(); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_right_matches`: superseded by `trim_end_matches` [INFO] [stdout] --> src/list.rs:142:43 [INFO] [stdout] | [INFO] [stdout] 142 | println!("{}", self.output_string.trim_right_matches("\n\n")); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 142 - println!("{}", self.output_string.trim_right_matches("\n\n")); [INFO] [stdout] 142 + println!("{}", self.output_string.trim_end_matches("\n\n")); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_right_matches`: superseded by `trim_end_matches` [INFO] [stdout] --> src/list.rs:205:34 [INFO] [stdout] | [INFO] [stdout] 205 | ... .trim_right_matches(", ") [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 205 - .trim_right_matches(", ") [INFO] [stdout] 205 + .trim_end_matches(", ") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `core::str::::trim_right_matches`: superseded by `trim_end_matches` [INFO] [stdout] --> src/list.rs:232:30 [INFO] [stdout] | [INFO] [stdout] 232 | ... .trim_right_matches(", ") [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: replace the use of the deprecated method [INFO] [stdout] | [INFO] [stdout] 232 - .trim_right_matches(", ") [INFO] [stdout] 232 + .trim_end_matches(", ") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:14:5 [INFO] [stdout] | [INFO] [stdout] 14 | / return SubCommand::with_name("setup") [INFO] [stdout] 15 | | .arg(Arg::with_name("product").help("Product to setup").index(1)) [INFO] [stdout] 16 | | .arg( [INFO] [stdout] 17 | | Arg::with_name("just") [INFO] [stdout] ... | [INFO] [stdout] 55 | | .help("Sets the level of verbosity, multiple occurances increases verbosity"), [INFO] [stdout] 56 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 14 ~ SubCommand::with_name("setup") [INFO] [stdout] 15 + .arg(Arg::with_name("product").help("Product to setup").index(1)) [INFO] [stdout] 16 + .arg( [INFO] [stdout] 17 + Arg::with_name("just") [INFO] [stdout] 18 + .help("ignore dependncies") [INFO] [stdout] 19 + .short("j") [INFO] [stdout] 20 + .long("just"), [INFO] [stdout] 21 + ) [INFO] [stdout] 22 + .arg( [INFO] [stdout] 23 + Arg::with_name("relative") [INFO] [stdout] 24 + .help("setup relative path") [INFO] [stdout] 25 + .short("r") [INFO] [stdout] 26 + .long("relative") [INFO] [stdout] 27 + .takes_value(true), [INFO] [stdout] 28 + ) [INFO] [stdout] 29 + .arg( [INFO] [stdout] 30 + Arg::with_name("keep") [INFO] [stdout] 31 + .help("keep exsisting setup products") [INFO] [stdout] 32 + .short("k") [INFO] [stdout] 33 + .long("keep"), [INFO] [stdout] 34 + ) [INFO] [stdout] 35 + .arg( [INFO] [stdout] 36 + Arg::with_name("tag") [INFO] [stdout] 37 + .help("specify one or more tags to look up for products, evaluated left to right") [INFO] [stdout] 38 + .short("t") [INFO] [stdout] 39 + .long("tag") [INFO] [stdout] 40 + .multiple(true) [INFO] [stdout] 41 + .number_of_values(1) [INFO] [stdout] 42 + .takes_value(true), [INFO] [stdout] 43 + ) [INFO] [stdout] 44 + .arg( [INFO] [stdout] 45 + Arg::with_name("inexact") [INFO] [stdout] 46 + .help("Run setup with Inexact versions as specified in the table files") [INFO] [stdout] 47 + .short("E") [INFO] [stdout] 48 + .long("inexact"), [INFO] [stdout] 49 + ) [INFO] [stdout] 50 + .arg( [INFO] [stdout] 51 + Arg::with_name("verbose") [INFO] [stdout] 52 + .short("v") [INFO] [stdout] 53 + .long("verbose") [INFO] [stdout] 54 + .multiple(true) [INFO] [stdout] 55 + .help("Sets the level of verbosity, multiple occurances increases verbosity"), [INFO] [stdout] 56 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 63 | / return SubCommand::with_name("list") [INFO] [stdout] 64 | | .arg(Arg::with_name("product") [INFO] [stdout] 65 | | .help("Name of product to list (optional)") [INFO] [stdout] 66 | | .index(1) [INFO] [stdout] ... | [INFO] [stdout] 90 | | .long("local") [INFO] [stdout] 91 | | .conflicts_with_all(&["product", "setup"])); [INFO] [stdout] | |__________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 63 ~ SubCommand::with_name("list") [INFO] [stdout] 64 + .arg(Arg::with_name("product") [INFO] [stdout] 65 + .help("Name of product to list (optional)") [INFO] [stdout] 66 + .index(1) [INFO] [stdout] 67 + .conflicts_with_all(&["setup", "local"])) [INFO] [stdout] 68 + .arg(Arg::with_name("setup") [INFO] [stdout] 69 + .help("List only setup products") [INFO] [stdout] 70 + .short("s") [INFO] [stdout] 71 + .long("setup") [INFO] [stdout] 72 + .conflicts_with_all(&["product", "local"])) [INFO] [stdout] 73 + .arg(Arg::with_name("tags") [INFO] [stdout] 74 + .help("List only these tags (does not include current)") [INFO] [stdout] 75 + .short("t") [INFO] [stdout] 76 + .long("tags") [INFO] [stdout] 77 + .multiple(true) [INFO] [stdout] 78 + .number_of_values(1) [INFO] [stdout] 79 + .takes_value(true)) [INFO] [stdout] 80 + .arg(Arg::with_name("onlyTags") [INFO] [stdout] 81 + .help("Only list product & tags (faster than tags and versions, but does not indicate setup tag)") [INFO] [stdout] 82 + .long("onlyTags")) [INFO] [stdout] 83 + .arg(Arg::with_name("onlyVers") [INFO] [stdout] 84 + .help("Only list product & versions (faster than tags and versions)") [INFO] [stdout] 85 + .long("onlyVers") [INFO] [stdout] 86 + .conflicts_with("onlyTags")) [INFO] [stdout] 87 + .arg(Arg::with_name("local") [INFO] [stdout] 88 + .help("Only list products that are setup as local products") [INFO] [stdout] 89 + .short("l") [INFO] [stdout] 90 + .long("local") [INFO] [stdout] 91 ~ .conflicts_with_all(&["product", "setup"])) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:98:5 [INFO] [stdout] | [INFO] [stdout] 98 | / return SubCommand::with_name("completions") [INFO] [stdout] 99 | | .about("Creates auto completeion scripts for given shell") [INFO] [stdout] 100 | | .arg( [INFO] [stdout] 101 | | Arg::with_name("shell") [INFO] [stdout] ... | [INFO] [stdout] 104 | | .help("Shell to create completions for"), [INFO] [stdout] 105 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 98 ~ SubCommand::with_name("completions") [INFO] [stdout] 99 + .about("Creates auto completeion scripts for given shell") [INFO] [stdout] 100 + .arg( [INFO] [stdout] 101 + Arg::with_name("shell") [INFO] [stdout] 102 + .required(true) [INFO] [stdout] 103 + .possible_values(&["bash", "fish", "zsh", "elvish"]) [INFO] [stdout] 104 + .help("Shell to create completions for"), [INFO] [stdout] 105 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:113:5 [INFO] [stdout] | [INFO] [stdout] 113 | / return SubCommand::with_name("env") [INFO] [stdout] 114 | | .about("Save or restore an existing reups environment") [INFO] [stdout] 115 | | .arg( [INFO] [stdout] 116 | | Arg::with_name("command") [INFO] [stdout] ... | [INFO] [stdout] 131 | | .help("Sets the level of verbosity, multiple occurances increases verbosity"), [INFO] [stdout] 132 | | ); [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 113 ~ SubCommand::with_name("env") [INFO] [stdout] 114 + .about("Save or restore an existing reups environment") [INFO] [stdout] 115 + .arg( [INFO] [stdout] 116 + Arg::with_name("command") [INFO] [stdout] 117 + .required(true) [INFO] [stdout] 118 + .possible_values(&["save", "restore", "delete", "list"]) [INFO] [stdout] 119 + .help("Action to take for a given environment, to restore you most likely want to use the rrestore shell function"), [INFO] [stdout] 120 + ) [INFO] [stdout] 121 + .arg( [INFO] [stdout] 122 + Arg::with_name("name") [INFO] [stdout] 123 + .required(false) [INFO] [stdout] 124 + .help("Optional name to save/restore"), [INFO] [stdout] 125 + ) [INFO] [stdout] 126 + .arg( [INFO] [stdout] 127 + Arg::with_name("verbose") [INFO] [stdout] 128 + .short("v") [INFO] [stdout] 129 + .long("verbose") [INFO] [stdout] 130 + .multiple(true) [INFO] [stdout] 131 + .help("Sets the level of verbosity, multiple occurances increases verbosity"), [INFO] [stdout] 132 ~ ) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:142:5 [INFO] [stdout] | [INFO] [stdout] 142 | return SubCommand::with_name("prep"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 142 - return SubCommand::with_name("prep"); [INFO] [stdout] 142 + SubCommand::with_name("prep") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/argparse.rs:166:5 [INFO] [stdout] | [INFO] [stdout] 166 | return matches; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 166 - return matches; [INFO] [stdout] 166 + matches [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this is an outer doc comment and does not apply to the parent module or crate [INFO] [stdout] --> src/db/mod.rs:6:1 [INFO] [stdout] | [INFO] [stdout] 6 | / /**! [INFO] [stdout] 7 | | The db module is the heart of the reups program. The custom in memory [INFO] [stdout] 8 | | database it provides encodes the tag, version, table file path relations [INFO] [stdout] 9 | | between all the products reups is aware of. [INFO] [stdout] 10 | | */ [INFO] [stdout] | |__^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_doc_comments [INFO] [stdout] = note: `#[warn(clippy::suspicious_doc_comments)]` on by default [INFO] [stdout] help: use an inner doc comment to document the parent module or crate [INFO] [stdout] | [INFO] [stdout] 6 + /*! [INFO] [stdout] 7 + The db module is the heart of the reups program. The custom in memory [INFO] [stdout] 8 + database it provides encodes the tag, version, table file path relations [INFO] [stdout] 9 + between all the products reups is aware of. [INFO] [stdout] 10 + */ [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/db/dbfile.rs:69:9 [INFO] [stdout] | [INFO] [stdout] 69 | / match self.contents.borrow().get(key) { [INFO] [stdout] 70 | | Some(value) => Some(value.clone()), [INFO] [stdout] 71 | | None => None, [INFO] [stdout] 72 | | } [INFO] [stdout] | |_________^ help: try: `self.contents.borrow().get(key).map(|value| value.clone())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this is an outer doc comment and does not apply to the parent module or crate [INFO] [stdout] --> src/db/graph.rs:16:1 [INFO] [stdout] | [INFO] [stdout] 16 | / /**! [INFO] [stdout] 17 | | The module graph contains all the machinery for turning products described [INFO] [stdout] 18 | | by table files into a relational graph of those products. [INFO] [stdout] 19 | | */ [INFO] [stdout] | |___^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_doc_comments [INFO] [stdout] help: use an inner doc comment to document the parent module or crate [INFO] [stdout] | [INFO] [stdout] 16 + /*! [INFO] [stdout] 17 + The module graph contains all the machinery for turning products described [INFO] [stdout] 18 + by table files into a relational graph of those products. [INFO] [stdout] 19 + */ [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/db/graph.rs:66:9 [INFO] [stdout] | [INFO] [stdout] 66 | return self._index_map[&number].clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 66 - return self._index_map[&number].clone(); [INFO] [stdout] 66 + self._index_map[&number].clone() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/db/graph.rs:110:9 [INFO] [stdout] | [INFO] [stdout] 110 | / match weight { [INFO] [stdout] 111 | | Some(NodeType::Optional) => true, [INFO] [stdout] 112 | | _ => false, [INFO] [stdout] 113 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 110 - match weight { [INFO] [stdout] 111 - Some(NodeType::Optional) => true, [INFO] [stdout] 112 - _ => false, [INFO] [stdout] 113 - } [INFO] [stdout] 110 + matches!(weight, Some(NodeType::Optional)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_none()` [INFO] [stdout] --> src/db/graph.rs:194:16 [INFO] [stdout] | [INFO] [stdout] 194 | if let None = dependencies { [INFO] [stdout] | -------^^^^--------------- help: try: `if dependencies.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_err()` [INFO] [stdout] --> src/db/graph.rs:206:24 [INFO] [stdout] | [INFO] [stdout] 206 | if let Err(_) = self.connect_products(top, &k, v.clone()) { [INFO] [stdout] | -------^^^^^^-------------------------------------------- help: try: `if self.connect_products(top, &k, v.clone()).is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/db/graph.rs:206:60 [INFO] [stdout] | [INFO] [stdout] 206 | if let Err(_) = self.connect_products(top, &k, v.clone()) { [INFO] [stdout] | ^^ help: change this to: `k` [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: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/db/graph.rs:235:10 [INFO] [stdout] | [INFO] [stdout] 235 | ) -> petgraph::visit::WalkerIter< [INFO] [stdout] | __________^ [INFO] [stdout] 236 | | petgraph::visit::Topo< [INFO] [stdout] 237 | | as petgraph::visit::GraphBase>::NodeId, [INFO] [stdout] 238 | | as petgraph::visit::Visitable>::Map, [INFO] [stdout] 239 | | >, [INFO] [stdout] 240 | | &petgraph::Graph, [INFO] [stdout] 241 | | > { [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: unneeded `return` statement [INFO] [stdout] --> src/db/graph.rs:243:9 [INFO] [stdout] | [INFO] [stdout] 243 | return topo.iter(&self._graph); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 243 - return topo.iter(&self._graph); [INFO] [stdout] 243 + topo.iter(&self._graph) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> src/db/table.rs:85:61 [INFO] [stdout] | [INFO] [stdout] 85 | let exact = Table::extract_setup(contents.as_str(), &*EXACT); [INFO] [stdout] | ^^^^^^^ help: try: `&EXACT` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] = note: `#[warn(clippy::explicit_auto_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> src/db/table.rs:87:63 [INFO] [stdout] | [INFO] [stdout] 87 | let inexact = Table::extract_setup(contents.as_str(), &*INEXACT); [INFO] [stdout] | ^^^^^^^^^ help: try: `&INEXACT` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/db/mod.rs:98:9 [INFO] [stdout] | [INFO] [stdout] 98 | write!(f, "Database at {:?}\n", self.system_db.directory)?; [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] 98 - write!(f, "Database at {:?}\n", self.system_db.directory)?; [INFO] [stdout] 98 + writeln!(f, "Database at {:?}", self.system_db.directory)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/db/mod.rs:100:13 [INFO] [stdout] | [INFO] [stdout] 100 | write!(f, "User database at {:?}\n", user_db.directory)?; [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] 100 - write!(f, "User database at {:?}\n", user_db.directory)?; [INFO] [stdout] 100 + writeln!(f, "User database at {:?}", user_db.directory)?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `write!()` with a format string that ends in a single newline [INFO] [stdout] --> src/db/mod.rs:102:9 [INFO] [stdout] | [INFO] [stdout] 102 | write!(f, "Stack at {:?}\n", self.stack_root) [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] 102 - write!(f, "Stack at {:?}\n", self.stack_root) [INFO] [stdout] 102 + writeln!(f, "Stack at {:?}", self.stack_root) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::path::PathBuf` [INFO] [stdout] --> src/db/mod.rs:157:21 [INFO] [stdout] | [INFO] [stdout] 157 | None => path::PathBuf::from(eups_path) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `path::PathBuf::from()`: `eups_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/db/mod.rs:183:28 [INFO] [stdout] | [INFO] [stdout] 183 | acc.extend(db.product_to_tags.keys().map(|x| x.clone())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `cloned` method: `db.product_to_tags.keys().cloned()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/db/mod.rs:203:21 [INFO] [stdout] | [INFO] [stdout] 203 | / db.product_to_version_info[product] [INFO] [stdout] 204 | | .keys() [INFO] [stdout] 205 | | .map(|x| x.clone()), [INFO] [stdout] | |___________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 203 ~ db.product_to_version_info[product] [INFO] [stdout] 204 ~ .keys().cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stdout] --> src/db/mod.rs:307:25 [INFO] [stdout] | [INFO] [stdout] 307 | let ref tag_map = db.tag_to_product_info[t.clone()]; [INFO] [stdout] | ----^^^^^^^^^^^------------------------------------- help: try: `let tag_map = &db.tag_to_product_info[t.clone()];` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stdout] = note: `#[warn(clippy::toplevel_ref_arg)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/db/mod.rs:363:9 [INFO] [stdout] | [INFO] [stdout] 363 | return false; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 363 - return false; [INFO] [stdout] 363 + false [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/db/mod.rs:357:65 [INFO] [stdout] | [INFO] [stdout] 357 | if db.product_to_version_info.contains_key(product) { [INFO] [stdout] | _________________________________________________________________^ [INFO] [stdout] 358 | | return true; [INFO] [stdout] 359 | | } else if db.product_to_tags.contains_key(product) { [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/db/mod.rs:359:64 [INFO] [stdout] | [INFO] [stdout] 359 | } else if db.product_to_tags.contains_key(product) { [INFO] [stdout] | ________________________________________________________________^ [INFO] [stdout] 360 | | return true; [INFO] [stdout] 361 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/db/mod.rs:375:6 [INFO] [stdout] | [INFO] [stdout] 375 | ) -> ( [INFO] [stdout] | ______^ [INFO] [stdout] 376 | | path::PathBuf, [INFO] [stdout] 377 | | FnvHashMap>, [INFO] [stdout] 378 | | FnvHashMap>, [INFO] [stdout] 379 | | FnvHashMap>, [INFO] [stdout] 380 | | ) { [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: use of `or_insert` to construct default value [INFO] [stdout] --> src/db/mod.rs:449:64 [INFO] [stdout] | [INFO] [stdout] 449 | let version_hash = product_hash.entry(product).or_insert(FnvHashMap::default()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/db/mod.rs:487:71 [INFO] [stdout] | [INFO] [stdout] 487 | let tags_vec = product_to_tags.entry(product.clone()).or_insert(Vec::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/db/mod.rs:501:57 [INFO] [stdout] | [INFO] [stdout] 501 | let product_hash = tags_hash.entry(tag).or_insert(FnvHashMap::default()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this is an outer doc comment and does not apply to the parent module or crate [INFO] [stdout] --> src/env.rs:6:1 [INFO] [stdout] | [INFO] [stdout] 6 | / /**! [INFO] [stdout] 7 | | * This module manages saving and restoring a users environment as it is setup. The idea behind [INFO] [stdout] 8 | | * this module is that a user may issue several different calls to rsetup (reups setup) to [INFO] [stdout] 9 | | * configure the exact packages active. The user can then save this setup to restore into a [INFO] [stdout] ... | [INFO] [stdout] 16 | | * [INFO] [stdout] 17 | | **/ [INFO] [stdout] | |____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_doc_comments [INFO] [stdout] help: use an inner doc comment to document the parent module or crate [INFO] [stdout] | [INFO] [stdout] 6 + /*! [INFO] [stdout] 7 + * This module manages saving and restoring a users environment as it is setup. The idea behind [INFO] [stdout] 8 + * this module is that a user may issue several different calls to rsetup (reups setup) to [INFO] [stdout] 9 + * configure the exact packages active. The user can then save this setup to restore into a [INFO] [stdout] 10 + * different shell. This is not meant as a complete replacement for tagging product directories, [INFO] [stdout] 11 + * but as a sort of save your work buffer for setups that are not intended to live for a long [INFO] [stdout] 12 + * time. As a caveat this also replays the commands issued exactly, so if anything changed (such as [INFO] [stdout] 13 + * the current tag changing) commands will not necessarily recreate the exact environment at the [INFO] [stdout] 14 + * time of saving, but will reconstruct an environment as if the current (r)eups environment was [INFO] [stdout] 15 + * the environment when the commands were first issued. [INFO] [stdout] 16 + * [INFO] [stdout] 17 + **/ [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item overindented [INFO] [stdout] --> src/env.rs:50:4 [INFO] [stdout] | [INFO] [stdout] 50 | * global arguments [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try using ` ` (2 spaces) [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_overindented_list_items [INFO] [stdout] = note: `#[warn(clippy::doc_overindented_list_items)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `saved_envs` after checking its variant with `is_ok` [INFO] [stdout] --> src/env.rs:102:17 [INFO] [stdout] | [INFO] [stdout] 100 | if saved_envs.is_ok() { [INFO] [stdout] | --------------------- help: try: `if let Ok() = saved_envs` [INFO] [stdout] 101 | crate::debug!("saved_envs loaded existing env"); [INFO] [stdout] 102 | saved_envs.unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/env.rs:83:53 [INFO] [stdout] | [INFO] [stdout] 83 | Ok(existing) => existing.split("|").map(|x| String::from(x)).collect(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::from` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/env.rs:205:12 [INFO] [stdout] | [INFO] [stdout] 205 | if !save_result.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `save_result.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: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/list.rs:109:13 [INFO] [stdout] | [INFO] [stdout] 109 | self.local_setups.keys().map(|k| k.clone()).collect() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `cloned` method: `self.local_setups.keys().cloned()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `self.tags` after checking its variant with `is_some` [INFO] [stdout] --> src/list.rs:154:13 [INFO] [stdout] | [INFO] [stdout] 153 | let tags = if self.tags.is_some() { [INFO] [stdout] | ---------------------- help: try: `if let Some() = &self.tags` [INFO] [stdout] 154 | self.tags.as_ref().unwrap().clone() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/list.rs:228:37 [INFO] [stdout] | [INFO] [stdout] 228 | ... &x [INFO] [stdout] | ^^ help: change this to: `x` [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: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/list.rs:249:17 [INFO] [stdout] | [INFO] [stdout] 249 | self.output_string.push_str("["); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `self.output_string.push('[')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/list.rs:265:17 [INFO] [stdout] | [INFO] [stdout] 265 | self.output_string.push_str("]"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `self.output_string.push(']')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> src/setup.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | /// equal to the value of the variable. [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: if this is supposed to be its own paragraph, add a blank line [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation [INFO] [stdout] = note: `#[warn(clippy::doc_lazy_continuation)]` on by default [INFO] [stdout] help: indent this line [INFO] [stdout] | [INFO] [stdout] 36 | /// equal to the value of the variable. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/setup.rs:43:13 [INFO] [stdout] | [INFO] [stdout] 43 | flavor: &String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 43 ~ flavor: &str, [INFO] [stdout] 44 | db_path: PathBuf, [INFO] [stdout] ... [INFO] [stdout] 71 | } else { [INFO] [stdout] 72 ~ setup_string_vec.push(flavor.to_owned()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/setup.rs:101:21 [INFO] [stdout] | [INFO] [stdout] 101 | None => match env::var(k) { [INFO] [stdout] | _____________________^ [INFO] [stdout] 102 | | Ok(r) => r, [INFO] [stdout] 103 | | Err(_) => String::from(""), [INFO] [stdout] 104 | | }, [INFO] [stdout] | |_____________^ help: ascribe the type std::string::String and replace your expression with: `env::var(k).unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/setup.rs:190:12 [INFO] [stdout] | [INFO] [stdout] 190 | if !search_path.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `search_path.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `search_path` after checking its variant with `is_none` [INFO] [stdout] --> src/setup.rs:191:40 [INFO] [stdout] | [INFO] [stdout] 190 | if !search_path.is_none() { [INFO] [stdout] | --------------------- the check is happening here [INFO] [stdout] 191 | for entry in fs::read_dir(&search_path.unwrap()).unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/setup.rs:211:9 [INFO] [stdout] | [INFO] [stdout] 211 | return None; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 211 - return None; [INFO] [stdout] 211 + None [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/setup.rs:191:39 [INFO] [stdout] | [INFO] [stdout] 191 | for entry in fs::read_dir(&search_path.unwrap()).unwrap() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `search_path.unwrap()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/setup.rs:224:15 [INFO] [stdout] | [INFO] [stdout] 224 | let err = std::io::Error::new(std::io::ErrorKind::Other, "Problem normalizing Path"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 224 - let err = std::io::Error::new(std::io::ErrorKind::Other, "Problem normalizing Path"); [INFO] [stdout] 224 + let err = std::io::Error::other("Problem normalizing Path"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `table` after checking its variant with `is_some` [INFO] [stdout] --> src/setup.rs:332:30 [INFO] [stdout] | [INFO] [stdout] 330 | if table.is_some() { [INFO] [stdout] | ------------------ help: try: `if let Some() = &table` [INFO] [stdout] 331 | let mut tmp = String::from("LOCAL:"); [INFO] [stdout] 332 | tmp.push_str(table.as_ref().unwrap().path.to_str().unwrap()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/setup.rs:317:13 [INFO] [stdout] | [INFO] [stdout] 317 | / match versions.last() { [INFO] [stdout] 318 | | Some(v) => { [INFO] [stdout] 319 | | version = v.clone(); [INFO] [stdout] ... | [INFO] [stdout] 322 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 317 ~ if let Some(v) = versions.last() { [INFO] [stdout] 318 + version = v.clone(); [INFO] [stdout] 319 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/setup.rs:401:21 [INFO] [stdout] | [INFO] [stdout] 401 | / match versions.last() { [INFO] [stdout] 402 | | Some(v) => { [INFO] [stdout] 403 | | largest_version = v.clone(); [INFO] [stdout] ... | [INFO] [stdout] 406 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 401 ~ if let Some(v) = versions.last() { [INFO] [stdout] 402 + largest_version = v.clone(); [INFO] [stdout] 403 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/setup.rs:466:13 [INFO] [stdout] | [INFO] [stdout] 466 | return_string.push_str(" "); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `return_string.push(' ')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/db/graph.rs:200:37 [INFO] [stdout] | [INFO] [stdout] 200 | for (dep_vec, node_type) in vec![&dep_unwrap.required, &dep_unwrap.optional] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `[&dep_unwrap.required, &dep_unwrap.optional]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/setup.rs:241:20 [INFO] [stdout] | [INFO] [stdout] 241 | let switches = vec!["-r"]; [INFO] [stdout] | ^^^^^^^^^^ help: you can use an array directly: `["-r"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `.clone()` on a double reference, which returns `&std::string::String` instead of cloning the inner type [INFO] [stdout] --> src/db/mod.rs:306:57 [INFO] [stdout] | [INFO] [stdout] 306 | if db.tag_to_product_info.contains_key(t.clone()) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(suspicious_double_ref_op)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `.clone()` on a double reference, which returns `&std::string::String` instead of cloning the inner type [INFO] [stdout] --> src/db/mod.rs:307:63 [INFO] [stdout] | [INFO] [stdout] 307 | let ref tag_map = db.tag_to_product_info[t.clone()]; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/db/graph.rs:52:31 [INFO] [stdout] | [INFO] [stdout] 52 | pub fn new(db: &'a DB) -> Graph { [INFO] [stdout] | -- ^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is named 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: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 52 | pub fn new(db: &'a DB) -> Graph<'a> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `.clone()` on a double reference, which returns `&std::string::String` instead of cloning the inner type [INFO] [stdout] --> src/setup.rs:394:73 [INFO] [stdout] | [INFO] [stdout] 394 | let mut largest_version = versions.iter().max().unwrap().clone().clone(); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 9.85s [INFO] running `Command { std: "docker" "inspect" "b6e226468e95965f7ba1c99afdb8807b2055fbb14909c58d992c707be20b9f83", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b6e226468e95965f7ba1c99afdb8807b2055fbb14909c58d992c707be20b9f83", kill_on_drop: false }` [INFO] [stdout] b6e226468e95965f7ba1c99afdb8807b2055fbb14909c58d992c707be20b9f83