[INFO] cloning repository https://github.com/deltaheiwa/mif-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/deltaheiwa/mif-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdeltaheiwa%2Fmif-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdeltaheiwa%2Fmif-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 0388af01deda65c903d6d39f47e6eb373d7d4fc3 [INFO] linting deltaheiwa/mif-rs against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdeltaheiwa%2Fmif-rs" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/deltaheiwa/mif-rs [INFO] finished tweaking git repo https://github.com/deltaheiwa/mif-rs [INFO] tweaked toml for git repo https://github.com/deltaheiwa/mif-rs written to /workspace/builds/worker-3-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/deltaheiwa/mif-rs on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/deltaheiwa/mif-rs already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded charts-rs-derive v0.2.4 [INFO] [stderr] Downloaded unicode-bidi-mirroring v0.4.0 [INFO] [stderr] Downloaded levenshtein v1.0.5 [INFO] [stderr] Downloaded typemap_rev v0.3.0 [INFO] [stderr] Downloaded cargo_metadata v0.14.2 [INFO] [stderr] Downloaded poise_macros v0.6.1 [INFO] [stderr] Downloaded base62 v2.0.3 [INFO] [stderr] Downloaded rust-i18n-support v3.1.5 [INFO] [stderr] Downloaded unicode-ccc v0.4.0 [INFO] [stderr] Downloaded substring v1.4.5 [INFO] [stderr] Downloaded lru v0.16.0 [INFO] [stderr] Downloaded rust-i18n-macro v3.1.5 [INFO] [stderr] Downloaded rust-i18n v3.1.5 [INFO] [stderr] Downloaded snafu-derive v0.8.6 [INFO] [stderr] Downloaded croner v3.0.0 [INFO] [stderr] Downloaded snafu v0.8.6 [INFO] [stderr] Downloaded resvg v0.45.1 [INFO] [stderr] Downloaded sqlx-mysql v0.8.2 [INFO] [stderr] Downloaded fontdb v0.23.0 [INFO] [stderr] Downloaded sqlx v0.8.2 [INFO] [stderr] Downloaded objc2-io-kit v0.3.1 [INFO] [stderr] Downloaded charts-rs v0.3.24 [INFO] [stderr] Downloaded reqwest v0.12.20 [INFO] [stderr] Downloaded webpki-roots v0.26.6 [INFO] [stderr] Downloaded sysinfo v0.36.0 [INFO] [stderr] Downloaded usvg v0.45.1 [INFO] [stderr] Downloaded rustybuzz v0.20.1 [INFO] [stderr] Downloaded rustls v0.23.16 [INFO] [stderr] Downloaded rustls v0.22.4 [INFO] [stderr] Downloaded poise v0.6.1 [INFO] [stderr] Downloaded sqlx-postgres v0.8.2 [INFO] [stderr] Downloaded sqlx-core v0.8.2 [INFO] [stderr] Downloaded bstr v1.10.0 [INFO] [stderr] Downloaded tokio-rustls v0.25.0 [INFO] [stderr] Downloaded mini-moka v0.10.3 [INFO] [stderr] Downloaded serenity v0.12.4 [INFO] [stderr] Downloaded logfather v0.2.6 [INFO] [stderr] Downloaded sqlx-sqlite v0.8.2 [INFO] [stderr] Downloaded tokio-cron-scheduler v0.14.0 [INFO] [stderr] Downloaded normpath v1.3.0 [INFO] [stderr] Downloaded skeptic v0.13.7 [INFO] [stderr] Downloaded sqlx-macros-core v0.8.2 [INFO] [stderr] Downloaded dekor v0.2.2 [INFO] [stderr] Downloaded simplicio v0.1.3 [INFO] [stderr] Downloaded typesize-derive v0.1.10 [INFO] [stderr] Downloaded command_attr v0.5.3 [INFO] [stderr] Downloaded serde_cow v0.1.2 [INFO] [stderr] Downloaded unicase v2.8.0 [INFO] [stderr] Downloaded typesize v0.1.10 [INFO] [stderr] Downloaded sqlx-macros v0.8.2 [INFO] [stderr] Downloaded windows v0.61.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] 26a40e470451434ed225fcb7506cbee4f655ca7f6c4c885ffc869adcc5ee1e95 [INFO] running `Command { std: "docker" "start" "-a" "26a40e470451434ed225fcb7506cbee4f655ca7f6c4c885ffc869adcc5ee1e95", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "26a40e470451434ed225fcb7506cbee4f655ca7f6c4c885ffc869adcc5ee1e95", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "26a40e470451434ed225fcb7506cbee4f655ca7f6c4c885ffc869adcc5ee1e95", kill_on_drop: false }` [INFO] [stdout] 26a40e470451434ed225fcb7506cbee4f655ca7f6c4c885ffc869adcc5ee1e95 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] 0e95144e39e0e2eb498452da15e3815f768b46d7e3eb0b44469cb44b573289bf [INFO] running `Command { std: "docker" "start" "-a" "0e95144e39e0e2eb498452da15e3815f768b46d7e3eb0b44469cb44b573289bf", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.95 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Checking smallvec v1.15.1 [INFO] [stderr] Compiling libm v0.2.11 [INFO] [stderr] Checking pin-project-lite v0.2.15 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling cc v1.2.0 [INFO] [stderr] Checking getrandom v0.2.15 [INFO] [stderr] Checking signal-hook-registry v1.4.2 [INFO] [stderr] Checking socket2 v0.5.10 [INFO] [stderr] Checking mio v1.0.2 [INFO] [stderr] Checking spin v0.9.8 [INFO] [stderr] Checking parking_lot_core v0.9.10 [INFO] [stderr] Checking allocator-api2 v0.2.20 [INFO] [stderr] Checking foldhash v0.1.3 [INFO] [stderr] Checking parking_lot v0.12.3 [INFO] [stderr] Checking tracing-core v0.1.32 [INFO] [stderr] Checking litemap v0.7.3 [INFO] [stderr] Checking rustls-pki-types v1.10.0 [INFO] [stderr] Checking bytemuck v1.19.0 [INFO] [stderr] Checking hashbrown v0.15.2 [INFO] [stderr] Checking http v1.2.0 [INFO] [stderr] Checking miniz_oxide v0.8.0 [INFO] [stderr] Checking getrandom v0.3.3 [INFO] [stderr] Compiling serde_json v1.0.140 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling crossbeam-utils v0.8.20 [INFO] [stderr] Compiling aho-corasick v1.1.3 [INFO] [stderr] Compiling syn v2.0.104 [INFO] [stderr] Checking flate2 v1.0.34 [INFO] [stderr] Checking indexmap v2.6.0 [INFO] [stderr] Compiling ring v0.17.8 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Checking core_maths v0.1.1 [INFO] [stderr] Checking cpufeatures v0.2.15 [INFO] [stderr] Checking ttf-parser v0.25.1 [INFO] [stderr] Checking num-bigint v0.4.6 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking webpki-roots v0.26.6 [INFO] [stderr] Compiling crossbeam-epoch v0.9.18 [INFO] [stderr] Compiling bstr v1.10.0 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Compiling regex-automata v0.4.9 [INFO] [stderr] Compiling anyhow v1.0.95 [INFO] [stderr] Checking num-rational v0.4.2 [INFO] [stderr] Compiling rustls v0.23.16 [INFO] [stderr] Compiling log v0.4.22 [INFO] [stderr] Compiling crossbeam-deque v0.8.5 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking http v0.2.12 [INFO] [stderr] Compiling rustversion v1.0.19 [INFO] [stderr] Compiling built v0.7.5 [INFO] [stderr] Checking ipnet v2.10.1 [INFO] [stderr] Checking aligned-vec v0.5.0 [INFO] [stderr] Compiling rustls v0.22.4 [INFO] [stderr] Checking v_frame v0.3.8 [INFO] [stderr] Compiling rav1e v0.7.1 [INFO] [stderr] Checking fdeflate v0.3.6 [INFO] [stderr] Compiling slotmap v1.0.7 [INFO] [stderr] Compiling rustls v0.21.12 [INFO] [stderr] Compiling unicase v2.8.0 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling globset v0.4.15 [INFO] [stderr] Checking png v0.17.14 [INFO] [stderr] Compiling mime_guess v2.0.5 [INFO] [stderr] Compiling ignore v0.4.23 [INFO] [stderr] Compiling regex v1.11.1 [INFO] [stderr] Checking http-body v0.4.6 [INFO] [stderr] Compiling simd_helpers v0.1.0 [INFO] [stderr] Compiling synstructure v0.13.1 [INFO] [stderr] Compiling darling_core v0.20.10 [INFO] [stderr] Checking rustls-webpki v0.102.8 [INFO] [stderr] Checking sct v0.7.1 [INFO] [stderr] Checking rustls-webpki v0.101.7 [INFO] [stderr] Compiling globwalk v0.8.1 [INFO] [stderr] Checking rgb v0.8.50 [INFO] [stderr] Checking sync_wrapper v1.0.1 [INFO] [stderr] Checking imgref v1.11.0 [INFO] [stderr] Checking weezl v0.1.8 [INFO] [stderr] Compiling noop_proc_macro v0.3.0 [INFO] [stderr] Checking bitstream-io v2.6.0 [INFO] [stderr] Compiling winnow v0.6.20 [INFO] [stderr] Checking new_debug_unreachable v1.0.6 [INFO] [stderr] Checking loop9 v0.1.5 [INFO] [stderr] Checking tiny-skia-path v0.11.4 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Checking tinyvec v1.8.0 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling tokio-macros v2.5.0 [INFO] [stderr] Compiling zerofrom-derive v0.1.4 [INFO] [stderr] Checking tokio v1.43.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling yoke-derive v0.7.4 [INFO] [stderr] Compiling zerovec-derive v0.10.3 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Compiling tracing-attributes v0.1.27 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Checking zerofrom v0.1.4 [INFO] [stderr] Checking yoke v0.7.4 [INFO] [stderr] Compiling icu_provider_macros v1.5.0 [INFO] [stderr] Compiling zerocopy-derive v0.7.35 [INFO] [stderr] Checking zerovec v0.10.4 [INFO] [stderr] Compiling darling_macro v0.20.10 [INFO] [stderr] Compiling darling v0.20.10 [INFO] [stderr] Compiling num-derive v0.4.2 [INFO] [stderr] Checking zerocopy v0.7.35 [INFO] [stderr] Checking tracing v0.1.40 [INFO] [stderr] Compiling profiling-procmacros v1.0.16 [INFO] [stderr] Checking profiling v1.0.16 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Compiling arg_enum_proc_macro v0.3.4 [INFO] [stderr] Checking tinystr v0.7.6 [INFO] [stderr] Checking icu_collections v1.5.0 [INFO] [stderr] Checking icu_locid v1.5.0 [INFO] [stderr] Checking ppv-lite86 v0.2.20 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking num-complex v0.4.6 [INFO] [stderr] Checking safe_arch v0.7.4 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking zune-inflate v0.2.54 [INFO] [stderr] Checking icu_provider v1.5.0 [INFO] [stderr] Checking concurrent-queue v2.5.0 [INFO] [stderr] Checking half v2.4.1 [INFO] [stderr] Checking icu_locid_transform v1.5.0 [INFO] [stderr] Compiling matrixmultiply v0.3.9 [INFO] [stderr] Compiling unsafe-libyaml v0.2.11 [INFO] [stderr] Checking crc-catalog v2.4.0 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking bit_field v0.10.2 [INFO] [stderr] Checking unicode-bidi-mirroring v0.4.0 [INFO] [stderr] Checking lebe v0.5.2 [INFO] [stderr] Compiling arc-swap v1.7.1 [INFO] [stderr] Checking icu_properties v1.5.1 [INFO] [stderr] Checking unicode-ccc v0.4.0 [INFO] [stderr] Checking tokio-util v0.7.15 [INFO] [stderr] Checking hyper v1.6.0 [INFO] [stderr] Checking tokio-rustls v0.24.1 [INFO] [stderr] Checking data-encoding v2.6.0 [INFO] [stderr] Checking h2 v0.3.26 [INFO] [stderr] Checking unicode_categories v0.1.1 [INFO] [stderr] Checking jpeg-decoder v0.3.1 [INFO] [stderr] Compiling either v1.13.0 [INFO] [stderr] Checking event-listener v5.3.1 [INFO] [stderr] Checking tiff v0.9.1 [INFO] [stderr] Compiling itertools v0.11.0 [INFO] [stderr] Checking rustybuzz v0.20.1 [INFO] [stderr] Checking icu_normalizer v1.5.0 [INFO] [stderr] Checking arrayvec v0.7.6 [INFO] [stderr] Checking idna_adapter v1.2.0 [INFO] [stderr] Checking idna v1.0.3 [INFO] [stderr] Checking chrono v0.4.39 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking rayon v1.10.0 [INFO] [stderr] Checking url v2.5.3 [INFO] [stderr] Checking av1-grain v0.2.3 [INFO] [stderr] Compiling toml_datetime v0.6.8 [INFO] [stderr] Compiling serde_spanned v0.6.8 [INFO] [stderr] Checking itertools v0.12.1 [INFO] [stderr] Compiling toml_edit v0.22.22 [INFO] [stderr] Checking kurbo v0.11.2 [INFO] [stderr] Checking hyper v0.14.31 [INFO] [stderr] Checking avif-serialize v0.8.2 [INFO] [stderr] Checking tungstenite v0.21.0 [INFO] [stderr] Checking svgtypes v0.15.3 [INFO] [stderr] Compiling serde_yaml v0.9.34+deprecated [INFO] [stderr] Compiling triomphe v0.1.14 [INFO] [stderr] Checking deranged v0.3.11 [INFO] [stderr] Checking maybe-rayon v0.1.1 [INFO] [stderr] Checking hyper-util v0.1.14 [INFO] [stderr] Checking sqlformat v0.2.6 [INFO] [stderr] Checking tower v0.5.2 [INFO] [stderr] Checking tokio-rustls v0.25.0 [INFO] [stderr] Compiling toml v0.8.19 [INFO] [stderr] Checking tokio-stream v0.1.16 [INFO] [stderr] Checking exr v1.73.0 [INFO] [stderr] Checking image-webp v0.2.0 [INFO] [stderr] Checking gif v0.13.1 [INFO] [stderr] Checking zune-jpeg v0.4.13 [INFO] [stderr] Checking crc v3.2.1 [INFO] [stderr] Checking http-body-util v0.1.2 [INFO] [stderr] Checking hyper-rustls v0.24.2 [INFO] [stderr] Checking wide v0.7.30 [INFO] [stderr] Compiling derive_builder_core v0.20.2 [INFO] [stderr] Checking fontdb v0.23.0 [INFO] [stderr] Checking hashlink v0.9.1 [INFO] [stderr] Checking sha2 v0.10.8 [INFO] [stderr] Checking approx v0.5.1 [INFO] [stderr] Checking atoi v2.0.0 [INFO] [stderr] Checking rustls-pemfile v2.2.0 [INFO] [stderr] Checking qoi v0.4.1 [INFO] [stderr] Checking futures-intrusive v0.5.0 [INFO] [stderr] Checking crossbeam-queue v0.3.11 [INFO] [stderr] Checking simplecss v0.2.2 [INFO] [stderr] Compiling substring v1.4.5 [INFO] [stderr] Compiling normpath v1.3.0 [INFO] [stderr] Compiling serenity v0.12.4 [INFO] [stderr] Compiling siphasher v1.0.1 [INFO] [stderr] Checking unicode-ident v1.0.13 [INFO] [stderr] Compiling base62 v2.0.3 [INFO] [stderr] Compiling lazy_static v1.5.0 [INFO] [stderr] Compiling thiserror v2.0.12 [INFO] [stderr] Checking pico-args v0.5.0 [INFO] [stderr] Checking xmlwriter v0.1.0 [INFO] [stderr] Checking data-url v0.3.1 [INFO] [stderr] Checking imagesize v0.13.0 [INFO] [stderr] Checking rawpointer v0.2.1 [INFO] [stderr] Compiling protobuf v3.7.2 [INFO] [stderr] Checking unicode-bidi v0.3.17 [INFO] [stderr] Checking unicode-vo v0.1.0 [INFO] [stderr] Compiling rust-i18n-support v3.1.5 [INFO] [stderr] Checking reqwest v0.11.27 [INFO] [stderr] Checking usvg v0.45.1 [INFO] [stderr] Checking time v0.3.36 [INFO] [stderr] Checking simba v0.8.1 [INFO] [stderr] Checking ravif v0.11.11 [INFO] [stderr] Checking sqlx-core v0.8.2 [INFO] [stderr] Checking image v0.25.6 [INFO] [stderr] Compiling derive_builder_macro v0.20.2 [INFO] [stderr] Checking tokio-tungstenite v0.21.0 [INFO] [stderr] Compiling command_attr v0.5.3 [INFO] [stderr] Checking tiny-skia v0.11.4 [INFO] [stderr] Checking secrecy v0.8.0 [INFO] [stderr] Checking dashmap v5.5.3 [INFO] [stderr] Checking serde_cow v0.1.2 [INFO] [stderr] Checking tokio-rustls v0.26.0 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking protobuf-support v3.7.2 [INFO] [stderr] Compiling strum_macros v0.27.1 [INFO] [stderr] Compiling snafu-derive v0.8.6 [INFO] [stderr] Compiling thiserror-impl v2.0.12 [INFO] [stderr] Compiling async-trait v0.1.83 [INFO] [stderr] Compiling rust-i18n v3.1.5 [INFO] [stderr] Checking owned_ttf_parser v0.25.0 [INFO] [stderr] Checking num-iter v0.1.45 [INFO] [stderr] Checking fxhash v0.2.1 [INFO] [stderr] Checking flume v0.11.1 [INFO] [stderr] Checking ttf-parser v0.21.1 [INFO] [stderr] Compiling glob v0.3.1 [INFO] [stderr] Compiling prometheus v0.14.0 [INFO] [stderr] Compiling tokio-cron-scheduler v0.14.0 [INFO] [stderr] Checking levenshtein v1.0.5 [INFO] [stderr] Checking typemap_rev v0.3.0 [INFO] [stderr] Checking ab_glyph_rasterizer v0.1.8 [INFO] [stderr] Checking uwl v0.6.0 [INFO] [stderr] Checking iri-string v0.7.8 [INFO] [stderr] Checking ab_glyph v0.2.29 [INFO] [stderr] Checking snafu v0.8.6 [INFO] [stderr] Compiling rust-i18n-macro v3.1.5 [INFO] [stderr] Checking num v0.4.3 [INFO] [stderr] Checking strum v0.27.1 [INFO] [stderr] Checking resvg v0.45.1 [INFO] [stderr] Checking nalgebra v0.32.6 [INFO] [stderr] Checking fontdue v0.9.3 [INFO] [stderr] Checking hyper-rustls v0.27.3 [INFO] [stderr] Checking derive_builder v0.20.2 [INFO] [stderr] Checking axum-core v0.5.0 [INFO] [stderr] Compiling derivative v2.2.0 [INFO] [stderr] Checking croner v2.2.0 [INFO] [stderr] Checking tower-http v0.6.6 [INFO] [stderr] Checking serde_path_to_error v0.1.16 [INFO] [stderr] Checking rand_distr v0.4.3 [INFO] [stderr] Compiling poise_macros v0.6.1 [INFO] [stderr] Compiling charts-rs-derive v0.2.4 [INFO] [stderr] Checking uuid v1.17.0 [INFO] [stderr] Checking webpki-roots v1.0.1 [INFO] [stderr] Checking matchit v0.8.4 [INFO] [stderr] Checking dekor v0.2.2 [INFO] [stderr] Checking simplicio v0.1.3 [INFO] [stderr] Checking logfather v0.2.6 [INFO] [stderr] Checking reqwest v0.12.20 [INFO] [stderr] Checking axum v0.8.1 [INFO] [stderr] Checking charts-rs v0.3.24 [INFO] [stderr] Checking croner v3.0.0 [INFO] [stderr] Checking lru v0.16.0 [INFO] [stderr] Checking sysinfo v0.36.0 [INFO] [stderr] Checking dotenvy v0.15.7 [INFO] [stderr] Checking sqlx-sqlite v0.8.2 [INFO] [stderr] Checking sqlx v0.8.2 [INFO] [stderr] Checking imageproc v0.25.0 [INFO] [stderr] Checking poise v0.6.1 [INFO] [stderr] Checking mif v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `info` [INFO] [stdout] --> src/bot/background/crons.rs:2:24 [INFO] [stdout] | [INFO] [stdout] 2 | use logfather::{debug, info}; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `info` [INFO] [stdout] --> src/bot/background/crons.rs:2:24 [INFO] [stdout] | [INFO] [stdout] 2 | use logfather::{debug, info}; [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/bot/handlers/mod.rs:78:13 [INFO] [stdout] | [INFO] [stdout] 78 | / if is_new.unwrap_or(true) { [INFO] [stdout] 79 | | let pool = &data.db_pool; [INFO] [stdout] 80 | | let prefix_cache = &data.prefix_cache; [INFO] [stdout] ... | [INFO] [stdout] 87 | | prefix_cache.lock().await.put(guild.id.get().to_string(), ".".to_string()); [INFO] [stdout] 88 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 77 ~ serenity::FullEvent::GuildCreate { guild, is_new, .. } [INFO] [stdout] 78 ~ if is_new.unwrap_or(true) => { [INFO] [stdout] 79 | let pool = &data.db_pool; [INFO] [stdout] ... [INFO] [stdout] 87 | prefix_cache.lock().await.put(guild.id.get().to_string(), ".".to_string()); [INFO] [stdout] 88 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | format!("{}", user.name), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `user.name.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:62:13 [INFO] [stdout] | [INFO] [stdout] 62 | format!("{}", nickname), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `nickname.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:75:9 [INFO] [stdout] | [INFO] [stdout] 75 | format!("{}", time::get_relative_timestamp(&user.created_at().timestamp())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `time::get_relative_timestamp(&user.created_at().timestamp()).to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:91:13 [INFO] [stdout] | [INFO] [stdout] 91 | format!("{}", time::get_relative_timestamp(&joined_at.timestamp())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `time::get_relative_timestamp(&joined_at.timestamp()).to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | format!("{}", presence.status.name()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `presence.status.name().to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/bot/commands/informative/help.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 19 | if let Some(_) = command { [INFO] [stdout] | -------^^^^^^^---------- help: try: `if command.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's keys [INFO] [stdout] --> src/bot/commands/informative/help.rs:36:26 [INFO] [stdout] | [INFO] [stdout] 36 | for (category, _) in &categories { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] = note: `#[warn(clippy::for_kv_map)]` on by default [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 36 - for (category, _) in &categories { [INFO] [stdout] 36 + for category in categories.keys() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `UserId` which implements the `Copy` trait [INFO] [stdout] --> src/bot/commands/informative/help.rs:44:22 [INFO] [stdout] | [INFO] [stdout] 44 | let ctx_author = ctx.author().id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `ctx.author().id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/informative/help.rs:76:57 [INFO] [stdout] | [INFO] [stdout] 76 | embed = construct_embed_for_category(embed, &selected_category, commands, &language); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `selected_category` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: immediately dereferencing a reference [INFO] [stdout] --> src/bot/commands/informative/help.rs:88:9 [INFO] [stdout] | [INFO] [stdout] 88 | *&ctx, [INFO] [stdout] | ^^^^^ help: try: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deref_addrof [INFO] [stdout] = note: `#[warn(clippy::deref_addrof)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/informative/help.rs:104:24 [INFO] [stdout] | [INFO] [stdout] 104 | .unwrap_or(&command.name_localizations.get("en").unwrap_or(&command.name)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `command.name_localizations.get("en").unwrap_or(&command.name)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/bot/commands/administrative.rs:13:13 [INFO] [stdout] | [INFO] [stdout] 13 | / ... if input == None { [INFO] [stdout] 14 | | ... if let Some(guild_id) = ctx.guild_id() { [INFO] [stdout] 15 | | ... let prefix = ctx.data().prefix_cache.lock().await.get(&guild_id.to_string()).cloned().unwrap_or(DEFAULT_PREFIX.to_st... [INFO] [stdout] 16 | | ... let embed = serenity::CreateEmbed::default() [INFO] [stdout] ... | [INFO] [stdout] 24 | | ... } [INFO] [stdout] | |_______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 13 ~ if input == None [INFO] [stdout] 14 ~ && let Some(guild_id) = ctx.guild_id() { [INFO] [stdout] 15 | let prefix = ctx.data().prefix_cache.lock().await.get(&guild_id.to_string()).cloned().unwrap_or(DEFAULT_PREFIX.to_string()); [INFO] [stdout] ... [INFO] [stdout] 22 | ctx.send(CreateReply::default().embed(embed)).await.unwrap(); [INFO] [stdout] 23 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/bot/commands/administrative.rs:13:16 [INFO] [stdout] | [INFO] [stdout] 13 | if input == None { [INFO] [stdout] | ^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `input.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/bot/commands/wov/player.rs:72:204 [INFO] [stdout] | [INFO] [stdout] 72 | ...rror>(None) }).and_then(|player| Ok(player)) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Ok` [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: using `Result.and_then(|x| Ok(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/bot/commands/wov/player.rs:72:28 [INFO] [stdout] | [INFO] [stdout] 72 | ...ch db::wolvesville::player::get_player_by_username(&data.db_pool, &username).await.or_else(|e| { error!("{}", e); Ok::, anyhow::Error>(None) }).and_then(|player| Ok(player)) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `db::wolvesville::player::get_player_by_username(&data.db_pool, &username).await.or_else(|e| { error!("{}", e); Ok::, anyhow::Error>(None) }).map(|player| player)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/bot/commands/wov/player.rs:90:216 [INFO] [stdout] | [INFO] [stdout] 90 | ...rror>(None) }).and_then(|player| Ok(player)) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Ok` [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: using `Result.and_then(|x| Ok(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/bot/commands/wov/player.rs:90:31 [INFO] [stdout] | [INFO] [stdout] 90 | ...ch db::wolvesville::player::get_player_by_previous_username(&data.db_pool, &username).await.or_else(|e| { error!("{}", e); Ok::, anyhow::Error>(None) }).and_then(|player| Ok(player)) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `db::wolvesville::player::get_player_by_previous_username(&data.db_pool, &username).await.or_else(|e| { error!("{}", e); Ok::, anyhow::Error>(None) }).map(|player| player)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/bot/commands/wov/player.rs:162:85 [INFO] [stdout] | [INFO] [stdout] 162 | while let Some(press) = serenity::collector::ComponentInteractionCollector::new(&ctx) [INFO] [stdout] | ^^^^ help: change this to: `ctx` [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: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/bot/commands/wov/player.rs:235:62 [INFO] [stdout] | [INFO] [stdout] 235 | format!("{}.avatars.select", press.id.to_string()), [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `attachments.get(0)` [INFO] [stdout] --> src/bot/commands/wov/player.rs:253:35 [INFO] [stdout] | [INFO] [stdout] 253 | .add_file(attachments.get(0).unwrap().clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `attachments.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `player.previous_username` after checking its variant with `is_none` [INFO] [stdout] --> src/bot/commands/wov/player.rs:478:127 [INFO] [stdout] | [INFO] [stdout] 477 | ...on(if player.previous_username.is_none() {t!("commands.wov.player.search.description.no_previous_username", username=player.username, locale = language)} [INFO] [stdout] | ------------------------------------- help: try: `if let Some() = &mut player.previous_username` [INFO] [stdout] 478 | ...commands.wov.player.search.description.has_previous_username", username=player.username, previous_username= player.previous_username.as_mut().unwrap(), l... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/wov/player.rs:476:16 [INFO] [stdout] | [INFO] [stdout] 476 | .title(format!("{}", player.username)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `player.username.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/bot/handlers/mod.rs:78:13 [INFO] [stdout] | [INFO] [stdout] 78 | / if is_new.unwrap_or(true) { [INFO] [stdout] 79 | | let pool = &data.db_pool; [INFO] [stdout] 80 | | let prefix_cache = &data.prefix_cache; [INFO] [stdout] ... | [INFO] [stdout] 87 | | prefix_cache.lock().await.put(guild.id.get().to_string(), ".".to_string()); [INFO] [stdout] 88 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 77 ~ serenity::FullEvent::GuildCreate { guild, is_new, .. } [INFO] [stdout] 78 ~ if is_new.unwrap_or(true) => { [INFO] [stdout] 79 | let pool = &data.db_pool; [INFO] [stdout] ... [INFO] [stdout] 87 | prefix_cache.lock().await.put(guild.id.get().to_string(), ".".to_string()); [INFO] [stdout] 88 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/player.rs:653:109 [INFO] [stdout] | [INFO] [stdout] 653 | let clan_info = match db::wolvesville::clan::get_wolvesville_clan_info_by_id(&ctx_data.db_pool, &clan_id).await { [INFO] [stdout] | ^^^^^^^^ help: change this to: `clan_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/player.rs:656:102 [INFO] [stdout] | [INFO] [stdout] 656 | match wolvesville::get_wolvesville_clan_info_by_id(&ctx_data.wolvesville_client, &clan_id).await { [INFO] [stdout] | ^^^^^^^^ help: change this to: `clan_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/clan.rs:21:41 [INFO] [stdout] | [INFO] [stdout] 21 | let language = get_language(&ctx.data(), &ctx.author().id.to_string()).await; [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `ctx.data()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/bot/commands/wov/clan.rs:23:16 [INFO] [stdout] | [INFO] [stdout] 23 | if input == None { [INFO] [stdout] | ^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `input.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bot/commands/wov/clan.rs:196:63 [INFO] [stdout] | [INFO] [stdout] 196 | let button_components = get_clan_search_buttons(ctx.id(), !clan.members.is_none(), false, &language); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `clan.members.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bot/commands/wov/clan.rs:242:72 [INFO] [stdout] | [INFO] [stdout] 242 | let components = get_clan_search_buttons(ctx.id(), !clan.members.is_none(), true, &language); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `clan.members.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bot/commands/wov/clan.rs:299:76 [INFO] [stdout] | [INFO] [stdout] 299 | let components = get_clan_search_buttons(ctx.id(), !clan.members.is_none(), false, &language); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `clan.members.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `u64` which implements the `Copy` trait [INFO] [stdout] --> src/bot/commands/wov/clan.rs:100:18 [INFO] [stdout] | [INFO] [stdout] 100 | let ctx_id = ctx.id().clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `ctx.id()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `UserId` which implements the `Copy` trait [INFO] [stdout] --> src/bot/commands/wov/clan.rs:139:26 [INFO] [stdout] | [INFO] [stdout] 139 | let ctx_author = ctx.author().id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `ctx.author().id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needlessly taken reference of both operands [INFO] [stdout] --> src/bot/commands/wov/clan.rs:142:93 [INFO] [stdout] | [INFO] [stdout] 142 | .filter(move |press| press.data.custom_id == format!("{}.multiple", &ctx_id) && &press.user.id == &ctx_author) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stdout] = note: `#[warn(clippy::op_ref)]` on by default [INFO] [stdout] help: use the values directly [INFO] [stdout] | [INFO] [stdout] 142 - .filter(move |press| press.data.custom_id == format!("{}.multiple", &ctx_id) && &press.user.id == &ctx_author) [INFO] [stdout] 142 + .filter(move |press| press.data.custom_id == format!("{}.multiple", &ctx_id) && press.user.id == ctx_author) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/bot/commands/wov/clan.rs:169:5 [INFO] [stdout] | [INFO] [stdout] 169 | / match clan.is_outdated() { [INFO] [stdout] 170 | | true => { [INFO] [stdout] 171 | | debug!("Clan is outdated, refreshing"); [INFO] [stdout] 172 | | match wolvesville::get_wolvesville_clan_info_by_id(&data.wolvesville_client, &clan.id).await { [INFO] [stdout] ... | [INFO] [stdout] 189 | | false => {} [INFO] [stdout] 190 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 169 ~ if clan.is_outdated() == true { [INFO] [stdout] 170 + debug!("Clan is outdated, refreshing"); [INFO] [stdout] 171 + match wolvesville::get_wolvesville_clan_info_by_id(&data.wolvesville_client, &clan.id).await { [INFO] [stdout] 172 + Ok(Some(refreshed_clan)) => { [INFO] [stdout] 173 + match db::wolvesville::clan::upsert_wolvesville_clan(&data.db_pool, refreshed_clan.clone()).await { [INFO] [stdout] 174 + Ok(_) => { [INFO] [stdout] 175 + debug!("Clan refreshed and saved to the database"); [INFO] [stdout] 176 + clan_box = refreshed_clan; [INFO] [stdout] 177 + clan = &mut clan_box; [INFO] [stdout] 178 + }, [INFO] [stdout] 179 + Err(err) => { [INFO] [stdout] 180 + error!("Failed to save refreshed clan to the database: {}", err); [INFO] [stdout] 181 + } [INFO] [stdout] 182 + } [INFO] [stdout] 183 + }, [INFO] [stdout] 184 + Ok(None) => { debug!("Clan not found in the API, using the outdated one") }, [INFO] [stdout] 185 + Err(err) => error!("Failed to get refreshed clan from the API: {}", err) [INFO] [stdout] 186 + } [INFO] [stdout] 187 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/clan.rs:195:42 [INFO] [stdout] | [INFO] [stdout] 195 | let mut embed = construct_clan_embed(&clan, &language); [INFO] [stdout] | ^^^^^ help: change this to: `clan` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/bot/commands/wov/clan.rs:209:85 [INFO] [stdout] | [INFO] [stdout] 209 | while let Some(press) = serenity::collector::ComponentInteractionCollector::new(&ctx.serenity_context().shard.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `ctx.serenity_context().shard.clone()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/clan.rs:298:54 [INFO] [stdout] | [INFO] [stdout] 298 | embed = construct_clan_embed(&clan, &language); [INFO] [stdout] | ^^^^^ help: change this to: `clan` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/clan.rs:338:57 [INFO] [stdout] | [INFO] [stdout] 338 | .color(serenity::Color::new(u32::from_str_radix(&clan.icon_color.trim_start_matches("#"), 16).unwrap_or(0))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `clan.icon_color.trim_start_matches("#")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bot/commands/wov/clan.rs:350:74 [INFO] [stdout] | [INFO] [stdout] 350 | fn add_members_field_to_embed(mut embed: serenity::CreateEmbed, members: &Vec, leader_id: &String, language:... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 350 - fn add_members_field_to_embed(mut embed: serenity::CreateEmbed, members: &Vec, leader_id: &String, language: &String) -> serenity::CreateEmbed { [INFO] [stdout] 350 + fn add_members_field_to_embed(mut embed: serenity::CreateEmbed, members: &[WolvesvilleClanMember], leader_id: &String, language: &String) -> serenity::CreateEmbed { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | format!("{}", user.name), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `user.name.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:62:13 [INFO] [stdout] | [INFO] [stdout] 62 | format!("{}", nickname), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `nickname.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:75:9 [INFO] [stdout] | [INFO] [stdout] 75 | format!("{}", time::get_relative_timestamp(&user.created_at().timestamp())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `time::get_relative_timestamp(&user.created_at().timestamp()).to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:91:13 [INFO] [stdout] | [INFO] [stdout] 91 | format!("{}", time::get_relative_timestamp(&joined_at.timestamp())), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `time::get_relative_timestamp(&joined_at.timestamp()).to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/informative/userinfo.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | format!("{}", presence.status.name()), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `presence.status.name().to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_some()` [INFO] [stdout] --> src/bot/commands/informative/help.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 19 | if let Some(_) = command { [INFO] [stdout] | -------^^^^^^^---------- help: try: `if command.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's keys [INFO] [stdout] --> src/bot/commands/informative/help.rs:36:26 [INFO] [stdout] | [INFO] [stdout] 36 | for (category, _) in &categories { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] = note: `#[warn(clippy::for_kv_map)]` on by default [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 36 - for (category, _) in &categories { [INFO] [stdout] 36 + for category in categories.keys() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `UserId` which implements the `Copy` trait [INFO] [stdout] --> src/bot/commands/informative/help.rs:44:22 [INFO] [stdout] | [INFO] [stdout] 44 | let ctx_author = ctx.author().id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `ctx.author().id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/informative/help.rs:76:57 [INFO] [stdout] | [INFO] [stdout] 76 | embed = construct_embed_for_category(embed, &selected_category, commands, &language); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `selected_category` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: immediately dereferencing a reference [INFO] [stdout] --> src/bot/commands/informative/help.rs:88:9 [INFO] [stdout] | [INFO] [stdout] 88 | *&ctx, [INFO] [stdout] | ^^^^^ help: try: `ctx` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deref_addrof [INFO] [stdout] = note: `#[warn(clippy::deref_addrof)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/informative/help.rs:104:24 [INFO] [stdout] | [INFO] [stdout] 104 | .unwrap_or(&command.name_localizations.get("en").unwrap_or(&command.name)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `command.name_localizations.get("en").unwrap_or(&command.name)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/bot/commands/administrative.rs:13:13 [INFO] [stdout] | [INFO] [stdout] 13 | / ... if input == None { [INFO] [stdout] 14 | | ... if let Some(guild_id) = ctx.guild_id() { [INFO] [stdout] 15 | | ... let prefix = ctx.data().prefix_cache.lock().await.get(&guild_id.to_string()).cloned().unwrap_or(DEFAULT_PREFIX.to_st... [INFO] [stdout] 16 | | ... let embed = serenity::CreateEmbed::default() [INFO] [stdout] ... | [INFO] [stdout] 24 | | ... } [INFO] [stdout] | |_______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 13 ~ if input == None [INFO] [stdout] 14 ~ && let Some(guild_id) = ctx.guild_id() { [INFO] [stdout] 15 | let prefix = ctx.data().prefix_cache.lock().await.get(&guild_id.to_string()).cloned().unwrap_or(DEFAULT_PREFIX.to_string()); [INFO] [stdout] ... [INFO] [stdout] 22 | ctx.send(CreateReply::default().embed(embed)).await.unwrap(); [INFO] [stdout] 23 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/bot/commands/administrative.rs:13:16 [INFO] [stdout] | [INFO] [stdout] 13 | if input == None { [INFO] [stdout] | ^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `input.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/bot/mod.rs:132:5 [INFO] [stdout] | [INFO] [stdout] 126 | / let client = serenity::ClientBuilder::new(token, intents) [INFO] [stdout] 127 | | .framework(framework) [INFO] [stdout] 128 | | .status(serenity::OnlineStatus::Online) [INFO] [stdout] 129 | | .activity(ActivityData::listening("voices in my RAM")) [INFO] [stdout] 130 | | .await; [INFO] [stdout] | |_______________- unnecessary `let` binding [INFO] [stdout] 131 | [INFO] [stdout] 132 | client [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] 126 ~ [INFO] [stdout] 127 | [INFO] [stdout] 128 ~ serenity::ClientBuilder::new(token, intents) [INFO] [stdout] 129 + .framework(framework) [INFO] [stdout] 130 + .status(serenity::OnlineStatus::Online) [INFO] [stdout] 131 + .activity(ActivityData::listening("voices in my RAM")) [INFO] [stdout] 132 + .await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/bot/commands/wov/player.rs:72:204 [INFO] [stdout] | [INFO] [stdout] 72 | ...rror>(None) }).and_then(|player| Ok(player)) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Ok` [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: using `Result.and_then(|x| Ok(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/bot/commands/wov/player.rs:72:28 [INFO] [stdout] | [INFO] [stdout] 72 | ...ch db::wolvesville::player::get_player_by_username(&data.db_pool, &username).await.or_else(|e| { error!("{}", e); Ok::, anyhow::Error>(None) }).and_then(|player| Ok(player)) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `db::wolvesville::player::get_player_by_username(&data.db_pool, &username).await.or_else(|e| { error!("{}", e); Ok::, anyhow::Error>(None) }).map(|player| player)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/bot/commands/wov/player.rs:90:216 [INFO] [stdout] | [INFO] [stdout] 90 | ...rror>(None) }).and_then(|player| Ok(player)) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `Ok` [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: using `Result.and_then(|x| Ok(y))`, which is more succinctly expressed as `map(|x| y)` [INFO] [stdout] --> src/bot/commands/wov/player.rs:90:31 [INFO] [stdout] | [INFO] [stdout] 90 | ...ch db::wolvesville::player::get_player_by_previous_username(&data.db_pool, &username).await.or_else(|e| { error!("{}", e); Ok::, anyhow::Error>(None) }).and_then(|player| Ok(player)) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `db::wolvesville::player::get_player_by_previous_username(&data.db_pool, &username).await.or_else(|e| { error!("{}", e); Ok::, anyhow::Error>(None) }).map(|player| player)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `for` loop [INFO] [stdout] --> src/db/wolvesville/player.rs:182:5 [INFO] [stdout] | [INFO] [stdout] 182 | while let Some(row) = iterator.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for row in iterator` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stdout] = note: `#[warn(clippy::while_let_on_iterator)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/bot/commands/wov/player.rs:162:85 [INFO] [stdout] | [INFO] [stdout] 162 | while let Some(press) = serenity::collector::ComponentInteractionCollector::new(&ctx) [INFO] [stdout] | ^^^^ help: change this to: `ctx` [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: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/bot/commands/wov/player.rs:235:62 [INFO] [stdout] | [INFO] [stdout] 235 | format!("{}.avatars.select", press.id.to_string()), [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `attachments.get(0)` [INFO] [stdout] --> src/bot/commands/wov/player.rs:253:35 [INFO] [stdout] | [INFO] [stdout] 253 | .add_file(attachments.get(0).unwrap().clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `attachments.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/db/wolvesville/clan.rs:57:8 [INFO] [stdout] | [INFO] [stdout] 57 | if found_clans.len() != 0 { Ok(found_clans) } else { Err(anyhow::anyhow!("No clans found by name: {}", clan_name)) } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!found_clans.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/db/wolvesville/clan.rs:108:36 [INFO] [stdout] | [INFO] [stdout] 108 | .bind(serde_json::to_value(&clan)?) [INFO] [stdout] | ^^^^^ help: change this to: `clan` [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: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/utils/language.rs:26:49 [INFO] [stdout] | [INFO] [stdout] 26 | pub async fn set_language(data: &Data, user_id: &String, language_code: &str) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 26 ~ pub async fn set_language(data: &Data, user_id: &str, language_code: &str) { [INFO] [stdout] 27 | let mut language_cache = data.language_cache.lock().await; [INFO] [stdout] 28 ~ language_cache.put(user_id.to_owned(), language_code.to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `player.previous_username` after checking its variant with `is_none` [INFO] [stdout] --> src/bot/commands/wov/player.rs:478:127 [INFO] [stdout] | [INFO] [stdout] 477 | ...on(if player.previous_username.is_none() {t!("commands.wov.player.search.description.no_previous_username", username=player.username, locale = language)} [INFO] [stdout] | ------------------------------------- help: try: `if let Some() = &mut player.previous_username` [INFO] [stdout] 478 | ...commands.wov.player.search.description.has_previous_username", username=player.username, previous_username= player.previous_username.as_mut().unwrap(), l... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/bot/commands/wov/player.rs:476:16 [INFO] [stdout] | [INFO] [stdout] 476 | .title(format!("{}", player.username)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `player.username.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/player.rs:653:109 [INFO] [stdout] | [INFO] [stdout] 653 | let clan_info = match db::wolvesville::clan::get_wolvesville_clan_info_by_id(&ctx_data.db_pool, &clan_id).await { [INFO] [stdout] | ^^^^^^^^ help: change this to: `clan_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/player.rs:656:102 [INFO] [stdout] | [INFO] [stdout] 656 | match wolvesville::get_wolvesville_clan_info_by_id(&ctx_data.wolvesville_client, &clan_id).await { [INFO] [stdout] | ^^^^^^^^ help: change this to: `clan_id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/clan.rs:21:41 [INFO] [stdout] | [INFO] [stdout] 21 | let language = get_language(&ctx.data(), &ctx.author().id.to_string()).await; [INFO] [stdout] | ^^^^^^^^^^^ help: change this to: `ctx.data()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/bot/commands/wov/clan.rs:23:16 [INFO] [stdout] | [INFO] [stdout] 23 | if input == None { [INFO] [stdout] | ^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `input.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bot/commands/wov/clan.rs:196:63 [INFO] [stdout] | [INFO] [stdout] 196 | let button_components = get_clan_search_buttons(ctx.id(), !clan.members.is_none(), false, &language); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `clan.members.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bot/commands/wov/clan.rs:242:72 [INFO] [stdout] | [INFO] [stdout] 242 | let components = get_clan_search_buttons(ctx.id(), !clan.members.is_none(), true, &language); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `clan.members.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bot/commands/wov/clan.rs:299:76 [INFO] [stdout] | [INFO] [stdout] 299 | let components = get_clan_search_buttons(ctx.id(), !clan.members.is_none(), false, &language); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `clan.members.is_some()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `u64` which implements the `Copy` trait [INFO] [stdout] --> src/bot/commands/wov/clan.rs:100:18 [INFO] [stdout] | [INFO] [stdout] 100 | let ctx_id = ctx.id().clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `ctx.id()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `UserId` which implements the `Copy` trait [INFO] [stdout] --> src/bot/commands/wov/clan.rs:139:26 [INFO] [stdout] | [INFO] [stdout] 139 | let ctx_author = ctx.author().id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `ctx.author().id` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: needlessly taken reference of both operands [INFO] [stdout] --> src/bot/commands/wov/clan.rs:142:93 [INFO] [stdout] | [INFO] [stdout] 142 | .filter(move |press| press.data.custom_id == format!("{}.multiple", &ctx_id) && &press.user.id == &ctx_author) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#op_ref [INFO] [stdout] = note: `#[warn(clippy::op_ref)]` on by default [INFO] [stdout] help: use the values directly [INFO] [stdout] | [INFO] [stdout] 142 - .filter(move |press| press.data.custom_id == format!("{}.multiple", &ctx_id) && &press.user.id == &ctx_author) [INFO] [stdout] 142 + .filter(move |press| press.data.custom_id == format!("{}.multiple", &ctx_id) && press.user.id == ctx_author) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for an equality check. Consider using `if` [INFO] [stdout] --> src/bot/commands/wov/clan.rs:169:5 [INFO] [stdout] | [INFO] [stdout] 169 | / match clan.is_outdated() { [INFO] [stdout] 170 | | true => { [INFO] [stdout] 171 | | debug!("Clan is outdated, refreshing"); [INFO] [stdout] 172 | | match wolvesville::get_wolvesville_clan_info_by_id(&data.wolvesville_client, &clan.id).await { [INFO] [stdout] ... | [INFO] [stdout] 189 | | false => {} [INFO] [stdout] 190 | | }; [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 169 ~ if clan.is_outdated() == true { [INFO] [stdout] 170 + debug!("Clan is outdated, refreshing"); [INFO] [stdout] 171 + match wolvesville::get_wolvesville_clan_info_by_id(&data.wolvesville_client, &clan.id).await { [INFO] [stdout] 172 + Ok(Some(refreshed_clan)) => { [INFO] [stdout] 173 + match db::wolvesville::clan::upsert_wolvesville_clan(&data.db_pool, refreshed_clan.clone()).await { [INFO] [stdout] 174 + Ok(_) => { [INFO] [stdout] 175 + debug!("Clan refreshed and saved to the database"); [INFO] [stdout] 176 + clan_box = refreshed_clan; [INFO] [stdout] 177 + clan = &mut clan_box; [INFO] [stdout] 178 + }, [INFO] [stdout] 179 + Err(err) => { [INFO] [stdout] 180 + error!("Failed to save refreshed clan to the database: {}", err); [INFO] [stdout] 181 + } [INFO] [stdout] 182 + } [INFO] [stdout] 183 + }, [INFO] [stdout] 184 + Ok(None) => { debug!("Clan not found in the API, using the outdated one") }, [INFO] [stdout] 185 + Err(err) => error!("Failed to get refreshed clan from the API: {}", err) [INFO] [stdout] 186 + } [INFO] [stdout] 187 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/clan.rs:195:42 [INFO] [stdout] | [INFO] [stdout] 195 | let mut embed = construct_clan_embed(&clan, &language); [INFO] [stdout] | ^^^^^ help: change this to: `clan` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/bot/commands/wov/clan.rs:209:85 [INFO] [stdout] | [INFO] [stdout] 209 | while let Some(press) = serenity::collector::ComponentInteractionCollector::new(&ctx.serenity_context().shard.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `ctx.serenity_context().shard.clone()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/clan.rs:298:54 [INFO] [stdout] | [INFO] [stdout] 298 | embed = construct_clan_embed(&clan, &language); [INFO] [stdout] | ^^^^^ help: change this to: `clan` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bot/commands/wov/clan.rs:338:57 [INFO] [stdout] | [INFO] [stdout] 338 | .color(serenity::Color::new(u32::from_str_radix(&clan.icon_color.trim_start_matches("#"), 16).unwrap_or(0))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `clan.icon_color.trim_start_matches("#")` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bot/commands/wov/clan.rs:350:74 [INFO] [stdout] | [INFO] [stdout] 350 | fn add_members_field_to_embed(mut embed: serenity::CreateEmbed, members: &Vec, leader_id: &String, language:... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 350 - fn add_members_field_to_embed(mut embed: serenity::CreateEmbed, members: &Vec, leader_id: &String, language: &String) -> serenity::CreateEmbed { [INFO] [stdout] 350 + fn add_members_field_to_embed(mut embed: serenity::CreateEmbed, members: &[WolvesvilleClanMember], leader_id: &String, language: &String) -> serenity::CreateEmbed { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/bot/mod.rs:132:5 [INFO] [stdout] | [INFO] [stdout] 126 | / let client = serenity::ClientBuilder::new(token, intents) [INFO] [stdout] 127 | | .framework(framework) [INFO] [stdout] 128 | | .status(serenity::OnlineStatus::Online) [INFO] [stdout] 129 | | .activity(ActivityData::listening("voices in my RAM")) [INFO] [stdout] 130 | | .await; [INFO] [stdout] | |_______________- unnecessary `let` binding [INFO] [stdout] 131 | [INFO] [stdout] 132 | client [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] 126 ~ [INFO] [stdout] 127 | [INFO] [stdout] 128 ~ serenity::ClientBuilder::new(token, intents) [INFO] [stdout] 129 + .framework(framework) [INFO] [stdout] 130 + .status(serenity::OnlineStatus::Online) [INFO] [stdout] 131 + .activity(ActivityData::listening("voices in my RAM")) [INFO] [stdout] 132 + .await [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this loop could be written as a `for` loop [INFO] [stdout] --> src/db/wolvesville/player.rs:182:5 [INFO] [stdout] | [INFO] [stdout] 182 | while let Some(row) = iterator.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for row in iterator` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_on_iterator [INFO] [stdout] = note: `#[warn(clippy::while_let_on_iterator)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/utils/apicallers/wolvesville/mod.rs:82:17 [INFO] [stdout] | [INFO] [stdout] 82 | player_ids: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 82 - player_ids: &Vec, [INFO] [stdout] 82 + player_ids: &[String], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/db/wolvesville/clan.rs:57:8 [INFO] [stdout] | [INFO] [stdout] 57 | if found_clans.len() != 0 { Ok(found_clans) } else { Err(anyhow::anyhow!("No clans found by name: {}", clan_name)) } [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!found_clans.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/db/wolvesville/clan.rs:108:36 [INFO] [stdout] | [INFO] [stdout] 108 | .bind(serde_json::to_value(&clan)?) [INFO] [stdout] | ^^^^^ help: change this to: `clan` [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: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/utils/image/wolvesville.rs:100:59 [INFO] [stdout] | [INFO] [stdout] 100 | pub async fn render_all_wolvesville_avatars(ordered_urls: &Vec, avatar_images: &HashMap) -> anyhow::R... [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 100 - pub async fn render_all_wolvesville_avatars(ordered_urls: &Vec, avatar_images: &HashMap) -> anyhow::Result { [INFO] [stdout] 100 + pub async fn render_all_wolvesville_avatars(ordered_urls: &[String], avatar_images: &HashMap) -> anyhow::Result { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> src/utils/image/wolvesville.rs:197:35 [INFO] [stdout] | [INFO] [stdout] 197 | let image_buffer = svg_to_png(&*plot.svg()?) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `&plot.svg()?` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] = note: `#[warn(clippy::explicit_auto_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/utils/language.rs:26:49 [INFO] [stdout] | [INFO] [stdout] 26 | pub async fn set_language(data: &Data, user_id: &String, language_code: &str) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 26 ~ pub async fn set_language(data: &Data, user_id: &str, language_code: &str) { [INFO] [stdout] 27 | let mut language_cache = data.language_cache.lock().await; [INFO] [stdout] 28 ~ language_cache.put(user_id.to_owned(), language_code.to_string()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `known_points` [INFO] [stdout] --> src/utils/image/wolvesville.rs:260:14 [INFO] [stdout] | [INFO] [stdout] 260 | for i in 1..known_points.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 260 - for i in 1..known_points.len() { [INFO] [stdout] 260 + for in known_points.iter().skip(1) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/utils/image/mod.rs:19:25 [INFO] [stdout] | [INFO] [stdout] 19 | pixel.blend(&overlay.get_pixel(x, y)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `overlay.get_pixel(x, y)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/utils/mod.rs:9:40 [INFO] [stdout] | [INFO] [stdout] 9 | pub fn get_first_part_of_string(input: &String, delimiter: char) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 9 ~ pub fn get_first_part_of_string(input: &str, delimiter: char) -> String { [INFO] [stdout] 10 ~ input.split_once(delimiter).map_or(input.to_owned(), |(first, _)| first.to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/bot/commands/directive.rs:122:21 [INFO] [stdout] | [INFO] [stdout] 122 | let languages = vec!["en", "uk", "ua", "ukrainian", "english"]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["en", "uk", "ua", "ukrainian", "english"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/utils/apicallers/wolvesville/mod.rs:82:17 [INFO] [stdout] | [INFO] [stdout] 82 | player_ids: &Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 82 - player_ids: &Vec, [INFO] [stdout] 82 + player_ids: &[String], [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/utils/image/wolvesville.rs:100:59 [INFO] [stdout] | [INFO] [stdout] 100 | pub async fn render_all_wolvesville_avatars(ordered_urls: &Vec, avatar_images: &HashMap) -> anyhow::R... [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 100 - pub async fn render_all_wolvesville_avatars(ordered_urls: &Vec, avatar_images: &HashMap) -> anyhow::Result { [INFO] [stdout] 100 + pub async fn render_all_wolvesville_avatars(ordered_urls: &[String], avatar_images: &HashMap) -> anyhow::Result { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: deref which would be done by auto-deref [INFO] [stdout] --> src/utils/image/wolvesville.rs:197:35 [INFO] [stdout] | [INFO] [stdout] 197 | let image_buffer = svg_to_png(&*plot.svg()?) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `&plot.svg()?` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref [INFO] [stdout] = note: `#[warn(clippy::explicit_auto_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `known_points` [INFO] [stdout] --> src/utils/image/wolvesville.rs:260:14 [INFO] [stdout] | [INFO] [stdout] 260 | for i in 1..known_points.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 260 - for i in 1..known_points.len() { [INFO] [stdout] 260 + for in known_points.iter().skip(1) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/utils/image/mod.rs:19:25 [INFO] [stdout] | [INFO] [stdout] 19 | pixel.blend(&overlay.get_pixel(x, y)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `overlay.get_pixel(x, y)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/utils/mod.rs:9:40 [INFO] [stdout] | [INFO] [stdout] 9 | pub fn get_first_part_of_string(input: &String, delimiter: char) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 9 ~ pub fn get_first_part_of_string(input: &str, delimiter: char) -> String { [INFO] [stdout] 10 ~ input.split_once(delimiter).map_or(input.to_owned(), |(first, _)| first.to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/bot/commands/directive.rs:122:21 [INFO] [stdout] | [INFO] [stdout] 122 | let languages = vec!["en", "uk", "ua", "ukrainian", "english"]; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["en", "uk", "ua", "ukrainian", "english"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 4m 27s [INFO] running `Command { std: "docker" "inspect" "0e95144e39e0e2eb498452da15e3815f768b46d7e3eb0b44469cb44b573289bf", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0e95144e39e0e2eb498452da15e3815f768b46d7e3eb0b44469cb44b573289bf", kill_on_drop: false }` [INFO] [stdout] 0e95144e39e0e2eb498452da15e3815f768b46d7e3eb0b44469cb44b573289bf