[INFO] cloning repository https://github.com/brqnko/rusty_hack_browser_data [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/brqnko/rusty_hack_browser_data" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbrqnko%2Frusty_hack_browser_data", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbrqnko%2Frusty_hack_browser_data'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] ef830d0bb2ce50c6d582daf98348cefad4dbc528 [INFO] linting brqnko/rusty_hack_browser_data against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fbrqnko%2Frusty_hack_browser_data" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/brqnko/rusty_hack_browser_data [INFO] finished tweaking git repo https://github.com/brqnko/rusty_hack_browser_data [INFO] tweaked toml for git repo https://github.com/brqnko/rusty_hack_browser_data written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/brqnko/rusty_hack_browser_data 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/brqnko/rusty_hack_browser_data 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 camino v1.2.0 [INFO] [stderr] Downloaded assert_fs v1.1.3 [INFO] [stderr] Downloaded zvariant_derive v5.7.0 [INFO] [stderr] Downloaded zbus_macros v5.11.0 [INFO] [stderr] Downloaded configparser v3.1.0 [INFO] [stderr] Downloaded secret-service v5.1.0 [INFO] [stderr] Downloaded rusty-leveldb v3.0.3 [INFO] [stderr] Downloaded zvariant v5.7.0 [INFO] [stderr] Downloaded zbus v5.11.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 3debc749193c274fd56cd725fa160fde27b334901daf40345d027f23763b2098 [INFO] running `Command { std: "docker" "start" "-a" "3debc749193c274fd56cd725fa160fde27b334901daf40345d027f23763b2098", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3debc749193c274fd56cd725fa160fde27b334901daf40345d027f23763b2098", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3debc749193c274fd56cd725fa160fde27b334901daf40345d027f23763b2098", kill_on_drop: false }` [INFO] [stdout] 3debc749193c274fd56cd725fa160fde27b334901daf40345d027f23763b2098 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 99781063433df6ed12c7ff6b1e988e44bd8119d6fbbecd44594ad2ecd2c56f23 [INFO] running `Command { std: "docker" "start" "-a" "99781063433df6ed12c7ff6b1e988e44bd8119d6fbbecd44594ad2ecd2c56f23", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.176 [INFO] [stderr] Compiling serde v1.0.227 [INFO] [stderr] Compiling serde_core v1.0.227 [INFO] [stderr] Compiling winnow v0.7.13 [INFO] [stderr] Compiling proc-macro2 v1.0.101 [INFO] [stderr] Compiling toml_datetime v0.7.2 [INFO] [stderr] Compiling indexmap v2.11.4 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Checking unicode-ident v1.0.19 [INFO] [stderr] Checking bitflags v2.9.4 [INFO] [stderr] Checking regex-syntax v0.8.6 [INFO] [stderr] Checking block-padding v0.3.3 [INFO] [stderr] Checking futures-channel v0.3.31 [INFO] [stderr] Checking ahash v0.8.12 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Checking inout v0.1.4 [INFO] [stderr] Compiling find-msvc-tools v0.1.2 [INFO] [stderr] Checking event-listener v5.4.1 [INFO] [stderr] Checking num-bigint v0.4.6 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking opaque-debug v0.3.1 [INFO] [stderr] Compiling snap v1.1.1 [INFO] [stderr] Checking crc32fast v1.5.0 [INFO] [stderr] Compiling cc v1.2.39 [INFO] [stderr] Checking quote v1.0.40 [INFO] [stderr] Checking num-iter v0.1.45 [INFO] [stderr] Checking futures-lite v2.6.1 [INFO] [stderr] Checking event-listener-strategy v0.5.4 [INFO] [stderr] Checking syn v2.0.106 [INFO] [stderr] Checking num-complex v0.4.6 [INFO] [stderr] Compiling erased-serde v0.4.8 [INFO] [stderr] Compiling camino v1.2.0 [INFO] [stderr] Checking async-broadcast v0.7.2 [INFO] [stderr] Compiling time-core v0.1.6 [INFO] [stderr] Checking clap_builder v4.5.48 [INFO] [stderr] Compiling time-macros v0.2.24 [INFO] [stderr] Checking deranged v0.5.4 [INFO] [stderr] Checking hashlink v0.9.1 [INFO] [stderr] Checking regex-automata v0.4.11 [INFO] [stderr] Checking flate2 v1.1.2 [INFO] [stderr] Checking csv-core v0.1.12 [INFO] [stderr] Checking bstr v1.12.0 [INFO] [stderr] Compiling rustix v1.1.2 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Checking num-rational v0.4.2 [INFO] [stderr] Checking rayon v1.11.0 [INFO] [stderr] Checking zip v0.6.6 [INFO] [stderr] Checking num v0.4.3 [INFO] [stderr] Compiling libsqlite3-sys v0.28.0 [INFO] [stderr] Checking yasna v0.5.2 [INFO] [stderr] Checking getrandom v0.2.16 [INFO] [stderr] Checking mio v1.0.4 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking parking_lot_core v0.9.11 [INFO] [stderr] Compiling toml_parser v1.0.3 [INFO] [stderr] Checking socket2 v0.6.0 [INFO] [stderr] Checking crypto-common v0.1.6 [INFO] [stderr] Checking signal-hook-registry v1.4.6 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking nix v0.30.1 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking universal-hash v0.5.1 [INFO] [stderr] Checking polyval v0.6.2 [INFO] [stderr] Checking ghash v0.5.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking aead v0.5.2 [INFO] [stderr] Checking tokio v1.47.1 [INFO] [stderr] Checking hmac v0.12.1 [INFO] [stderr] Checking aes v0.8.4 [INFO] [stderr] Checking hkdf v0.12.4 [INFO] [stderr] Checking ctr v0.9.2 [INFO] [stderr] Checking cbc v0.1.2 [INFO] [stderr] Checking sha2 v0.10.9 [INFO] [stderr] Compiling toml_edit v0.23.6 [INFO] [stderr] Checking parking_lot v0.12.4 [INFO] [stderr] Checking fs2 v0.4.3 [INFO] [stderr] Checking errno v0.2.8 [INFO] [stderr] Checking dirs-sys v0.4.1 [INFO] [stderr] Checking time v0.3.44 [INFO] [stderr] Checking rusty-leveldb v3.0.3 [INFO] [stderr] Checking directories v5.0.1 [INFO] [stderr] Checking pbkdf2 v0.12.2 [INFO] [stderr] Checking des v0.8.1 [INFO] [stderr] Checking aes-gcm v0.10.3 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking serde_json v1.0.145 [INFO] [stderr] Checking configparser v3.1.0 [INFO] [stderr] Checking predicates-core v1.0.9 [INFO] [stderr] Checking getrandom v0.3.3 [INFO] [stderr] Checking predicates v3.1.3 [INFO] [stderr] Checking regex v1.11.3 [INFO] [stderr] Checking globset v0.4.16 [INFO] [stderr] Checking predicates-tree v1.0.12 [INFO] [stderr] Checking dashmap v5.5.3 [INFO] [stderr] Checking diff v0.1.13 [INFO] [stderr] Checking yansi v1.0.1 [INFO] [stderr] Compiling proc-macro-crate v3.4.0 [INFO] [stderr] Checking env_filter v0.1.3 [INFO] [stderr] Checking ignore v0.4.23 [INFO] [stderr] Checking pretty_assertions v1.4.1 [INFO] [stderr] Checking env_logger v0.11.8 [INFO] [stderr] Checking globwalk v0.9.1 [INFO] [stderr] Checking tempfile v3.23.0 [INFO] [stderr] Checking assert_fs v1.1.3 [INFO] [stderr] Compiling serde_derive v1.0.227 [INFO] [stderr] Compiling enumflags2_derive v0.7.12 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling tracing-attributes v0.1.30 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling clap_derive v4.5.47 [INFO] [stderr] Compiling serial_test_derive v2.0.0 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Checking clap v4.5.48 [INFO] [stderr] Compiling zvariant_utils v3.2.1 [INFO] [stderr] Compiling enumflags2 v0.7.12 [INFO] [stderr] Checking csv v1.3.1 [INFO] [stderr] Compiling zvariant_derive v5.7.0 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking serial_test v2.0.0 [INFO] [stderr] Compiling zvariant v5.7.0 [INFO] [stderr] Checking rusqlite v0.31.0 [INFO] [stderr] Checking zbus_names v4.2.0 [INFO] [stderr] Compiling zbus_macros v5.11.0 [INFO] [stderr] Checking zbus v5.11.0 [INFO] [stderr] Checking secret-service v5.1.0 [INFO] [stderr] Checking rusty_hack_browser_data v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `OpenOptions` [INFO] [stdout] --> src/util/fs.rs:2:27 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fs::{self, File, OpenOptions}; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `OpenOptions` [INFO] [stdout] --> src/util/fs.rs:2:27 [INFO] [stdout] | [INFO] [stdout] 2 | use std::fs::{self, File, OpenOptions}; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `NssPbe` is never constructed [INFO] [stdout] --> src/crypto/firefox.rs:182:8 [INFO] [stdout] | [INFO] [stdout] 182 | struct NssPbe { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `parse`, `decrypt`, and `derive_key_and_iv` are never used [INFO] [stdout] --> src/crypto/firefox.rs:188:8 [INFO] [stdout] | [INFO] [stdout] 187 | impl NssPbe { [INFO] [stdout] | ----------- associated items in this implementation [INFO] [stdout] 188 | fn parse(data: &[u8]) -> Result { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 213 | fn decrypt(&self, global_salt: &[u8]) -> Result> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 218 | fn derive_key_and_iv(&self, global_salt: &[u8]) -> Result<(Vec, Vec)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `padding_zero` is never used [INFO] [stdout] --> src/crypto/firefox.rs:280:4 [INFO] [stdout] | [INFO] [stdout] 280 | fn padding_zero(bytes: &[u8], length: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `hmac_sha1` is never used [INFO] [stdout] --> src/crypto/firefox.rs:289:4 [INFO] [stdout] | [INFO] [stdout] 289 | fn hmac_sha1(key: &[u8], data: &[u8]) -> Result> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/browser/chromium/mod.rs:58:13 [INFO] [stdout] | [INFO] [stdout] 58 | return Ok(derive_chromium_master_key(&secret, b"saltysalt", 1, 16)); [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] 58 - return Ok(derive_chromium_master_key(&secret, b"saltysalt", 1, 16)); [INFO] [stdout] 58 + Ok(derive_chromium_master_key(&secret, b"saltysalt", 1, 16)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `NssPbe` is never constructed [INFO] [stdout] --> src/crypto/firefox.rs:182:8 [INFO] [stdout] | [INFO] [stdout] 182 | struct NssPbe { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `parse`, `decrypt`, and `derive_key_and_iv` are never used [INFO] [stdout] --> src/crypto/firefox.rs:188:8 [INFO] [stdout] | [INFO] [stdout] 187 | impl NssPbe { [INFO] [stdout] | ----------- associated items in this implementation [INFO] [stdout] 188 | fn parse(data: &[u8]) -> Result { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 213 | fn decrypt(&self, global_salt: &[u8]) -> Result> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 218 | fn derive_key_and_iv(&self, global_salt: &[u8]) -> Result<(Vec, Vec)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `padding_zero` is never used [INFO] [stdout] --> src/crypto/firefox.rs:280:4 [INFO] [stdout] | [INFO] [stdout] 280 | fn padding_zero(bytes: &[u8], length: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `hmac_sha1` is never used [INFO] [stdout] --> src/crypto/firefox.rs:289:4 [INFO] [stdout] | [INFO] [stdout] 289 | fn hmac_sha1(key: &[u8], data: &[u8]) -> Result> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser/chromium/mod.rs:229:17 [INFO] [stdout] | [INFO] [stdout] 229 | / if let Ok(item_label) = item.get_label() { [INFO] [stdout] 230 | | if item_label == label { [INFO] [stdout] 231 | | let secret = item.get_secret().map_err(|err| { [INFO] [stdout] 232 | | HackBrowserDataError::Message(format!("read keyring secret: {err}")) [INFO] [stdout] ... | [INFO] [stdout] 236 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 229 ~ if let Ok(item_label) = item.get_label() [INFO] [stdout] 230 ~ && item_label == label { [INFO] [stdout] 231 | let secret = item.get_secret().map_err(|err| { [INFO] [stdout] ... [INFO] [stdout] 234 | return Ok(secret); [INFO] [stdout] 235 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/browser/chromium/mod.rs:58:13 [INFO] [stdout] | [INFO] [stdout] 58 | return Ok(derive_chromium_master_key(&secret, b"saltysalt", 1, 16)); [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] 58 - return Ok(derive_chromium_master_key(&secret, b"saltysalt", 1, 16)); [INFO] [stdout] 58 + Ok(derive_chromium_master_key(&secret, b"saltysalt", 1, 16)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/browser/firefox/mod.rs:171:71 [INFO] [stdout] | [INFO] [stdout] 171 | } else if ch.is_ascii_whitespace() || matches!(ch, '-' | '_') { [INFO] [stdout] | _______________________________________________________________________^ [INFO] [stdout] 172 | | pending_dash = true; [INFO] [stdout] 173 | | } else { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/browser/firefox/mod.rs:173:16 [INFO] [stdout] | [INFO] [stdout] 173 | } else { [INFO] [stdout] | ________________^ [INFO] [stdout] 174 | | pending_dash = true; [INFO] [stdout] 175 | | } [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: this if-then-else expression assigns a bool literal [INFO] [stdout] --> src/browser/firefox/mod.rs:171:16 [INFO] [stdout] | [INFO] [stdout] 171 | } else if ch.is_ascii_whitespace() || matches!(ch, '-' | '_') { [INFO] [stdout] | ________________^ [INFO] [stdout] 172 | | pending_dash = true; [INFO] [stdout] 173 | | } else { [INFO] [stdout] 174 | | pending_dash = true; [INFO] [stdout] 175 | | } [INFO] [stdout] | |_________^ help: you can reduce it to: `{ ch.is_ascii_whitespace() || matches!(ch, '-' | '_'); pending_dash = true; }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool_assign [INFO] [stdout] = note: `#[warn(clippy::needless_bool_assign)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser/chromium/mod.rs:229:17 [INFO] [stdout] | [INFO] [stdout] 229 | / if let Ok(item_label) = item.get_label() { [INFO] [stdout] 230 | | if item_label == label { [INFO] [stdout] 231 | | let secret = item.get_secret().map_err(|err| { [INFO] [stdout] 232 | | HackBrowserDataError::Message(format!("read keyring secret: {err}")) [INFO] [stdout] ... | [INFO] [stdout] 236 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 229 ~ if let Ok(item_label) = item.get_label() [INFO] [stdout] 230 ~ && item_label == label { [INFO] [stdout] 231 | let secret = item.get_secret().map_err(|err| { [INFO] [stdout] ... [INFO] [stdout] 234 | return Ok(secret); [INFO] [stdout] 235 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser/linux.rs:295:5 [INFO] [stdout] | [INFO] [stdout] 295 | / if profiles.is_empty() { [INFO] [stdout] 296 | | if let Ok(entries) = fs::read_dir(base_dir) { [INFO] [stdout] 297 | | for entry in entries.flatten() { [INFO] [stdout] 298 | | let path = entry.path(); [INFO] [stdout] ... | [INFO] [stdout] 317 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 295 ~ if profiles.is_empty() [INFO] [stdout] 296 ~ && let Ok(entries) = fs::read_dir(base_dir) { [INFO] [stdout] 297 | for entry in entries.flatten() { [INFO] [stdout] ... [INFO] [stdout] 315 | } [INFO] [stdout] 316 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/browser/firefox/mod.rs:171:71 [INFO] [stdout] | [INFO] [stdout] 171 | } else if ch.is_ascii_whitespace() || matches!(ch, '-' | '_') { [INFO] [stdout] | _______________________________________________________________________^ [INFO] [stdout] 172 | | pending_dash = true; [INFO] [stdout] 173 | | } else { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/browser/firefox/mod.rs:173:16 [INFO] [stdout] | [INFO] [stdout] 173 | } else { [INFO] [stdout] | ________________^ [INFO] [stdout] 174 | | pending_dash = true; [INFO] [stdout] 175 | | } [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: this if-then-else expression assigns a bool literal [INFO] [stdout] --> src/browser/firefox/mod.rs:171:16 [INFO] [stdout] | [INFO] [stdout] 171 | } else if ch.is_ascii_whitespace() || matches!(ch, '-' | '_') { [INFO] [stdout] | ________________^ [INFO] [stdout] 172 | | pending_dash = true; [INFO] [stdout] 173 | | } else { [INFO] [stdout] 174 | | pending_dash = true; [INFO] [stdout] 175 | | } [INFO] [stdout] | |_________^ help: you can reduce it to: `{ ch.is_ascii_whitespace() || matches!(ch, '-' | '_'); pending_dash = true; }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool_assign [INFO] [stdout] = note: `#[warn(clippy::needless_bool_assign)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/browser/linux.rs:295:5 [INFO] [stdout] | [INFO] [stdout] 295 | / if profiles.is_empty() { [INFO] [stdout] 296 | | if let Ok(entries) = fs::read_dir(base_dir) { [INFO] [stdout] 297 | | for entry in entries.flatten() { [INFO] [stdout] 298 | | let path = entry.path(); [INFO] [stdout] ... | [INFO] [stdout] 317 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 295 ~ if profiles.is_empty() [INFO] [stdout] 296 ~ && let Ok(entries) = fs::read_dir(base_dir) { [INFO] [stdout] 297 | for entry in entries.flatten() { [INFO] [stdout] ... [INFO] [stdout] 315 | } [INFO] [stdout] 316 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/crypto/firefox.rs:222:27 [INFO] [stdout] | [INFO] [stdout] 222 | hasher.update(&hash_prefix); [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `hash_prefix` [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 `repeat().take()` can be written more concisely [INFO] [stdout] --> src/crypto/firefox.rs:285:19 [INFO] [stdout] | [INFO] [stdout] 285 | padded.extend(std::iter::repeat(0).take(length - bytes.len())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `repeat_n()` instead: `std::iter::repeat_n(0, length - bytes.len())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_repeat_n [INFO] [stdout] = note: `#[warn(clippy::manual_repeat_n)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/crypto/firefox.rs:222:27 [INFO] [stdout] | [INFO] [stdout] 222 | hasher.update(&hash_prefix); [INFO] [stdout] | ^^^^^^^^^^^^ help: change this to: `hash_prefix` [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 `repeat().take()` can be written more concisely [INFO] [stdout] --> src/crypto/firefox.rs:285:19 [INFO] [stdout] | [INFO] [stdout] 285 | padded.extend(std::iter::repeat(0).take(length - bytes.len())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `repeat_n()` instead: `std::iter::repeat_n(0, length - bytes.len())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_repeat_n [INFO] [stdout] = note: `#[warn(clippy::manual_repeat_n)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Extractor` has a `len` method but no (possibly inherited) `is_empty` method [INFO] [stdout] --> src/extractor/mod.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | / pub trait Extractor: Serialize + Send { [INFO] [stdout] 21 | | /// Returns the dataset kind handled by the extractor. [INFO] [stdout] 22 | | fn kind(&self) -> DataKind; [INFO] [stdout] ... | [INFO] [stdout] 28 | | fn len(&self) -> usize; [INFO] [stdout] 29 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Extractor` has a `len` method but no (possibly inherited) `is_empty` method [INFO] [stdout] --> src/extractor/mod.rs:20:1 [INFO] [stdout] | [INFO] [stdout] 20 | / pub trait Extractor: Serialize + Send { [INFO] [stdout] 21 | | /// Returns the dataset kind handled by the extractor. [INFO] [stdout] 22 | | fn kind(&self) -> DataKind; [INFO] [stdout] ... | [INFO] [stdout] 28 | | fn len(&self) -> usize; [INFO] [stdout] 29 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stdout] = note: `#[warn(clippy::len_without_is_empty)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/cookie.rs:122:13 [INFO] [stdout] | [INFO] [stdout] 122 | / if value.is_empty() { [INFO] [stdout] 123 | | if let Some(blob) = encrypted_value.as_deref() { [INFO] [stdout] 124 | | if !blob.is_empty() { [INFO] [stdout] 125 | | if let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] ... | [INFO] [stdout] 130 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 122 ~ if value.is_empty() [INFO] [stdout] 123 ~ && let Some(blob) = encrypted_value.as_deref() { [INFO] [stdout] 124 | if !blob.is_empty() { [INFO] [stdout] ... [INFO] [stdout] 128 | } [INFO] [stdout] 129 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/cookie.rs:123:17 [INFO] [stdout] | [INFO] [stdout] 123 | / if let Some(blob) = encrypted_value.as_deref() { [INFO] [stdout] 124 | | if !blob.is_empty() { [INFO] [stdout] 125 | | if let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] 126 | | value = String::from_utf8_lossy(&decrypted).into_owned(); [INFO] [stdout] ... | [INFO] [stdout] 129 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 123 ~ if let Some(blob) = encrypted_value.as_deref() [INFO] [stdout] 124 ~ && !blob.is_empty() { [INFO] [stdout] 125 | if let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] 126 | value = String::from_utf8_lossy(&decrypted).into_owned(); [INFO] [stdout] 127 | } [INFO] [stdout] 128 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/cookie.rs:124:21 [INFO] [stdout] | [INFO] [stdout] 124 | / if !blob.is_empty() { [INFO] [stdout] 125 | | if let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] 126 | | value = String::from_utf8_lossy(&decrypted).into_owned(); [INFO] [stdout] 127 | | } [INFO] [stdout] 128 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 124 ~ if !blob.is_empty() [INFO] [stdout] 125 ~ && let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] 126 | value = String::from_utf8_lossy(&decrypted).into_owned(); [INFO] [stdout] 127 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/chromium/cookie.rs:153:9 [INFO] [stdout] | [INFO] [stdout] 153 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 153 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 153 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/cookie.rs:122:13 [INFO] [stdout] | [INFO] [stdout] 122 | / if value.is_empty() { [INFO] [stdout] 123 | | if let Some(blob) = encrypted_value.as_deref() { [INFO] [stdout] 124 | | if !blob.is_empty() { [INFO] [stdout] 125 | | if let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] ... | [INFO] [stdout] 130 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 122 ~ if value.is_empty() [INFO] [stdout] 123 ~ && let Some(blob) = encrypted_value.as_deref() { [INFO] [stdout] 124 | if !blob.is_empty() { [INFO] [stdout] ... [INFO] [stdout] 128 | } [INFO] [stdout] 129 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/cookie.rs:123:17 [INFO] [stdout] | [INFO] [stdout] 123 | / if let Some(blob) = encrypted_value.as_deref() { [INFO] [stdout] 124 | | if !blob.is_empty() { [INFO] [stdout] 125 | | if let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] 126 | | value = String::from_utf8_lossy(&decrypted).into_owned(); [INFO] [stdout] ... | [INFO] [stdout] 129 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 123 ~ if let Some(blob) = encrypted_value.as_deref() [INFO] [stdout] 124 ~ && !blob.is_empty() { [INFO] [stdout] 125 | if let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] 126 | value = String::from_utf8_lossy(&decrypted).into_owned(); [INFO] [stdout] 127 | } [INFO] [stdout] 128 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/cookie.rs:124:21 [INFO] [stdout] | [INFO] [stdout] 124 | / if !blob.is_empty() { [INFO] [stdout] 125 | | if let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] 126 | | value = String::from_utf8_lossy(&decrypted).into_owned(); [INFO] [stdout] 127 | | } [INFO] [stdout] 128 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 124 ~ if !blob.is_empty() [INFO] [stdout] 125 ~ && let Ok(decrypted) = decrypt_blob(master_key, blob) { [INFO] [stdout] 126 | value = String::from_utf8_lossy(&decrypted).into_owned(); [INFO] [stdout] 127 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/chromium/cookie.rs:153:9 [INFO] [stdout] | [INFO] [stdout] 153 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 153 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 153 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/chromium/download.rs:97:9 [INFO] [stdout] | [INFO] [stdout] 97 | records.sort_by(|a, b| b.total_bytes.cmp(&a.total_bytes)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 97 - records.sort_by(|a, b| b.total_bytes.cmp(&a.total_bytes)); [INFO] [stdout] 97 + records.sort_by_key(|b| std::cmp::Reverse(b.total_bytes)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/extractor/chromium/extension.rs:100:35 [INFO] [stdout] | [INFO] [stdout] 100 | let enabled = !ext.get("disable_reasons").is_some(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `ext.get("disable_reasons").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/extension.rs:89:9 [INFO] [stdout] | [INFO] [stdout] 89 | / if let Some(settings) = settings { [INFO] [stdout] 90 | | if let Some(extensions_map) = settings.as_object() { [INFO] [stdout] 91 | | for (id, ext) in extensions_map { [INFO] [stdout] ... | [INFO] [stdout] 162 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 89 ~ if let Some(settings) = settings [INFO] [stdout] 90 ~ && let Some(extensions_map) = settings.as_object() { [INFO] [stdout] 91 | for (id, ext) in extensions_map { [INFO] [stdout] ... [INFO] [stdout] 160 | } [INFO] [stdout] 161 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/extension.rs:93:21 [INFO] [stdout] | [INFO] [stdout] 93 | / if let Some(location) = ext.get("location").and_then(|v| v.as_i64()) { [INFO] [stdout] 94 | | if location == 5 || location == 10 { [INFO] [stdout] 95 | | continue; [INFO] [stdout] 96 | | } [INFO] [stdout] 97 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 93 ~ if let Some(location) = ext.get("location").and_then(|v| v.as_i64()) [INFO] [stdout] 94 ~ && (location == 5 || location == 10) { [INFO] [stdout] 95 | continue; [INFO] [stdout] 96 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/chromium/download.rs:97:9 [INFO] [stdout] | [INFO] [stdout] 97 | records.sort_by(|a, b| b.total_bytes.cmp(&a.total_bytes)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 97 - records.sort_by(|a, b| b.total_bytes.cmp(&a.total_bytes)); [INFO] [stdout] 97 + records.sort_by_key(|b| std::cmp::Reverse(b.total_bytes)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/extractor/chromium/extension.rs:100:35 [INFO] [stdout] | [INFO] [stdout] 100 | let enabled = !ext.get("disable_reasons").is_some(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `ext.get("disable_reasons").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/extension.rs:89:9 [INFO] [stdout] | [INFO] [stdout] 89 | / if let Some(settings) = settings { [INFO] [stdout] 90 | | if let Some(extensions_map) = settings.as_object() { [INFO] [stdout] 91 | | for (id, ext) in extensions_map { [INFO] [stdout] ... | [INFO] [stdout] 162 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 89 ~ if let Some(settings) = settings [INFO] [stdout] 90 ~ && let Some(extensions_map) = settings.as_object() { [INFO] [stdout] 91 | for (id, ext) in extensions_map { [INFO] [stdout] ... [INFO] [stdout] 160 | } [INFO] [stdout] 161 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/extension.rs:93:21 [INFO] [stdout] | [INFO] [stdout] 93 | / if let Some(location) = ext.get("location").and_then(|v| v.as_i64()) { [INFO] [stdout] 94 | | if location == 5 || location == 10 { [INFO] [stdout] 95 | | continue; [INFO] [stdout] 96 | | } [INFO] [stdout] 97 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 93 ~ if let Some(location) = ext.get("location").and_then(|v| v.as_i64()) [INFO] [stdout] 94 ~ && (location == 5 || location == 10) { [INFO] [stdout] 95 | continue; [INFO] [stdout] 96 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/chromium/history.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 92 | records.sort_by(|a, b| b.visit_count.cmp(&a.visit_count)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 92 - records.sort_by(|a, b| b.visit_count.cmp(&a.visit_count)); [INFO] [stdout] 92 + records.sort_by_key(|b| std::cmp::Reverse(b.visit_count)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/chromium/history.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 92 | records.sort_by(|a, b| b.visit_count.cmp(&a.visit_count)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 92 - records.sort_by(|a, b| b.visit_count.cmp(&a.visit_count)); [INFO] [stdout] 92 + records.sort_by_key(|b| std::cmp::Reverse(b.visit_count)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/extractor/chromium/localstorage.rs:135:28 [INFO] [stdout] | [INFO] [stdout] 135 | let key_bytes = if parts[1].len() > 0 && parts[1][0] == 0x01 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!parts[1].is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/extractor/chromium/localstorage.rs:151:22 [INFO] [stdout] | [INFO] [stdout] 151 | .filter(|&b| b >= 0x20 && b < 0x7F || b >= 0x80) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x20..0x7F).contains(&b)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/chromium/password.rs:129:9 [INFO] [stdout] | [INFO] [stdout] 129 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 129 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 129 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/extractor/chromium/localstorage.rs:135:28 [INFO] [stdout] | [INFO] [stdout] 135 | let key_bytes = if parts[1].len() > 0 && parts[1][0] == 0x01 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!parts[1].is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/extractor/chromium/localstorage.rs:151:22 [INFO] [stdout] | [INFO] [stdout] 151 | .filter(|&b| b >= 0x20 && b < 0x7F || b >= 0x80) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x20..0x7F).contains(&b)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/chromium/password.rs:129:9 [INFO] [stdout] | [INFO] [stdout] 129 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 129 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 129 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/extractor/chromium/sessionstorage.rs:135:28 [INFO] [stdout] | [INFO] [stdout] 135 | let key_bytes = if parts[1].len() > 0 && parts[1][0] == 0x01 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!parts[1].is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/extractor/chromium/sessionstorage.rs:169:22 [INFO] [stdout] | [INFO] [stdout] 169 | .filter(|&b| b >= 0x20 && b < 0x7F || b >= 0x80) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x20..0x7F).contains(&b)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> src/extractor/chromium/mod.rs:40:45 [INFO] [stdout] | [INFO] [stdout] 40 | timestamp += Duration::microseconds(remainder as i64); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `remainder` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/mod.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 61 | / if matches!(prefix, b"v10" | b"v11") { [INFO] [stdout] 62 | | if master_key.as_bytes().len() >= 32 { [INFO] [stdout] 63 | | let mut nonce = [0u8; 12]; [INFO] [stdout] 64 | | nonce.copy_from_slice(&blob[3..15]); [INFO] [stdout] ... | [INFO] [stdout] 70 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 61 ~ if matches!(prefix, b"v10" | b"v11") [INFO] [stdout] 62 ~ && master_key.as_bytes().len() >= 32 { [INFO] [stdout] 63 | let mut nonce = [0u8; 12]; [INFO] [stdout] ... [INFO] [stdout] 68 | } [INFO] [stdout] 69 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/bookmark.rs:72:9 [INFO] [stdout] | [INFO] [stdout] 72 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 72 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 72 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/extractor/chromium/sessionstorage.rs:135:28 [INFO] [stdout] | [INFO] [stdout] 135 | let key_bytes = if parts[1].len() > 0 && parts[1][0] == 0x01 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!parts[1].is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `Range::contains` implementation [INFO] [stdout] --> src/extractor/chromium/sessionstorage.rs:169:22 [INFO] [stdout] | [INFO] [stdout] 169 | .filter(|&b| b >= 0x20 && b < 0x7F || b >= 0x80) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: use: `(0x20..0x7F).contains(&b)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i64` -> `i64`) [INFO] [stdout] --> src/extractor/chromium/mod.rs:40:45 [INFO] [stdout] | [INFO] [stdout] 40 | timestamp += Duration::microseconds(remainder as i64); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `remainder` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/extractor/chromium/mod.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 61 | / if matches!(prefix, b"v10" | b"v11") { [INFO] [stdout] 62 | | if master_key.as_bytes().len() >= 32 { [INFO] [stdout] 63 | | let mut nonce = [0u8; 12]; [INFO] [stdout] 64 | | nonce.copy_from_slice(&blob[3..15]); [INFO] [stdout] ... | [INFO] [stdout] 70 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 61 ~ if matches!(prefix, b"v10" | b"v11") [INFO] [stdout] 62 ~ && master_key.as_bytes().len() >= 32 { [INFO] [stdout] 63 | let mut nonce = [0u8; 12]; [INFO] [stdout] ... [INFO] [stdout] 68 | } [INFO] [stdout] 69 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/cookie.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 80 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 80 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/bookmark.rs:72:9 [INFO] [stdout] | [INFO] [stdout] 72 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 72 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 72 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/cookie.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 80 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 80 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/download.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 92 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 92 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 92 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/download.rs:92:9 [INFO] [stdout] | [INFO] [stdout] 92 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 92 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 92 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/history.rs:71:9 [INFO] [stdout] | [INFO] [stdout] 71 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 71 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 71 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/extractor/firefox/localstorage.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | &reversed_domain[1..] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/extractor/firefox/localstorage.rs:93:28 [INFO] [stdout] | [INFO] [stdout] 93 | let clean_domain = if reversed_domain.starts_with('.') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 93 ~ let clean_domain = if let Some() = reversed_domain.strip_prefix('.') { [INFO] [stdout] 94 ~ [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/password.rs:91:9 [INFO] [stdout] | [INFO] [stdout] 91 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 91 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 91 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/history.rs:71:9 [INFO] [stdout] | [INFO] [stdout] 71 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 71 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 71 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/extractor/firefox/localstorage.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | &reversed_domain[1..] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/extractor/firefox/localstorage.rs:93:28 [INFO] [stdout] | [INFO] [stdout] 93 | let clean_domain = if reversed_domain.starts_with('.') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 93 ~ let clean_domain = if let Some() = reversed_domain.strip_prefix('.') { [INFO] [stdout] 94 ~ [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/extractor/firefox/password.rs:91:9 [INFO] [stdout] | [INFO] [stdout] 91 | records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 91 - records.sort_by(|a, b| b.0.cmp(&a.0)); [INFO] [stdout] 91 + records.sort_by_key(|b| std::cmp::Reverse(b.0)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/fs.rs:28:18 [INFO] [stdout] | [INFO] [stdout] 28 | Ok(_) => return Ok(()), [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] 28 - Ok(_) => return Ok(()), [INFO] [stdout] 28 + Ok(_) => Ok(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/fs.rs:51:13 [INFO] [stdout] | [INFO] [stdout] 51 | return Err(e.into()); [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] 51 - return Err(e.into()); [INFO] [stdout] 51 + Err(e.into()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/fs.rs:28:18 [INFO] [stdout] | [INFO] [stdout] 28 | Ok(_) => return Ok(()), [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] 28 - Ok(_) => return Ok(()), [INFO] [stdout] 28 + Ok(_) => Ok(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/util/fs.rs:51:13 [INFO] [stdout] | [INFO] [stdout] 51 | return Err(e.into()); [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] 51 - return Err(e.into()); [INFO] [stdout] 51 + Err(e.into()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking hack-browser-data v0.1.0 (/opt/rustwide/workdir/cli) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 02s [INFO] running `Command { std: "docker" "inspect" "99781063433df6ed12c7ff6b1e988e44bd8119d6fbbecd44594ad2ecd2c56f23", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "99781063433df6ed12c7ff6b1e988e44bd8119d6fbbecd44594ad2ecd2c56f23", kill_on_drop: false }` [INFO] [stdout] 99781063433df6ed12c7ff6b1e988e44bd8119d6fbbecd44594ad2ecd2c56f23