[INFO] cloning repository https://github.com/cmouse/pwkeep-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/cmouse/pwkeep-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcmouse%2Fpwkeep-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcmouse%2Fpwkeep-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 3f23cd9b1b0fe68c71b9a5d688d22aaeb53b6d49 [INFO] linting cmouse/pwkeep-rs against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcmouse%2Fpwkeep-rs" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/cmouse/pwkeep-rs [INFO] finished tweaking git repo https://github.com/cmouse/pwkeep-rs [INFO] tweaked toml for git repo https://github.com/cmouse/pwkeep-rs written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/cmouse/pwkeep-rs on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/cmouse/pwkeep-rs already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded spawn-editor v0.0.6 [INFO] [stderr] Downloaded pkcs5 v0.7.1 [INFO] [stderr] Downloaded scrypt v0.11.0 [INFO] [stderr] Downloaded random-number v0.1.9 [INFO] [stderr] Downloaded sha2-asm v0.6.4 [INFO] [stderr] Downloaded random-pick v1.2.16 [INFO] [stderr] Downloaded half v1.8.3 [INFO] [stderr] Downloaded random-number-macro-impl v0.1.8 [INFO] [stderr] Downloaded serde_cbor v0.11.2 [INFO] [stderr] Downloaded crypto v0.5.1 [INFO] [stderr] Downloaded cc v1.1.4 [INFO] [stderr] Downloaded passwords v3.1.16 [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] a13220b35dc261a436457fbdf0f3c6220a69a0df8cdf47801f74384ec3b74098 [INFO] running `Command { std: "docker" "start" "-a" "a13220b35dc261a436457fbdf0f3c6220a69a0df8cdf47801f74384ec3b74098", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "a13220b35dc261a436457fbdf0f3c6220a69a0df8cdf47801f74384ec3b74098", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a13220b35dc261a436457fbdf0f3c6220a69a0df8cdf47801f74384ec3b74098", kill_on_drop: false }` [INFO] [stdout] a13220b35dc261a436457fbdf0f3c6220a69a0df8cdf47801f74384ec3b74098 [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] 523c82a97e46f91ab05610d92a24b1553690ae30cb3ae191d1d340ede0c7655c [INFO] running `Command { std: "docker" "start" "-a" "523c82a97e46f91ab05610d92a24b1553690ae30cb3ae191d1d340ede0c7655c", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.170 [INFO] [stderr] Compiling proc-macro2 v1.0.93 [INFO] [stderr] Compiling zerocopy v0.8.25 [INFO] [stderr] Compiling cc v1.1.4 [INFO] [stderr] Compiling proc-macro-hack v0.5.20+deprecated [INFO] [stderr] Checking base64ct v1.6.0 [INFO] [stderr] Checking const-oid v0.9.6 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling rustix v1.0.5 [INFO] [stderr] Checking bitflags v2.8.0 [INFO] [stderr] Checking opaque-debug v0.3.1 [INFO] [stderr] Checking block-padding v0.3.3 [INFO] [stderr] Compiling curve25519-dalek v4.1.3 [INFO] [stderr] Checking linux-raw-sys v0.9.4 [INFO] [stderr] Checking clap_builder v4.5.30 [INFO] [stderr] Checking half v1.8.3 [INFO] [stderr] Checking pem-rfc7468 v0.7.0 [INFO] [stderr] Checking once_cell v1.20.3 [INFO] [stderr] Checking spawn-editor v0.0.6 [INFO] [stderr] Checking inout v0.1.4 [INFO] [stderr] Checking getrandom v0.2.15 [INFO] [stderr] Checking getrandom v0.3.2 [INFO] [stderr] Checking dirs-sys v0.5.0 [INFO] [stderr] Checking rtoolbox v0.0.3 [INFO] [stderr] Checking dirs v6.0.0 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking rpassword v7.4.0 [INFO] [stderr] Compiling quote v1.0.36 [INFO] [stderr] Checking rand_core v0.9.3 [INFO] [stderr] Checking crypto-common v0.1.6 [INFO] [stderr] Compiling sha2-asm v0.6.4 [INFO] [stderr] Compiling syn v2.0.98 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Checking universal-hash v0.5.1 [INFO] [stderr] Checking aead v0.5.2 [INFO] [stderr] Checking poly1305 v0.8.0 [INFO] [stderr] Checking hmac v0.12.1 [INFO] [stderr] Checking pbkdf2 v0.12.2 [INFO] [stderr] Checking hkdf v0.12.4 [INFO] [stderr] Checking sha2 v0.10.8 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Checking rand v0.9.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking tempfile v3.19.1 [INFO] [stderr] Compiling zeroize_derive v1.4.2 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling random-number-macro-impl v0.1.8 [INFO] [stderr] Compiling curve25519-dalek-derive v0.1.1 [INFO] [stderr] Compiling clap_derive v4.5.28 [INFO] [stderr] Checking random-number v0.1.9 [INFO] [stderr] Checking random-pick v1.2.16 [INFO] [stderr] Checking passwords v3.1.16 [INFO] [stderr] Checking zeroize v1.8.1 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking der v0.7.9 [INFO] [stderr] Checking salsa20 v0.10.2 [INFO] [stderr] Checking cbc v0.1.2 [INFO] [stderr] Checking aes v0.8.4 [INFO] [stderr] Checking chacha20 v0.9.1 [INFO] [stderr] Checking crypto v0.5.1 [INFO] [stderr] Checking scrypt v0.11.0 [INFO] [stderr] Checking chacha20poly1305 v0.10.1 [INFO] [stderr] Checking clap v4.5.30 [INFO] [stderr] Checking spki v0.7.3 [INFO] [stderr] Checking pkcs5 v0.7.1 [INFO] [stderr] Checking pkcs8 v0.10.2 [INFO] [stderr] Checking serde v1.0.219 [INFO] [stderr] Checking chrono v0.4.41 [INFO] [stderr] Checking serde_cbor v0.11.2 [INFO] [stderr] Checking x25519-dalek v2.0.1 [INFO] [stderr] Checking pwkeep v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/pwkeep/storage.rs:164:13 [INFO] [stdout] | [INFO] [stdout] 164 | content: content, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `content` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/main.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | use rpassword; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/pwkeep/storage.rs:164:13 [INFO] [stdout] | [INFO] [stdout] 164 | content: content, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace it with: `content` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this import is redundant [INFO] [stdout] --> src/main.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | use rpassword; [INFO] [stdout] | ^^^^^^^^^^^^^^ help: remove it entirely [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_component_path_imports [INFO] [stdout] = note: `#[warn(clippy::single_component_path_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/pwkeep/storage.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | !self.keypair.is_none() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.keypair.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/pwkeep/storage.rs:96:9 [INFO] [stdout] | [INFO] [stdout] 96 | return hash_bytes; [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] 96 - return hash_bytes; [INFO] [stdout] 96 + hash_bytes [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::vec::Vec` [INFO] [stdout] --> src/pwkeep/storage.rs:94:26 [INFO] [stdout] | [INFO] [stdout] 94 | hash_bytes = Vec::from(hashed); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: consider removing `Vec::from()`: `hashed` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::vec::Vec` [INFO] [stdout] --> src/pwkeep/storage.rs:136:35 [INFO] [stdout] | [INFO] [stdout] 136 | encrypted_entry.content = Vec::from(ciphertext); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider removing `Vec::from()`: `ciphertext` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/pwkeep/storage.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | !self.keypair.is_none() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.keypair.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/pwkeep/storage.rs:96:9 [INFO] [stdout] | [INFO] [stdout] 96 | return hash_bytes; [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] 96 - return hash_bytes; [INFO] [stdout] 96 + hash_bytes [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: equality checks against false can be replaced by a negation [INFO] [stdout] --> src/pwkeep/storage.rs:204:12 [INFO] [stdout] | [INFO] [stdout] 204 | if path.as_path().exists() == false { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!path.as_path().exists()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/pwkeep/storage.rs:228:12 [INFO] [stdout] | [INFO] [stdout] 228 | Ok(EncryptedPrivateKeyInfo::try_from(pem.contents()).or_else(|e| Err(KeyLoadError::from(e))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `EncryptedPrivateKeyInfo::try_from(pem.contents()).map_err(|e| KeyLoadError::from(e))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.and_then(|x| Ok(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/pwkeep/storage.rs:230:17 [INFO] [stdout] | [INFO] [stdout] 230 | / key.decrypt(password).or_else(|e| Err(KeyLoadError::from(e))) [INFO] [stdout] 231 | | .and_then(|secret_doc| { [INFO] [stdout] 232 | | self.keypair = Some(secret_doc.as_bytes().to_vec()); [INFO] [stdout] 233 | | Ok(()) [INFO] [stdout] 234 | | }) [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: use `map` instead [INFO] [stdout] | [INFO] [stdout] 231 ~ .map(|secret_doc| { [INFO] [stdout] 232 | self.keypair = Some(secret_doc.as_bytes().to_vec()); [INFO] [stdout] 233 ~ () [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/pwkeep/storage.rs:230:17 [INFO] [stdout] | [INFO] [stdout] 230 | key.decrypt(password).or_else(|e| Err(KeyLoadError::from(e))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `key.decrypt(password).map_err(|e| KeyLoadError::from(e))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | return root.as_path().display().to_string(); [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] 19 - return root.as_path().display().to_string(); [INFO] [stdout] 19 + root.as_path().display().to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::vec::Vec` [INFO] [stdout] --> src/pwkeep/storage.rs:94:26 [INFO] [stdout] | [INFO] [stdout] 94 | hash_bytes = Vec::from(hashed); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: consider removing `Vec::from()`: `hashed` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::vec::Vec` [INFO] [stdout] --> src/pwkeep/storage.rs:136:35 [INFO] [stdout] | [INFO] [stdout] 136 | encrypted_entry.content = Vec::from(ciphertext); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider removing `Vec::from()`: `ciphertext` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: equality checks against false can be replaced by a negation [INFO] [stdout] --> src/pwkeep/storage.rs:204:12 [INFO] [stdout] | [INFO] [stdout] 204 | if path.as_path().exists() == false { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!path.as_path().exists()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/pwkeep/storage.rs:228:12 [INFO] [stdout] | [INFO] [stdout] 228 | Ok(EncryptedPrivateKeyInfo::try_from(pem.contents()).or_else(|e| Err(KeyLoadError::from(e))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `EncryptedPrivateKeyInfo::try_from(pem.contents()).map_err(|e| KeyLoadError::from(e))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.and_then(|x| Ok(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/pwkeep/storage.rs:230:17 [INFO] [stdout] | [INFO] [stdout] 230 | / key.decrypt(password).or_else(|e| Err(KeyLoadError::from(e))) [INFO] [stdout] 231 | | .and_then(|secret_doc| { [INFO] [stdout] 232 | | self.keypair = Some(secret_doc.as_bytes().to_vec()); [INFO] [stdout] 233 | | Ok(()) [INFO] [stdout] 234 | | }) [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: use `map` instead [INFO] [stdout] | [INFO] [stdout] 231 ~ .map(|secret_doc| { [INFO] [stdout] 232 | self.keypair = Some(secret_doc.as_bytes().to_vec()); [INFO] [stdout] 233 ~ () [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/pwkeep/storage.rs:230:17 [INFO] [stdout] | [INFO] [stdout] 230 | key.decrypt(password).or_else(|e| Err(KeyLoadError::from(e))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `key.decrypt(password).map_err(|e| KeyLoadError::from(e))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | return root.as_path().display().to_string(); [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] 19 - return root.as_path().display().to_string(); [INFO] [stdout] 19 + root.as_path().display().to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:88:24 [INFO] [stdout] | [INFO] [stdout] 88 | store_results(&storage, entry.name.as_str(), new_contents); [INFO] [stdout] | ^^^^^^^^ help: change this to: `storage` [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: called `expect` on `env_password` after checking its variant with `is_ok` [INFO] [stdout] --> src/main.rs:110:28 [INFO] [stdout] | [INFO] [stdout] 109 | if env_password.is_ok() { [INFO] [stdout] | ----------------------- help: try: `if let Ok() = env_password` [INFO] [stdout] 110 | match storage.load(env_password.expect("Env password")) { [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: equality checks against false can be replaced by a negation [INFO] [stdout] --> src/main.rs:124:8 [INFO] [stdout] | [INFO] [stdout] 124 | if storage.loaded() == false { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!storage.loaded()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/main.rs:132:17 [INFO] [stdout] | [INFO] [stdout] 132 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/main.rs:142:9 [INFO] [stdout] | [INFO] [stdout] 142 | let entry: Entry; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `entry` here and remove the assignments from the `match` arms [INFO] [stdout] | [INFO] [stdout] 142 ~ [INFO] [stdout] 143 ~ let entry: Entry = match storage.get_entry(name.as_str()) { [INFO] [stdout] 144 | Ok(e) => { [INFO] [stdout] 145 ~ e [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/main.rs:173:9 [INFO] [stdout] | [INFO] [stdout] 173 | / match storage.get_entry(name.as_str()) { [INFO] [stdout] 174 | | Ok(_) => { [INFO] [stdout] 175 | | eprintln!("{name} already exists!"); [INFO] [stdout] 176 | | std::process::exit(1); [INFO] [stdout] 177 | | } [INFO] [stdout] 178 | | Err(_) => {} [INFO] [stdout] 179 | | }; [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] 173 ~ if let Ok(_) = storage.get_entry(name.as_str()) { [INFO] [stdout] 174 + eprintln!("{name} already exists!"); [INFO] [stdout] 175 + std::process::exit(1); [INFO] [stdout] 176 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/main.rs:208:16 [INFO] [stdout] | [INFO] [stdout] 208 | (entry.find(args.search.clone().expect("Search value").as_str()) != None) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `entry.find(args.search.clone().expect("Search value").as_str()).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:88:24 [INFO] [stdout] | [INFO] [stdout] 88 | store_results(&storage, entry.name.as_str(), new_contents); [INFO] [stdout] | ^^^^^^^^ help: change this to: `storage` [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: called `expect` on `env_password` after checking its variant with `is_ok` [INFO] [stdout] --> src/main.rs:110:28 [INFO] [stdout] | [INFO] [stdout] 109 | if env_password.is_ok() { [INFO] [stdout] | ----------------------- help: try: `if let Ok() = env_password` [INFO] [stdout] 110 | match storage.load(env_password.expect("Env password")) { [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: equality checks against false can be replaced by a negation [INFO] [stdout] --> src/main.rs:124:8 [INFO] [stdout] | [INFO] [stdout] 124 | if storage.loaded() == false { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!storage.loaded()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty string literal in `println!` [INFO] [stdout] --> src/main.rs:132:17 [INFO] [stdout] | [INFO] [stdout] 132 | println!(""); [INFO] [stdout] | ^^^^^^^^^--^ [INFO] [stdout] | | [INFO] [stdout] | help: remove the empty string [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#println_empty_string [INFO] [stdout] = note: `#[warn(clippy::println_empty_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded late initialization [INFO] [stdout] --> src/main.rs:142:9 [INFO] [stdout] | [INFO] [stdout] 142 | let entry: Entry; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_late_init [INFO] [stdout] = note: `#[warn(clippy::needless_late_init)]` on by default [INFO] [stdout] help: move the declaration `entry` here and remove the assignments from the `match` arms [INFO] [stdout] | [INFO] [stdout] 142 ~ [INFO] [stdout] 143 ~ let entry: Entry = match storage.get_entry(name.as_str()) { [INFO] [stdout] 144 | Ok(e) => { [INFO] [stdout] 145 ~ e [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/main.rs:173:9 [INFO] [stdout] | [INFO] [stdout] 173 | / match storage.get_entry(name.as_str()) { [INFO] [stdout] 174 | | Ok(_) => { [INFO] [stdout] 175 | | eprintln!("{name} already exists!"); [INFO] [stdout] 176 | | std::process::exit(1); [INFO] [stdout] 177 | | } [INFO] [stdout] 178 | | Err(_) => {} [INFO] [stdout] 179 | | }; [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] 173 ~ if let Ok(_) = storage.get_entry(name.as_str()) { [INFO] [stdout] 174 + eprintln!("{name} already exists!"); [INFO] [stdout] 175 + std::process::exit(1); [INFO] [stdout] 176 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/main.rs:208:16 [INFO] [stdout] | [INFO] [stdout] 208 | (entry.find(args.search.clone().expect("Search value").as_str()) != None) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `entry.find(args.search.clone().expect("Search value").as_str()).is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 17.09s [INFO] running `Command { std: "docker" "inspect" "523c82a97e46f91ab05610d92a24b1553690ae30cb3ae191d1d340ede0c7655c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "523c82a97e46f91ab05610d92a24b1553690ae30cb3ae191d1d340ede0c7655c", kill_on_drop: false }` [INFO] [stdout] 523c82a97e46f91ab05610d92a24b1553690ae30cb3ae191d1d340ede0c7655c