[INFO] cloning repository https://github.com/Arekkusul/ExploitAtlas [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Arekkusul/ExploitAtlas" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FArekkusul%2FExploitAtlas", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FArekkusul%2FExploitAtlas'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 755e4fa28490f8947e5aa2a766c5314b85fddf54 [INFO] linting Arekkusul/ExploitAtlas against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FArekkusul%2FExploitAtlas" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/Arekkusul/ExploitAtlas [INFO] finished tweaking git repo https://github.com/Arekkusul/ExploitAtlas [INFO] tweaked toml for git repo https://github.com/Arekkusul/ExploitAtlas written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/Arekkusul/ExploitAtlas 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/Arekkusul/ExploitAtlas 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 implicit-clone-derive v0.1.2 [INFO] [stderr] Downloaded compression-codecs v0.4.36 [INFO] [stderr] Downloaded yew-router-macro v0.18.0 [INFO] [stderr] Downloaded yew-router v0.18.0 [INFO] [stderr] Downloaded tower_governor v0.4.3 [INFO] [stderr] Downloaded const_fn v0.4.11 [INFO] [stderr] Downloaded async-compression v0.4.37 [INFO] [stderr] Downloaded lopdf v0.26.0 [INFO] [stderr] Downloaded zerocopy-derive v0.8.37 [INFO] [stderr] Downloaded genpdf v0.2.0 [INFO] [stderr] Downloaded pom v3.4.0 [INFO] [stderr] Downloaded zerocopy v0.8.37 [INFO] [stderr] Downloaded printpdf v0.3.4 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 12796724973ebbb386f1b5fa4ba4056eee2c04ef015bee8fe59db0f3cb4c6239 [INFO] running `Command { std: "docker" "start" "-a" "12796724973ebbb386f1b5fa4ba4056eee2c04ef015bee8fe59db0f3cb4c6239", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "12796724973ebbb386f1b5fa4ba4056eee2c04ef015bee8fe59db0f3cb4c6239", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "12796724973ebbb386f1b5fa4ba4056eee2c04ef015bee8fe59db0f3cb4c6239", kill_on_drop: false }` [INFO] [stdout] 12796724973ebbb386f1b5fa4ba4056eee2c04ef015bee8fe59db0f3cb4c6239 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e1ed688de95e04539079266211a230381bd8aa35c15b897a5dd5a85ab05b84b0 [INFO] running `Command { std: "docker" "start" "-a" "e1ed688de95e04539079266211a230381bd8aa35c15b897a5dd5a85ab05b84b0", kill_on_drop: false }` [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling wasm-bindgen-shared v0.2.108 [INFO] [stderr] Compiling bumpalo v3.19.1 [INFO] [stderr] Checking unicode-ident v1.0.22 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling wasm-bindgen v0.2.108 [INFO] [stderr] Checking socket2 v0.6.2 [INFO] [stderr] Checking mio v1.1.1 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Checking getrandom v0.2.17 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling libc v0.2.180 [INFO] [stderr] Compiling smallvec v1.15.1 [INFO] [stderr] Compiling zerocopy v0.8.37 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Compiling icu_properties_data v2.1.2 [INFO] [stderr] Checking encoding_index_tests v0.1.4 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Checking simd-adler32 v0.3.8 [INFO] [stderr] Compiling form_urlencoded v1.2.2 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking bitflags v2.10.0 [INFO] [stderr] Compiling slab v0.4.12 [INFO] [stderr] Checking miniz_oxide v0.8.9 [INFO] [stderr] Compiling itoa v1.0.17 [INFO] [stderr] Compiling zmij v1.0.19 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Compiling const_fn v0.4.11 [INFO] [stderr] Compiling log v0.4.29 [INFO] [stderr] Compiling crc v3.4.0 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling indexmap v2.13.0 [INFO] [stderr] Compiling spin v0.9.8 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Compiling time v0.2.27 [INFO] [stderr] Compiling ryu v1.0.22 [INFO] [stderr] Compiling toml_edit v0.19.15 [INFO] [stderr] Compiling prettyplease v0.2.37 [INFO] [stderr] Compiling time-macros-impl v0.1.2 [INFO] [stderr] Compiling flume v0.11.1 [INFO] [stderr] Checking flate2 v1.1.8 [INFO] [stderr] Compiling atoi v2.0.0 [INFO] [stderr] Checking bstr v1.12.1 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Checking encoding-index-korean v1.20141219.5 [INFO] [stderr] Checking encoding-index-tradchinese v1.20141219.5 [INFO] [stderr] Checking encoding-index-simpchinese v1.20141219.5 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Checking encoding-index-japanese v1.20141219.5 [INFO] [stderr] Checking encoding-index-singlebyte v1.20141219.5 [INFO] [stderr] Compiling futures-intrusive v0.5.0 [INFO] [stderr] Compiling portable-atomic v1.13.1 [INFO] [stderr] Checking data-encoding v2.10.0 [INFO] [stderr] Checking pom v3.4.0 [INFO] [stderr] Checking encoding v0.2.33 [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Checking time-macros v0.1.1 [INFO] [stderr] Compiling mime_guess v2.0.5 [INFO] [stderr] Checking approx v0.3.2 [INFO] [stderr] Checking ordered-float v1.1.1 [INFO] [stderr] Checking raw-cpuid v11.6.0 [INFO] [stderr] Checking stb_truetype v0.3.1 [INFO] [stderr] Checking num_cpus v1.17.0 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking itoa v0.4.8 [INFO] [stderr] Compiling boolinator v2.4.0 [INFO] [stderr] Checking dtoa v0.4.8 [INFO] [stderr] Checking compression-core v0.4.31 [INFO] [stderr] Checking linked-hash-map v0.5.6 [INFO] [stderr] Checking rusttype v0.8.3 [INFO] [stderr] Checking compression-codecs v0.4.36 [INFO] [stderr] Checking serde_path_to_error v0.1.20 [INFO] [stderr] Compiling proc-macro-crate v1.3.1 [INFO] [stderr] Checking spinning_top v0.3.0 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Checking nonempty v0.7.0 [INFO] [stderr] Checking futures-timer v3.0.3 [INFO] [stderr] Checking dashmap v5.5.3 [INFO] [stderr] Checking matchit v0.7.3 [INFO] [stderr] Checking nonzero_ext v0.3.0 [INFO] [stderr] Checking no-std-compat v0.4.1 [INFO] [stderr] Checking uuid v1.20.0 [INFO] [stderr] Checking route-recognizer v0.3.1 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling wasm-bindgen-macro-support v0.2.108 [INFO] [stderr] Compiling futures-executor v0.3.31 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling pin-project-internal v1.1.10 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling gloo-worker-macros v0.1.0 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking rustls-webpki v0.103.9 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Checking pin-project v1.1.10 [INFO] [stderr] Compiling implicit-clone-derive v0.1.2 [INFO] [stderr] Checking quanta v0.12.6 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling yew-macro v0.21.0 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking tungstenite v0.24.0 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Checking implicit-clone v0.4.9 [INFO] [stderr] Checking forwarded-header-value v0.1.1 [INFO] [stderr] Compiling derive_more v0.99.20 [INFO] [stderr] Compiling yew-router-macro v0.18.0 [INFO] [stderr] Checking tower v0.4.13 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Checking tracing-subscriber v0.3.22 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Compiling wasm-bindgen-macro v0.2.108 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Checking js-sys v0.3.85 [INFO] [stderr] Checking console_error_panic_hook v0.1.7 [INFO] [stderr] Checking bincode v1.3.3 [INFO] [stderr] Checking chrono v0.4.43 [INFO] [stderr] Checking shared v0.1.0 (/opt/rustwide/workdir/shared) [INFO] [stderr] Checking axum-core v0.4.5 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking pinned v0.1.0 [INFO] [stderr] Checking governor v0.6.3 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling sqlx-core v0.8.6 [INFO] [stderr] Checking lopdf v0.26.0 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking tower v0.5.3 [INFO] [stderr] Checking tokio-rustls v0.26.4 [INFO] [stderr] Checking tokio-tungstenite v0.24.0 [INFO] [stderr] Checking async-compression v0.4.37 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking printpdf v0.3.4 [INFO] [stderr] Checking prokio v0.1.0 [INFO] [stderr] Checking tower-http v0.5.2 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking genpdf v0.2.0 [INFO] [stderr] Checking hyper-util v0.1.19 [INFO] [stderr] Checking web-sys v0.3.85 [INFO] [stderr] Checking wasm-bindgen-futures v0.4.58 [INFO] [stderr] Checking serde-wasm-bindgen v0.6.5 [INFO] [stderr] Checking gloo-timers v0.3.0 [INFO] [stderr] Checking sqlx-sqlite v0.8.6 [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> shared/src/lib.rs:892:1 [INFO] [stdout] | [INFO] [stdout] 892 | / pub enum WsMessage { [INFO] [stdout] 893 | | CveAnalyzed(CveRecord), [INFO] [stdout] | | ---------------------- the largest variant contains at least 2456 bytes [INFO] [stdout] 894 | | KevRefreshed { count: usize }, [INFO] [stdout] 895 | | Error { message: String }, [INFO] [stdout] ... | [INFO] [stdout] 929 | | AttackEvent(LiveAttackEvent), [INFO] [stdout] | | ---------------------------- the second-largest variant contains at least 256 bytes [INFO] [stdout] 930 | | /// Attack feed update with aggregated statistics [INFO] [stdout] 931 | | AttackFeedUpdate(AttackFeedSummary), [INFO] [stdout] 932 | | } [INFO] [stdout] | |_^ the entire enum is at least 2456 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 893 - CveAnalyzed(CveRecord), [INFO] [stdout] 893 + CveAnalyzed(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> shared/src/lib.rs:1064:10 [INFO] [stdout] | [INFO] [stdout] 1064 | .replace('\u{2013}', "-") [INFO] [stdout] | __________^ [INFO] [stdout] 1065 | | .replace('\u{2014}', "-") [INFO] [stdout] 1066 | | .replace('\u{FF0D}', "-"); [INFO] [stdout] | |_________________________________^ help: replace with: `replace(['\u{2013}', '\u{2014}', '\u{FF0D}'], "-")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] = note: `#[warn(clippy::collapsible_str_replace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: large size difference between variants [INFO] [stdout] --> shared/src/lib.rs:892:1 [INFO] [stdout] | [INFO] [stdout] 892 | / pub enum WsMessage { [INFO] [stdout] 893 | | CveAnalyzed(CveRecord), [INFO] [stdout] | | ---------------------- the largest variant contains at least 2456 bytes [INFO] [stdout] 894 | | KevRefreshed { count: usize }, [INFO] [stdout] 895 | | Error { message: String }, [INFO] [stdout] ... | [INFO] [stdout] 929 | | AttackEvent(LiveAttackEvent), [INFO] [stdout] | | ---------------------------- the second-largest variant contains at least 256 bytes [INFO] [stdout] 930 | | /// Attack feed update with aggregated statistics [INFO] [stdout] 931 | | AttackFeedUpdate(AttackFeedSummary), [INFO] [stdout] 932 | | } [INFO] [stdout] | |_^ the entire enum is at least 2456 bytes [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stdout] = note: `#[warn(clippy::large_enum_variant)]` on by default [INFO] [stdout] help: consider boxing the large fields or introducing indirection in some other way to reduce the total size of the enum [INFO] [stdout] | [INFO] [stdout] 893 - CveAnalyzed(CveRecord), [INFO] [stdout] 893 + CveAnalyzed(Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1187:1 [INFO] [stdout] | [INFO] [stdout] 1187 | / impl Default for WatchType { [INFO] [stdout] 1188 | | fn default() -> Self { [INFO] [stdout] 1189 | | WatchType::Keyword [INFO] [stdout] 1190 | | } [INFO] [stdout] 1191 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1179 + #[derive(Default)] [INFO] [stdout] 1180 | pub enum WatchType { [INFO] [stdout] 1181 | Vendor, [INFO] [stdout] ... [INFO] [stdout] 1184 | Cwe, [INFO] [stdout] 1185 ~ #[default] [INFO] [stdout] 1186 ~ Keyword, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1249:1 [INFO] [stdout] | [INFO] [stdout] 1249 | / impl Default for AlertSeverity { [INFO] [stdout] 1250 | | fn default() -> Self { [INFO] [stdout] 1251 | | AlertSeverity::Info [INFO] [stdout] 1252 | | } [INFO] [stdout] 1253 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1241 + #[derive(Default)] [INFO] [stdout] 1242 | pub enum AlertSeverity { [INFO] [stdout] 1243 | Critical, [INFO] [stdout] ... [INFO] [stdout] 1246 | Low, [INFO] [stdout] 1247 ~ #[default] [INFO] [stdout] 1248 ~ Info, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1266:1 [INFO] [stdout] | [INFO] [stdout] 1266 | / impl Default for AlertType { [INFO] [stdout] 1267 | | fn default() -> Self { [INFO] [stdout] 1268 | | AlertType::NewCve [INFO] [stdout] 1269 | | } [INFO] [stdout] 1270 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1258 + #[derive(Default)] [INFO] [stdout] 1259 | pub enum AlertType { [INFO] [stdout] 1260 ~ #[default] [INFO] [stdout] 1261 ~ NewCve, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1319:1 [INFO] [stdout] | [INFO] [stdout] 1319 | / impl Default for BulkJobStatus { [INFO] [stdout] 1320 | | fn default() -> Self { [INFO] [stdout] 1321 | | BulkJobStatus::Pending [INFO] [stdout] 1322 | | } [INFO] [stdout] 1323 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1312 + #[derive(Default)] [INFO] [stdout] 1313 | pub enum BulkJobStatus { [INFO] [stdout] 1314 ~ #[default] [INFO] [stdout] 1315 ~ Pending, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1377:1 [INFO] [stdout] | [INFO] [stdout] 1377 | / impl Default for ExportFormat { [INFO] [stdout] 1378 | | fn default() -> Self { [INFO] [stdout] 1379 | | ExportFormat::Json [INFO] [stdout] 1380 | | } [INFO] [stdout] 1381 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1372 + #[derive(Default)] [INFO] [stdout] 1373 | pub enum ExportFormat { [INFO] [stdout] 1374 ~ #[default] [INFO] [stdout] 1375 ~ Json, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking hyper-rustls v0.27.7 [INFO] [stderr] Checking axum v0.7.9 [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> shared/src/lib.rs:1064:10 [INFO] [stdout] | [INFO] [stdout] 1064 | .replace('\u{2013}', "-") [INFO] [stdout] | __________^ [INFO] [stdout] 1065 | | .replace('\u{2014}', "-") [INFO] [stdout] 1066 | | .replace('\u{FF0D}', "-"); [INFO] [stdout] | |_________________________________^ help: replace with: `replace(['\u{2013}', '\u{2014}', '\u{FF0D}'], "-")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] = note: `#[warn(clippy::collapsible_str_replace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1187:1 [INFO] [stdout] | [INFO] [stdout] 1187 | / impl Default for WatchType { [INFO] [stdout] 1188 | | fn default() -> Self { [INFO] [stdout] 1189 | | WatchType::Keyword [INFO] [stdout] 1190 | | } [INFO] [stdout] 1191 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1179 + #[derive(Default)] [INFO] [stdout] 1180 | pub enum WatchType { [INFO] [stdout] 1181 | Vendor, [INFO] [stdout] ... [INFO] [stdout] 1184 | Cwe, [INFO] [stdout] 1185 ~ #[default] [INFO] [stdout] 1186 ~ Keyword, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1249:1 [INFO] [stdout] | [INFO] [stdout] 1249 | / impl Default for AlertSeverity { [INFO] [stdout] 1250 | | fn default() -> Self { [INFO] [stdout] 1251 | | AlertSeverity::Info [INFO] [stdout] 1252 | | } [INFO] [stdout] 1253 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1241 + #[derive(Default)] [INFO] [stdout] 1242 | pub enum AlertSeverity { [INFO] [stdout] 1243 | Critical, [INFO] [stdout] ... [INFO] [stdout] 1246 | Low, [INFO] [stdout] 1247 ~ #[default] [INFO] [stdout] 1248 ~ Info, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking reqwest v0.12.28 [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1266:1 [INFO] [stdout] | [INFO] [stdout] 1266 | / impl Default for AlertType { [INFO] [stdout] 1267 | | fn default() -> Self { [INFO] [stdout] 1268 | | AlertType::NewCve [INFO] [stdout] 1269 | | } [INFO] [stdout] 1270 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1258 + #[derive(Default)] [INFO] [stdout] 1259 | pub enum AlertType { [INFO] [stdout] 1260 ~ #[default] [INFO] [stdout] 1261 ~ NewCve, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1319:1 [INFO] [stdout] | [INFO] [stdout] 1319 | / impl Default for BulkJobStatus { [INFO] [stdout] 1320 | | fn default() -> Self { [INFO] [stdout] 1321 | | BulkJobStatus::Pending [INFO] [stdout] 1322 | | } [INFO] [stdout] 1323 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1312 + #[derive(Default)] [INFO] [stdout] 1313 | pub enum BulkJobStatus { [INFO] [stdout] 1314 ~ #[default] [INFO] [stdout] 1315 ~ Pending, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> shared/src/lib.rs:1377:1 [INFO] [stdout] | [INFO] [stdout] 1377 | / impl Default for ExportFormat { [INFO] [stdout] 1378 | | fn default() -> Self { [INFO] [stdout] 1379 | | ExportFormat::Json [INFO] [stdout] 1380 | | } [INFO] [stdout] 1381 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 1372 + #[derive(Default)] [INFO] [stdout] 1373 | pub enum ExportFormat { [INFO] [stdout] 1374 ~ #[default] [INFO] [stdout] 1375 ~ Json, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling sqlx-macros-core v0.8.6 [INFO] [stderr] Checking tower_governor v0.4.3 [INFO] [stderr] Compiling sqlx-macros v0.8.6 [INFO] [stderr] Checking sqlx v0.8.6 [INFO] [stderr] Checking backend v0.1.0 (/opt/rustwide/workdir/backend) [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> backend/src/services/greynoise.rs:104:9 [INFO] [stdout] | [INFO] [stdout] 104 | let mut countries: std::collections::HashMap = std::collections::HashMap::new(); [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> backend/src/services/greynoise.rs:104:9 [INFO] [stdout] | [INFO] [stdout] 104 | let mut countries: std::collections::HashMap = std::collections::HashMap::new(); [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking gloo-utils v0.2.0 [INFO] [stderr] Checking gloo-events v0.2.0 [INFO] [stderr] Checking gloo-render v0.2.0 [INFO] [stderr] Checking gloo-dialogs v0.2.0 [INFO] [stderr] Checking gloo-file v0.3.0 [INFO] [stderr] Checking gloo-storage v0.3.0 [INFO] [stderr] Checking gloo-console v0.3.0 [INFO] [stderr] Checking gloo-history v0.2.2 [INFO] [stderr] Checking gloo-net v0.4.0 [INFO] [stderr] Checking gloo-worker v0.4.0 [INFO] [stderr] Checking gloo-worker v0.5.0 [INFO] [stderr] Checking gloo-net v0.5.0 [INFO] [stderr] Checking gloo-net v0.6.0 [INFO] [stderr] Checking gloo v0.11.0 [INFO] [stderr] Checking gloo v0.10.0 [INFO] [stderr] Checking yew v0.21.0 [INFO] [stdout] warning: constant `MITRE_EXECUTION` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const MITRE_EXECUTION: &str = "TA0002"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_PERSISTENCE` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MITRE_PERSISTENCE: &str = "TA0003"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_PRIV_ESC` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:11:7 [INFO] [stdout] | [INFO] [stdout] 11 | const MITRE_PRIV_ESC: &str = "TA0004"; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_DEFENSE_EVASION` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:12:7 [INFO] [stdout] | [INFO] [stdout] 12 | const MITRE_DEFENSE_EVASION: &str = "TA0005"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_CREDENTIAL_ACCESS` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:13:7 [INFO] [stdout] | [INFO] [stdout] 13 | const MITRE_CREDENTIAL_ACCESS: &str = "TA0006"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `should_update_epss` is never used [INFO] [stdout] --> backend/src/services/epss_tracker.rs:165:14 [INFO] [stdout] | [INFO] [stdout] 165 | pub async fn should_update_epss( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `id` is never read [INFO] [stdout] --> backend/src/services/virustotal.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 18 | struct VtSearchItem { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 19 | #[serde(default)] [INFO] [stdout] 20 | id: String, [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `VtSearchItem` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `md5` is never read [INFO] [stdout] --> backend/src/services/virustotal.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 28 | struct VtAttributes { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 36 | md5: Option, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `VtAttributes` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `count` is never read [INFO] [stdout] --> backend/src/services/virustotal.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 58 | struct VtThreatName { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 62 | count: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `VtThreatName` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `vector` and `authentication` are never read [INFO] [stdout] --> backend/src/services/circl.rs:38:5 [INFO] [stdout] | [INFO] [stdout] 34 | struct CirclAccess { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 38 | vector: String, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 39 | #[serde(default)] [INFO] [stdout] 40 | authentication: String, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CirclAccess` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `search_related_cves` is never used [INFO] [stdout] --> backend/src/services/circl.rs:133:14 [INFO] [stdout] | [INFO] [stdout] 133 | pub async fn search_related_cves( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `GREYNOISE_RIOT_API` is never used [INFO] [stdout] --> backend/src/services/greynoise.rs:13:7 [INFO] [stdout] | [INFO] [stdout] 13 | const GREYNOISE_RIOT_API: &str = "https://api.greynoise.io/v2/riot/"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> backend/src/services/greynoise.rs:72:5 [INFO] [stdout] | [INFO] [stdout] 61 | struct CommunityResponse { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 72 | message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CommunityResponse` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RiotResponse` is never constructed [INFO] [stdout] --> backend/src/services/greynoise.rs:77:8 [INFO] [stdout] | [INFO] [stdout] 77 | struct RiotResponse { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `check_ip` is never used [INFO] [stdout] --> backend/src/services/greynoise.rs:185:14 [INFO] [stdout] | [INFO] [stdout] 185 | pub async fn check_ip( [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `catalog_version`, `date_released`, and `count` are never read [INFO] [stdout] --> backend/src/services/cisa.rs:58:5 [INFO] [stdout] | [INFO] [stdout] 56 | struct KevCatalog { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 57 | #[serde(rename = "catalogVersion")] [INFO] [stdout] 58 | catalog_version: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 59 | #[serde(rename = "dateReleased")] [INFO] [stdout] 60 | date_released: String, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 61 | count: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `KevCatalog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `vendor_project`, `product`, `vulnerability_name`, `date_added`, and `short_description` are never read [INFO] [stdout] --> backend/src/services/cisa.rs:70:5 [INFO] [stdout] | [INFO] [stdout] 66 | struct KevVulnerability { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 70 | vendor_project: String, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 71 | product: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 72 | #[serde(rename = "vulnerabilityName")] [INFO] [stdout] 73 | vulnerability_name: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 74 | #[serde(rename = "dateAdded")] [INFO] [stdout] 75 | date_added: String, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 76 | #[serde(rename = "shortDescription")] [INFO] [stdout] 77 | short_description: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `KevVulnerability` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `retry_with_backoff` is never used [INFO] [stdout] --> backend/src/services/resilience.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | pub async fn retry_with_backoff(f: F) -> Result [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `shared_circuit_breaker` is never used [INFO] [stdout] --> backend/src/services/resilience.rs:372:8 [INFO] [stdout] | [INFO] [stdout] 372 | pub fn shared_circuit_breaker(name: impl Into) -> SharedCircuitBreaker { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `attacks` is never read [INFO] [stdout] --> backend/src/services/attack_feed.rs:158:5 [INFO] [stdout] | [INFO] [stdout] 152 | struct DShieldIpEntry { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 158 | attacks: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DShieldIpEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `targets` and `sources` are never read [INFO] [stdout] --> backend/src/services/attack_feed.rs:178:5 [INFO] [stdout] | [INFO] [stdout] 172 | struct DShieldPortEntry { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 178 | targets: u64, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 179 | #[serde(default)] [INFO] [stdout] 180 | sources: u64, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DShieldPortEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> backend/src/handlers/cve.rs:623:10 [INFO] [stdout] | [INFO] [stdout] 623 | .replace('*', "") [INFO] [stdout] | __________^ [INFO] [stdout] 624 | | .replace(':', "") [INFO] [stdout] 625 | | .replace('(', "") [INFO] [stdout] 626 | | .replace(')', "") [INFO] [stdout] 627 | | .replace('[', "") [INFO] [stdout] 628 | | .replace(']', "") [INFO] [stdout] | |_________________________^ help: replace with: `replace(['*', ':', '(', ')', '[', ']'], "")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] = note: `#[warn(clippy::collapsible_str_replace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_EXECUTION` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:9:7 [INFO] [stdout] | [INFO] [stdout] 9 | const MITRE_EXECUTION: &str = "TA0002"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_PERSISTENCE` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:10:7 [INFO] [stdout] | [INFO] [stdout] 10 | const MITRE_PERSISTENCE: &str = "TA0003"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_PRIV_ESC` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:11:7 [INFO] [stdout] | [INFO] [stdout] 11 | const MITRE_PRIV_ESC: &str = "TA0004"; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_DEFENSE_EVASION` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:12:7 [INFO] [stdout] | [INFO] [stdout] 12 | const MITRE_DEFENSE_EVASION: &str = "TA0005"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MITRE_CREDENTIAL_ACCESS` is never used [INFO] [stdout] --> backend/src/services/attack_path.rs:13:7 [INFO] [stdout] | [INFO] [stdout] 13 | const MITRE_CREDENTIAL_ACCESS: &str = "TA0006"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `should_update_epss` is never used [INFO] [stdout] --> backend/src/services/epss_tracker.rs:165:14 [INFO] [stdout] | [INFO] [stdout] 165 | pub async fn should_update_epss( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `id` is never read [INFO] [stdout] --> backend/src/services/virustotal.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 18 | struct VtSearchItem { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 19 | #[serde(default)] [INFO] [stdout] 20 | id: String, [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = note: `VtSearchItem` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `md5` is never read [INFO] [stdout] --> backend/src/services/virustotal.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 28 | struct VtAttributes { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 36 | md5: Option, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `VtAttributes` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `count` is never read [INFO] [stdout] --> backend/src/services/virustotal.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 58 | struct VtThreatName { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 62 | count: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `VtThreatName` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `vector` and `authentication` are never read [INFO] [stdout] --> backend/src/services/circl.rs:38:5 [INFO] [stdout] | [INFO] [stdout] 34 | struct CirclAccess { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 38 | vector: String, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 39 | #[serde(default)] [INFO] [stdout] 40 | authentication: String, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CirclAccess` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `search_related_cves` is never used [INFO] [stdout] --> backend/src/services/circl.rs:133:14 [INFO] [stdout] | [INFO] [stdout] 133 | pub async fn search_related_cves( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `GREYNOISE_RIOT_API` is never used [INFO] [stdout] --> backend/src/services/greynoise.rs:13:7 [INFO] [stdout] | [INFO] [stdout] 13 | const GREYNOISE_RIOT_API: &str = "https://api.greynoise.io/v2/riot/"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `message` is never read [INFO] [stdout] --> backend/src/services/greynoise.rs:72:5 [INFO] [stdout] | [INFO] [stdout] 61 | struct CommunityResponse { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 72 | message: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CommunityResponse` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RiotResponse` is never constructed [INFO] [stdout] --> backend/src/services/greynoise.rs:77:8 [INFO] [stdout] | [INFO] [stdout] 77 | struct RiotResponse { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `catalog_version`, `date_released`, and `count` are never read [INFO] [stdout] --> backend/src/services/cisa.rs:58:5 [INFO] [stdout] | [INFO] [stdout] 56 | struct KevCatalog { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 57 | #[serde(rename = "catalogVersion")] [INFO] [stdout] 58 | catalog_version: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 59 | #[serde(rename = "dateReleased")] [INFO] [stdout] 60 | date_released: String, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 61 | count: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `KevCatalog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `vendor_project`, `product`, `vulnerability_name`, `date_added`, and `short_description` are never read [INFO] [stdout] --> backend/src/services/cisa.rs:70:5 [INFO] [stdout] | [INFO] [stdout] 66 | struct KevVulnerability { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 70 | vendor_project: String, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 71 | product: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 72 | #[serde(rename = "vulnerabilityName")] [INFO] [stdout] 73 | vulnerability_name: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 74 | #[serde(rename = "dateAdded")] [INFO] [stdout] 75 | date_added: String, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 76 | #[serde(rename = "shortDescription")] [INFO] [stdout] 77 | short_description: String, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `KevVulnerability` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `retry_with_backoff` is never used [INFO] [stdout] --> backend/src/services/resilience.rs:276:14 [INFO] [stdout] | [INFO] [stdout] 276 | pub async fn retry_with_backoff(f: F) -> Result [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `shared_circuit_breaker` is never used [INFO] [stdout] --> backend/src/services/resilience.rs:372:8 [INFO] [stdout] | [INFO] [stdout] 372 | pub fn shared_circuit_breaker(name: impl Into) -> SharedCircuitBreaker { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `attacks` is never read [INFO] [stdout] --> backend/src/services/attack_feed.rs:158:5 [INFO] [stdout] | [INFO] [stdout] 152 | struct DShieldIpEntry { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 158 | attacks: String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DShieldIpEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `targets` and `sources` are never read [INFO] [stdout] --> backend/src/services/attack_feed.rs:178:5 [INFO] [stdout] | [INFO] [stdout] 172 | struct DShieldPortEntry { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 178 | targets: u64, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 179 | #[serde(default)] [INFO] [stdout] 180 | sources: u64, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `DShieldPortEntry` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> backend/src/handlers/ws.rs:27:46 [INFO] [stdout] | [INFO] [stdout] 27 | if sender.send(Message::Text(json.into())).await.is_err() { [INFO] [stdout] | ^^^^^^^^^^^ help: consider removing `.into()`: `json` [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: the borrowed expression implements the required traits [INFO] [stdout] --> backend/src/handlers/watchlist.rs:46:11 [INFO] [stdout] | [INFO] [stdout] 46 | .bind(&watch_type_str) [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `watch_type_str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> backend/src/handlers/watchlist.rs:309:11 [INFO] [stdout] | [INFO] [stdout] 309 | .bind(&alert_type_str) [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `alert_type_str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> backend/src/handlers/watchlist.rs:325:11 [INFO] [stdout] | [INFO] [stdout] 325 | .bind(&alert_type_str) [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `alert_type_str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> backend/src/handlers/watchlist.rs:330:11 [INFO] [stdout] | [INFO] [stdout] 330 | .bind(&severity_str) [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `severity_str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> backend/src/handlers/bulk.rs:513:30 [INFO] [stdout] | [INFO] [stdout] 513 | let parallel_limit = req.parallel_limit.unwrap_or(10).min(20).max(1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `req.parallel_limit.unwrap_or(10).clamp(1, 20)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> backend/src/handlers/bulk.rs:585:14 [INFO] [stdout] | [INFO] [stdout] 585 | .map(|s| shared::normalize_cve_id(s)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `shared::normalize_cve_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> backend/src/handlers/cve.rs:623:10 [INFO] [stdout] | [INFO] [stdout] 623 | .replace('*', "") [INFO] [stdout] | __________^ [INFO] [stdout] 624 | | .replace(':', "") [INFO] [stdout] 625 | | .replace('(', "") [INFO] [stdout] 626 | | .replace(')', "") [INFO] [stdout] 627 | | .replace('[', "") [INFO] [stdout] 628 | | .replace(']', "") [INFO] [stdout] | |_________________________^ help: replace with: `replace(['*', ':', '(', ')', '[', ']'], "")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] = note: `#[warn(clippy::collapsible_str_replace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/handlers/attack_feed.rs:80:5 [INFO] [stdout] | [INFO] [stdout] 80 | arcs.sort_by(|a, b| b.attack_count.cmp(&a.attack_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] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 80 - arcs.sort_by(|a, b| b.attack_count.cmp(&a.attack_count)); [INFO] [stdout] 80 + arcs.sort_by_key(|b| std::cmp::Reverse(b.attack_count)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> backend/src/services/severity.rs:60:68 [INFO] [stdout] | [INFO] [stdout] 60 | } else if s.contains("denial of service") || s.contains("dos") { [INFO] [stdout] | ____________________________________________________________________^ [INFO] [stdout] 61 | | 5.0 [INFO] [stdout] 62 | | } else { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> backend/src/services/severity.rs:62:12 [INFO] [stdout] | [INFO] [stdout] 62 | } else { [INFO] [stdout] | ____________^ [INFO] [stdout] 63 | | 5.0 [INFO] [stdout] 64 | | }; [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: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/github_poc.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 128 | result.sort_by(|a, b| b.stars.cmp(&a.stars)); [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] 128 - result.sort_by(|a, b| b.stars.cmp(&a.stars)); [INFO] [stdout] 128 + result.sort_by_key(|b| std::cmp::Reverse(b.stars)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> backend/src/services/attack_path.rs:98:1 [INFO] [stdout] | [INFO] [stdout] 98 | / pub fn build_attack_template( [INFO] [stdout] 99 | | category: &str, [INFO] [stdout] 100 | | summary: &str, [INFO] [stdout] 101 | | cvss: Option<&CvssComponents>, [INFO] [stdout] ... | [INFO] [stdout] 107 | | epss_score: f64, [INFO] [stdout] 108 | | ) -> AttackTemplate { [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (12/7) [INFO] [stdout] --> backend/src/services/attack_path.rs:127:1 [INFO] [stdout] | [INFO] [stdout] 127 | / pub fn build_attack_template_extended( [INFO] [stdout] 128 | | category: &str, [INFO] [stdout] 129 | | summary: &str, [INFO] [stdout] 130 | | cvss: Option<&CvssComponents>, [INFO] [stdout] ... | [INFO] [stdout] 139 | | nuclei_count: usize, [INFO] [stdout] 140 | | ) -> AttackTemplate { [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> backend/src/services/attack_path.rs:244:5 [INFO] [stdout] | [INFO] [stdout] 244 | prob.min(0.99).max(0.01) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `prob.clamp(0.01, 0.99)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::string::String` [INFO] [stdout] --> backend/src/handlers/ws.rs:27:46 [INFO] [stdout] | [INFO] [stdout] 27 | if sender.send(Message::Text(json.into())).await.is_err() { [INFO] [stdout] | ^^^^^^^^^^^ help: consider removing `.into()`: `json` [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: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> backend/src/services/attack_path.rs:849:9 [INFO] [stdout] | [INFO] [stdout] 849 | / edges.iter() [INFO] [stdout] 850 | | .filter(|e| e.target.starts_with("priv_")) [INFO] [stdout] 851 | | .last() [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 851 - .last() [INFO] [stdout] 851 + .next_back() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> backend/src/handlers/watchlist.rs:46:11 [INFO] [stdout] | [INFO] [stdout] 46 | .bind(&watch_type_str) [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `watch_type_str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> backend/src/handlers/watchlist.rs:309:11 [INFO] [stdout] | [INFO] [stdout] 309 | .bind(&alert_type_str) [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `alert_type_str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> backend/src/handlers/watchlist.rs:325:11 [INFO] [stdout] | [INFO] [stdout] 325 | .bind(&alert_type_str) [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `alert_type_str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> backend/src/handlers/watchlist.rs:330:11 [INFO] [stdout] | [INFO] [stdout] 330 | .bind(&severity_str) [INFO] [stdout] | ^^^^^^^^^^^^^ help: change this to: `severity_str` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking yew-router v0.18.0 [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> backend/src/services/pdf.rs:445:10 [INFO] [stdout] | [INFO] [stdout] 445 | .replace('\u{201C}', "\"") [INFO] [stdout] | __________^ [INFO] [stdout] 446 | | .replace('\u{201D}', "\"") [INFO] [stdout] | |__________________________________^ help: replace with: `replace(['\u{201C}', '\u{201D}'], "\"")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> backend/src/services/pdf.rs:443:10 [INFO] [stdout] | [INFO] [stdout] 443 | .replace('\u{2018}', "'") [INFO] [stdout] | __________^ [INFO] [stdout] 444 | | .replace('\u{2019}', "'") [INFO] [stdout] | |_________________________________^ help: replace with: `replace(['\u{2018}', '\u{2019}'], "'")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> backend/src/services/pdf.rs:439:10 [INFO] [stdout] | [INFO] [stdout] 439 | text.replace('\u{2013}', "-") [INFO] [stdout] | __________^ [INFO] [stdout] 440 | | .replace('\u{2014}', "-") [INFO] [stdout] 441 | | .replace('\u{2212}', "-") [INFO] [stdout] | |_________________________________^ help: replace with: `replace(['\u{2013}', '\u{2014}', '\u{2212}'], "-")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> backend/src/handlers/bulk.rs:513:30 [INFO] [stdout] | [INFO] [stdout] 513 | let parallel_limit = req.parallel_limit.unwrap_or(10).min(20).max(1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `req.parallel_limit.unwrap_or(10).clamp(1, 20)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> backend/src/handlers/bulk.rs:585:14 [INFO] [stdout] | [INFO] [stdout] 585 | .map(|s| shared::normalize_cve_id(s)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `shared::normalize_cve_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/poc_readme.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 62 | sorted.sort_by(|a, b| b.stars.cmp(&a.stars)); [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] 62 - sorted.sort_by(|a, b| b.stars.cmp(&a.stars)); [INFO] [stdout] 62 + sorted.sort_by_key(|b| std::cmp::Reverse(b.stars)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/handlers/attack_feed.rs:80:5 [INFO] [stdout] | [INFO] [stdout] 80 | arcs.sort_by(|a, b| b.attack_count.cmp(&a.attack_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] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 80 - arcs.sort_by(|a, b| b.attack_count.cmp(&a.attack_count)); [INFO] [stdout] 80 + arcs.sort_by_key(|b| std::cmp::Reverse(b.attack_count)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> backend/src/services/epss_tracker.rs:115:13 [INFO] [stdout] | [INFO] [stdout] 115 | days >= 6 && days <= 8 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: use: `(6..=8).contains(&days)` [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: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> backend/src/services/epss_tracker.rs:124:13 [INFO] [stdout] | [INFO] [stdout] 124 | days >= 28 && days <= 32 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(28..=32).contains(&days)` [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: this `if` has identical blocks [INFO] [stdout] --> backend/src/services/severity.rs:60:68 [INFO] [stdout] | [INFO] [stdout] 60 | } else if s.contains("denial of service") || s.contains("dos") { [INFO] [stdout] | ____________________________________________________________________^ [INFO] [stdout] 61 | | 5.0 [INFO] [stdout] 62 | | } else { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> backend/src/services/severity.rs:62:12 [INFO] [stdout] | [INFO] [stdout] 62 | } else { [INFO] [stdout] | ____________^ [INFO] [stdout] 63 | | 5.0 [INFO] [stdout] 64 | | }; [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: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/github_poc.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 128 | result.sort_by(|a, b| b.stars.cmp(&a.stars)); [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] 128 - result.sort_by(|a, b| b.stars.cmp(&a.stars)); [INFO] [stdout] 128 + result.sort_by_key(|b| std::cmp::Reverse(b.stars)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> backend/src/services/attack_path.rs:98:1 [INFO] [stdout] | [INFO] [stdout] 98 | / pub fn build_attack_template( [INFO] [stdout] 99 | | category: &str, [INFO] [stdout] 100 | | summary: &str, [INFO] [stdout] 101 | | cvss: Option<&CvssComponents>, [INFO] [stdout] ... | [INFO] [stdout] 107 | | epss_score: f64, [INFO] [stdout] 108 | | ) -> AttackTemplate { [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (12/7) [INFO] [stdout] --> backend/src/services/attack_path.rs:127:1 [INFO] [stdout] | [INFO] [stdout] 127 | / pub fn build_attack_template_extended( [INFO] [stdout] 128 | | category: &str, [INFO] [stdout] 129 | | summary: &str, [INFO] [stdout] 130 | | cvss: Option<&CvssComponents>, [INFO] [stdout] ... | [INFO] [stdout] 139 | | nuclei_count: usize, [INFO] [stdout] 140 | | ) -> AttackTemplate { [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> backend/src/services/attack_path.rs:244:5 [INFO] [stdout] | [INFO] [stdout] 244 | prob.min(0.99).max(0.01) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `prob.clamp(0.01, 0.99)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> backend/src/services/attack_path.rs:849:9 [INFO] [stdout] | [INFO] [stdout] 849 | / edges.iter() [INFO] [stdout] 850 | | .filter(|e| e.target.starts_with("priv_")) [INFO] [stdout] 851 | | .last() [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 851 - .last() [INFO] [stdout] 851 + .next_back() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> backend/src/services/pdf.rs:445:10 [INFO] [stdout] | [INFO] [stdout] 445 | .replace('\u{201C}', "\"") [INFO] [stdout] | __________^ [INFO] [stdout] 446 | | .replace('\u{201D}', "\"") [INFO] [stdout] | |__________________________________^ help: replace with: `replace(['\u{201C}', '\u{201D}'], "\"")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> backend/src/services/pdf.rs:443:10 [INFO] [stdout] | [INFO] [stdout] 443 | .replace('\u{2018}', "'") [INFO] [stdout] | __________^ [INFO] [stdout] 444 | | .replace('\u{2019}', "'") [INFO] [stdout] | |_________________________________^ help: replace with: `replace(['\u{2018}', '\u{2019}'], "'")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used consecutive `str::replace` call [INFO] [stdout] --> backend/src/services/pdf.rs:439:10 [INFO] [stdout] | [INFO] [stdout] 439 | text.replace('\u{2013}', "-") [INFO] [stdout] | __________^ [INFO] [stdout] 440 | | .replace('\u{2014}', "-") [INFO] [stdout] 441 | | .replace('\u{2212}', "-") [INFO] [stdout] | |_________________________________^ help: replace with: `replace(['\u{2013}', '\u{2014}', '\u{2212}'], "-")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_str_replace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/poc_readme.rs:62:5 [INFO] [stdout] | [INFO] [stdout] 62 | sorted.sort_by(|a, b| b.stars.cmp(&a.stars)); [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] 62 - sorted.sort_by(|a, b| b.stars.cmp(&a.stars)); [INFO] [stdout] 62 + sorted.sort_by_key(|b| std::cmp::Reverse(b.stars)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> backend/src/services/epss_tracker.rs:115:13 [INFO] [stdout] | [INFO] [stdout] 115 | days >= 6 && days <= 8 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: use: `(6..=8).contains(&days)` [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: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> backend/src/services/epss_tracker.rs:124:13 [INFO] [stdout] | [INFO] [stdout] 124 | days >= 28 && days <= 32 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(28..=32).contains(&days)` [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] [stderr] Checking frontend v0.1.0 (/opt/rustwide/workdir/frontend) [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/greynoise.rs:170:5 [INFO] [stdout] | [INFO] [stdout] 170 | top_countries.sort_by(|a, b| b.count.cmp(&a.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] 170 - top_countries.sort_by(|a, b| b.count.cmp(&a.count)); [INFO] [stdout] 170 + top_countries.sort_by_key(|b| std::cmp::Reverse(b.count)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/greynoise.rs:170:5 [INFO] [stdout] | [INFO] [stdout] 170 | top_countries.sort_by(|a, b| b.count.cmp(&a.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] 170 - top_countries.sort_by(|a, b| b.count.cmp(&a.count)); [INFO] [stdout] 170 + top_countries.sort_by_key(|b| std::cmp::Reverse(b.count)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> backend/src/services/resilience.rs:25:1 [INFO] [stdout] | [INFO] [stdout] 25 | / impl Default for CircuitState { [INFO] [stdout] 26 | | fn default() -> Self { [INFO] [stdout] 27 | | CircuitState::Closed [INFO] [stdout] 28 | | } [INFO] [stdout] 29 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 16 + #[derive(Default)] [INFO] [stdout] 17 | pub enum CircuitState { [INFO] [stdout] 18 | /// Normal operation - requests flow through [INFO] [stdout] 19 ~ #[default] [INFO] [stdout] 20 ~ Closed, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> backend/src/services/resilience.rs:25:1 [INFO] [stdout] | [INFO] [stdout] 25 | / impl Default for CircuitState { [INFO] [stdout] 26 | | fn default() -> Self { [INFO] [stdout] 27 | | CircuitState::Closed [INFO] [stdout] 28 | | } [INFO] [stdout] 29 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 16 + #[derive(Default)] [INFO] [stdout] 17 | pub enum CircuitState { [INFO] [stdout] 18 | /// Normal operation - requests flow through [INFO] [stdout] 19 ~ #[default] [INFO] [stdout] 20 ~ Closed, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/attack_feed.rs:389:5 [INFO] [stdout] | [INFO] [stdout] 389 | stats.sort_by(|a, b| b.attack_count.cmp(&a.attack_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] 389 - stats.sort_by(|a, b| b.attack_count.cmp(&a.attack_count)); [INFO] [stdout] 389 + stats.sort_by_key(|b| std::cmp::Reverse(b.attack_count)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/ioc_correlator.rs:109:5 [INFO] [stdout] | [INFO] [stdout] 109 | correlated.sort_by(|a, b| b.sources.len().cmp(&a.sources.len())); [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] 109 - correlated.sort_by(|a, b| b.sources.len().cmp(&a.sources.len())); [INFO] [stdout] 109 + correlated.sort_by_key(|b| std::cmp::Reverse(b.sources.len())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/attack_feed.rs:389:5 [INFO] [stdout] | [INFO] [stdout] 389 | stats.sort_by(|a, b| b.attack_count.cmp(&a.attack_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] 389 - stats.sort_by(|a, b| b.attack_count.cmp(&a.attack_count)); [INFO] [stdout] 389 + stats.sort_by_key(|b| std::cmp::Reverse(b.attack_count)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> backend/src/services/ioc_correlator.rs:109:5 [INFO] [stdout] | [INFO] [stdout] 109 | correlated.sort_by(|a, b| b.sources.len().cmp(&a.sources.len())); [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] 109 - correlated.sort_by(|a, b| b.sources.len().cmp(&a.sources.len())); [INFO] [stdout] 109 + correlated.sort_by_key(|b| std::cmp::Reverse(b.sources.len())); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_heatmap` is never used [INFO] [stdout] --> frontend/src/bindings/leaflet.rs:117:8 [INFO] [stdout] | [INFO] [stdout] 117 | pub fn update_heatmap(map: &JsValue, points_json: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_epss_history` is never used [INFO] [stdout] --> frontend/src/services/api.rs:214:14 [INFO] [stdout] | [INFO] [stdout] 214 | pub async fn get_epss_history(cve_id: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_source_health` is never used [INFO] [stdout] --> frontend/src/services/api.rs:231:14 [INFO] [stdout] | [INFO] [stdout] 231 | pub async fn get_source_health() -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_cache_stats` is never used [INFO] [stdout] --> frontend/src/services/api.rs:246:14 [INFO] [stdout] | [INFO] [stdout] 246 | pub async fn get_cache_stats() -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `bulk_analyze` is never used [INFO] [stdout] --> frontend/src/services/api.rs:263:14 [INFO] [stdout] | [INFO] [stdout] 263 | pub async fn bulk_analyze(cve_ids: Vec) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_bulk_job` is never used [INFO] [stdout] --> frontend/src/services/api.rs:282:14 [INFO] [stdout] | [INFO] [stdout] 282 | pub async fn get_bulk_job(job_id: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/app.rs:30:29 [INFO] [stdout] | [INFO] [stdout] 30 | let history = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/app.rs:31:33 [INFO] [stdout] | [INFO] [stdout] 31 | let kev_entries = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/app.rs:36:28 [INFO] [stdout] | [INFO] [stdout] 36 | let toasts = use_state(|| VecDeque::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `VecDeque::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_heatmap` is never used [INFO] [stdout] --> frontend/src/bindings/leaflet.rs:117:8 [INFO] [stdout] | [INFO] [stdout] 117 | pub fn update_heatmap(map: &JsValue, points_json: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_epss_history` is never used [INFO] [stdout] --> frontend/src/services/api.rs:214:14 [INFO] [stdout] | [INFO] [stdout] 214 | pub async fn get_epss_history(cve_id: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_source_health` is never used [INFO] [stdout] --> frontend/src/services/api.rs:231:14 [INFO] [stdout] | [INFO] [stdout] 231 | pub async fn get_source_health() -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> frontend/src/bindings/cytoscape.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | / if container.is_none() { [INFO] [stdout] 19 | | return None; [INFO] [stdout] 20 | | } [INFO] [stdout] | |_____^ help: replace it with: `container.as_ref()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_cache_stats` is never used [INFO] [stdout] --> frontend/src/services/api.rs:246:14 [INFO] [stdout] | [INFO] [stdout] 246 | pub async fn get_cache_stats() -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> frontend/src/bindings/leaflet.rs:85:22 [INFO] [stdout] | [INFO] [stdout] 85 | let radius = ((count as f64).sqrt() * 5.0).max(4.0).min(40.0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `((count as f64).sqrt() * 5.0).clamp(4.0, 40.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `bulk_analyze` is never used [INFO] [stdout] --> frontend/src/services/api.rs:263:14 [INFO] [stdout] | [INFO] [stdout] 263 | pub async fn bulk_analyze(cve_ids: Vec) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_bulk_job` is never used [INFO] [stdout] --> frontend/src/services/api.rs:282:14 [INFO] [stdout] | [INFO] [stdout] 282 | pub async fn get_bulk_job(job_id: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/app.rs:30:29 [INFO] [stdout] | [INFO] [stdout] 30 | let history = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/app.rs:31:33 [INFO] [stdout] | [INFO] [stdout] 31 | let kev_entries = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/app.rs:36:28 [INFO] [stdout] | [INFO] [stdout] 36 | let toasts = use_state(|| VecDeque::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `VecDeque::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/search_bar.rs:14:33 [INFO] [stdout] | [INFO] [stdout] 14 | let input_value = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block may be rewritten with the `?` operator [INFO] [stdout] --> frontend/src/bindings/cytoscape.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | / if container.is_none() { [INFO] [stdout] 19 | | return None; [INFO] [stdout] 20 | | } [INFO] [stdout] | |_____^ help: replace it with: `container.as_ref()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> frontend/src/bindings/leaflet.rs:85:22 [INFO] [stdout] | [INFO] [stdout] 85 | let radius = ((count as f64).sqrt() * 5.0).max(4.0).min(40.0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `((count as f64).sqrt() * 5.0).clamp(4.0, 40.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/search_bar.rs:14:33 [INFO] [stdout] | [INFO] [stdout] 14 | let input_value = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/history_page.rs:15:26 [INFO] [stdout] | [INFO] [stdout] 15 | let cves = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> frontend/src/components/history_page.rs:149:23 [INFO] [stdout] | [INFO] [stdout] 149 | let total_pages = ((*total).max(1) + PAGE_SIZE - 1) / PAGE_SIZE; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `(*total).max(1).div_ceil(PAGE_SIZE)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/history_page.rs:15:26 [INFO] [stdout] | [INFO] [stdout] 15 | let cves = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> frontend/src/components/history_page.rs:149:23 [INFO] [stdout] | [INFO] [stdout] 149 | let total_pages = ((*total).max(1) + PAGE_SIZE - 1) / PAGE_SIZE; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `(*total).max(1).div_ceil(PAGE_SIZE)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:19:27 [INFO] [stdout] | [INFO] [stdout] 19 | let query = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:22:28 [INFO] [stdout] | [INFO] [stdout] 22 | let vendor = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:24:30 [INFO] [stdout] | [INFO] [stdout] 24 | let cvss_min = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:25:30 [INFO] [stdout] | [INFO] [stdout] 25 | let cvss_max = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:26:30 [INFO] [stdout] | [INFO] [stdout] 26 | let epss_min = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:27:30 [INFO] [stdout] | [INFO] [stdout] 27 | let epss_max = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:28:37 [INFO] [stdout] | [INFO] [stdout] 28 | let published_after = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:29:38 [INFO] [stdout] | [INFO] [stdout] 29 | let published_before = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:33:29 [INFO] [stdout] | [INFO] [stdout] 33 | let sort_by = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:19:27 [INFO] [stdout] | [INFO] [stdout] 19 | let query = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:22:28 [INFO] [stdout] | [INFO] [stdout] 22 | let vendor = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:24:30 [INFO] [stdout] | [INFO] [stdout] 24 | let cvss_min = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:25:30 [INFO] [stdout] | [INFO] [stdout] 25 | let cvss_max = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:26:30 [INFO] [stdout] | [INFO] [stdout] 26 | let epss_min = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:27:30 [INFO] [stdout] | [INFO] [stdout] 27 | let epss_max = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:28:37 [INFO] [stdout] | [INFO] [stdout] 28 | let published_after = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:29:38 [INFO] [stdout] | [INFO] [stdout] 29 | let published_before = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/advanced_search.rs:33:29 [INFO] [stdout] | [INFO] [stdout] 33 | let sort_by = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/watch_list.rs:20:33 [INFO] [stdout] | [INFO] [stdout] 20 | let watch_items = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/watch_list.rs:21:28 [INFO] [stdout] | [INFO] [stdout] 21 | let alerts = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/watch_list.rs:29:31 [INFO] [stdout] | [INFO] [stdout] 29 | let new_value = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/watch_list.rs:30:31 [INFO] [stdout] | [INFO] [stdout] 30 | let new_label = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> frontend/src/components/watch_list.rs:328:1 [INFO] [stdout] | [INFO] [stdout] 328 | / fn render_watch_items( [INFO] [stdout] 329 | | items: &[WatchItem], [INFO] [stdout] 330 | | on_delete: Callback, [INFO] [stdout] 331 | | on_add: Callback, [INFO] [stdout] ... | [INFO] [stdout] 337 | | on_label_input: Callback, [INFO] [stdout] 338 | | ) -> Html { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/watch_list.rs:20:33 [INFO] [stdout] | [INFO] [stdout] 20 | let watch_items = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/watch_list.rs:21:28 [INFO] [stdout] | [INFO] [stdout] 21 | let alerts = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/watch_list.rs:29:31 [INFO] [stdout] | [INFO] [stdout] 29 | let new_value = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/watch_list.rs:30:31 [INFO] [stdout] | [INFO] [stdout] 30 | let new_label = use_state(|| String::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `String::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> frontend/src/components/watch_list.rs:328:1 [INFO] [stdout] | [INFO] [stdout] 328 | / fn render_watch_items( [INFO] [stdout] 329 | | items: &[WatchItem], [INFO] [stdout] 330 | | on_delete: Callback, [INFO] [stdout] 331 | | on_add: Callback, [INFO] [stdout] ... | [INFO] [stdout] 337 | | on_label_input: Callback, [INFO] [stdout] 338 | | ) -> Html { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/source_health.rs:6:29 [INFO] [stdout] | [INFO] [stdout] 6 | let sources = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this manual char comparison can be written more succinctly [INFO] [stdout] --> frontend/src/components/bulk_analysis.rs:27:52 [INFO] [stdout] | [INFO] [stdout] 27 | let cve_ids: Vec = input.split(|c: char| c == '\n' || c == ',') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using an array of `char`: `['\n', ',']` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_pattern_char_comparison [INFO] [stdout] = note: `#[warn(clippy::manual_pattern_char_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> frontend/src/components/bulk_analysis.rs:88:88 [INFO] [stdout] | [INFO] [stdout] 88 | ...
0 { (processed * 100) / total } else { 0 })} /> [INFO] [stdout] | ^^^^^^^^^ ------------------------- division performed here [INFO] [stdout] | | [INFO] [stdout] | check performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] = note: `#[warn(clippy::manual_checked_ops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> frontend/src/services/api.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 6 | let origin = location.origin().unwrap_or_default(); [INFO] [stdout] | --------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 7 | origin [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 6 ~ [INFO] [stdout] 7 ~ location.origin().unwrap_or_default() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> frontend/src/components/source_health.rs:6:29 [INFO] [stdout] | [INFO] [stdout] 6 | let sources = use_state(|| Vec::::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Vec::::new` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this manual char comparison can be written more succinctly [INFO] [stdout] --> frontend/src/components/bulk_analysis.rs:27:52 [INFO] [stdout] | [INFO] [stdout] 27 | let cve_ids: Vec = input.split(|c: char| c == '\n' || c == ',') [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using an array of `char`: `['\n', ',']` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_pattern_char_comparison [INFO] [stdout] = note: `#[warn(clippy::manual_pattern_char_comparison)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> frontend/src/components/bulk_analysis.rs:88:88 [INFO] [stdout] | [INFO] [stdout] 88 | ...
0 { (processed * 100) / total } else { 0 })} /> [INFO] [stdout] | ^^^^^^^^^ ------------------------- division performed here [INFO] [stdout] | | [INFO] [stdout] | check performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] = note: `#[warn(clippy::manual_checked_ops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> frontend/src/services/api.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 6 | let origin = location.origin().unwrap_or_default(); [INFO] [stdout] | --------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 7 | origin [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 6 ~ [INFO] [stdout] 7 ~ location.origin().unwrap_or_default() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 19s [INFO] running `Command { std: "docker" "inspect" "e1ed688de95e04539079266211a230381bd8aa35c15b897a5dd5a85ab05b84b0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e1ed688de95e04539079266211a230381bd8aa35c15b897a5dd5a85ab05b84b0", kill_on_drop: false }` [INFO] [stdout] e1ed688de95e04539079266211a230381bd8aa35c15b897a5dd5a85ab05b84b0