[INFO] cloning repository https://github.com/xeruf/mostr [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/xeruf/mostr" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxeruf%2Fmostr", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxeruf%2Fmostr'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] a2b3a84611387de79288de1e1c07431a1ee27a6f [INFO] linting xeruf/mostr against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fxeruf%2Fmostr" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] removed /workspace/builds/worker-1-tc1/source/rust-toolchain.toml [INFO] started tweaking git repo https://github.com/xeruf/mostr [INFO] finished tweaking git repo https://github.com/xeruf/mostr [INFO] tweaked toml for git repo https://github.com/xeruf/mostr written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/xeruf/mostr 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/xeruf/mostr 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] Updating git repository `https://github.com/xeruf/rustyline` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded parse_datetime v0.5.0 [INFO] [stderr] Downloaded negentropy v0.4.3 [INFO] [stderr] Downloaded negentropy v0.3.1 [INFO] [stderr] Downloaded nostr-database v0.38.0 [INFO] [stderr] Downloaded base58ck v0.1.0 [INFO] [stderr] Downloaded async-utility v0.3.1 [INFO] [stderr] Downloaded nostr-relay-pool v0.38.0 [INFO] [stderr] Downloaded bitcoin-io v0.1.3 [INFO] [stderr] Downloaded logos-derive v0.14.4 [INFO] [stderr] Downloaded interim v0.1.2 [INFO] [stderr] Downloaded tokio-tungstenite v0.24.0 [INFO] [stderr] Downloaded logos-codegen v0.14.4 [INFO] [stderr] Downloaded bitcoin-units v0.1.2 [INFO] [stderr] Downloaded keyring v3.6.1 [INFO] [stderr] Downloaded async-wsocket v0.12.0 [INFO] [stderr] Downloaded bech32 v0.11.0 [INFO] [stderr] Downloaded nostr-sdk v0.38.0 [INFO] [stderr] Downloaded nostr v0.38.0 [INFO] [stderr] Downloaded dbus-secret-service v4.0.3 [INFO] [stderr] Downloaded hex-conservative v0.2.1 [INFO] [stderr] Downloaded bitcoin_hashes v0.14.0 [INFO] [stderr] Downloaded atomic-destructor v0.3.0 [INFO] [stderr] Downloaded bitcoin-internals v0.3.0 [INFO] [stderr] Downloaded webpki-roots v0.26.7 [INFO] [stderr] Downloaded bitcoin v0.32.5 [INFO] [stderr] Downloaded logos v0.14.4 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] 26d895c4ffb24a536ea87651b9fdfc5a1fa7033f97400c309fa8db796e3670e3 [INFO] running `Command { std: "docker" "start" "-a" "26d895c4ffb24a536ea87651b9fdfc5a1fa7033f97400c309fa8db796e3670e3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "26d895c4ffb24a536ea87651b9fdfc5a1fa7033f97400c309fa8db796e3670e3", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "26d895c4ffb24a536ea87651b9fdfc5a1fa7033f97400c309fa8db796e3670e3", kill_on_drop: false }` [INFO] [stdout] 26d895c4ffb24a536ea87651b9fdfc5a1fa7033f97400c309fa8db796e3670e3 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] f73876e16ac51dc4f2b3c7dc4ca6f7c521d3ed75e4955487aa9c93aa8bc646b7 [INFO] running `Command { std: "docker" "start" "-a" "f73876e16ac51dc4f2b3c7dc4ca6f7c521d3ed75e4955487aa9c93aa8bc646b7", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.169 [INFO] [stderr] Checking cpufeatures v0.2.16 [INFO] [stderr] Compiling serde v1.0.217 [INFO] [stderr] Compiling proc-macro2 v1.0.93 [INFO] [stderr] Compiling cc v1.2.9 [INFO] [stderr] Checking smallvec v1.13.2 [INFO] [stderr] Checking bytes v1.9.0 [INFO] [stderr] Checking log v0.4.25 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling bitcoin-io v0.1.3 [INFO] [stderr] Checking block-padding v0.3.3 [INFO] [stderr] Compiling bitcoin-internals v0.3.0 [INFO] [stderr] Checking rustls-pki-types v1.10.1 [INFO] [stderr] Checking hex-conservative v0.2.1 [INFO] [stderr] Compiling rustls v0.23.21 [INFO] [stderr] Checking percent-encoding v2.3.1 [INFO] [stderr] Compiling hex_lit v0.1.1 [INFO] [stderr] Checking inout v0.1.3 [INFO] [stderr] Compiling httparse v1.9.5 [INFO] [stderr] Checking form_urlencoded v1.2.1 [INFO] [stderr] Checking base64ct v1.6.0 [INFO] [stderr] Compiling bitcoin v0.32.5 [INFO] [stderr] Compiling serde_json v1.0.135 [INFO] [stderr] Checking bitflags v2.8.0 [INFO] [stderr] Compiling libdbus-sys v0.2.5 [INFO] [stderr] Checking indexmap v2.7.0 [INFO] [stderr] Checking tinyvec v1.8.1 [INFO] [stderr] Checking data-encoding v2.7.0 [INFO] [stderr] Checking bech32 v0.11.0 [INFO] [stderr] Checking webpki-roots v0.26.7 [INFO] [stderr] Checking http v1.2.0 [INFO] [stderr] Checking negentropy v0.4.3 [INFO] [stderr] Compiling rustix v0.38.43 [INFO] [stderr] Checking negentropy v0.3.1 [INFO] [stderr] Compiling nix v0.29.0 [INFO] [stderr] Compiling quote v1.0.38 [INFO] [stderr] Checking tracing-core v0.1.33 [INFO] [stderr] Checking env_filter v0.1.3 [INFO] [stderr] Checking nibble_vec v0.1.0 [INFO] [stderr] Checking atomic-destructor v0.3.0 [INFO] [stderr] Checking num-integer v0.1.46 [INFO] [stderr] Compiling syn v2.0.96 [INFO] [stderr] Checking num-complex v0.4.6 [INFO] [stderr] Checking chrono v0.4.39 [INFO] [stderr] Checking home v0.5.11 [INFO] [stderr] Checking itertools v0.12.1 [INFO] [stderr] Checking env_logger v0.11.6 [INFO] [stderr] Checking radix_trie v0.2.1 [INFO] [stderr] Checking whoami v1.5.2 [INFO] [stderr] Checking unicode-normalization v0.1.22 [INFO] [stderr] Checking num-bigint v0.4.6 [INFO] [stderr] Checking num-iter v0.1.45 [INFO] [stderr] Checking colog v1.3.0 [INFO] [stderr] Compiling ring v0.17.8 [INFO] [stderr] Compiling secp256k1-sys v0.10.1 [INFO] [stderr] Checking getrandom v0.2.15 [INFO] [stderr] Checking mio v1.0.3 [INFO] [stderr] Checking socket2 v0.5.8 [INFO] [stderr] Checking dbus v0.9.7 [INFO] [stderr] Checking dirs-sys v0.4.1 [INFO] [stderr] Checking linux-keyutils v0.2.4 [INFO] [stderr] Checking directories v5.0.1 [INFO] [stderr] Checking num-rational v0.4.2 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking fd-lock v4.0.2 [INFO] [stderr] Checking num v0.4.3 [INFO] [stderr] Checking crypto-common v0.1.6 [INFO] [stderr] Checking password-hash v0.5.0 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking universal-hash v0.5.1 [INFO] [stderr] Checking aead v0.5.2 [INFO] [stderr] Checking hmac v0.12.1 [INFO] [stderr] Checking sha2 v0.10.8 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking parse_datetime v0.5.0 [INFO] [stderr] Checking poly1305 v0.8.0 [INFO] [stderr] Checking pbkdf2 v0.12.2 [INFO] [stderr] Checking hkdf v0.12.4 [INFO] [stderr] Checking salsa20 v0.10.2 [INFO] [stderr] Checking chacha20 v0.9.1 [INFO] [stderr] Checking cbc v0.1.2 [INFO] [stderr] Checking aes v0.8.4 [INFO] [stderr] Checking scrypt v0.11.0 [INFO] [stderr] Checking chacha20poly1305 v0.10.1 [INFO] [stderr] Checking rustyline v15.0.0 (https://github.com/xeruf/rustyline?rev=5364854#53648543) [INFO] [stderr] Compiling synstructure v0.13.1 [INFO] [stderr] Compiling logos-codegen v0.14.4 [INFO] [stderr] Checking rustls-webpki v0.102.8 [INFO] [stderr] Compiling zerovec-derive v0.10.3 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling zerocopy-derive v0.7.35 [INFO] [stderr] Compiling serde_derive v1.0.217 [INFO] [stderr] Compiling icu_provider_macros v1.5.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling tokio-macros v2.5.0 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling async-trait v0.1.85 [INFO] [stderr] Compiling tracing-attributes v0.1.28 [INFO] [stderr] Compiling zerofrom-derive v0.1.5 [INFO] [stderr] Compiling yoke-derive v0.7.5 [INFO] [stderr] Checking tokio v1.43.0 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Compiling logos-derive v0.14.4 [INFO] [stderr] Checking zerofrom v0.1.5 [INFO] [stderr] Checking zerocopy v0.7.35 [INFO] [stderr] Checking logos v0.14.4 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking yoke v0.7.5 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Checking interim v0.1.2 [INFO] [stderr] Checking zerovec v0.10.4 [INFO] [stderr] Checking ppv-lite86 v0.2.20 [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 rand_chacha v0.3.1 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking icu_provider v1.5.0 [INFO] [stderr] Checking icu_locid_transform v1.5.0 [INFO] [stderr] Checking tungstenite v0.24.0 [INFO] [stderr] Checking dbus-secret-service v4.0.3 [INFO] [stderr] Checking icu_properties v1.5.1 [INFO] [stderr] Checking bitcoin_hashes v0.14.0 [INFO] [stderr] Checking keyring v3.6.1 [INFO] [stderr] Checking bitcoin-units v0.1.2 [INFO] [stderr] Checking tokio-rustls v0.26.1 [INFO] [stderr] Checking tokio-socks v0.5.2 [INFO] [stderr] Checking async-utility v0.3.1 [INFO] [stderr] Checking tokio-tungstenite v0.24.0 [INFO] [stderr] Checking base58ck v0.1.0 [INFO] [stderr] Checking secp256k1 v0.29.1 [INFO] [stderr] Checking icu_normalizer v1.5.0 [INFO] [stderr] Checking idna_adapter v1.2.0 [INFO] [stderr] Checking idna v1.0.3 [INFO] [stderr] Checking url v2.5.4 [INFO] [stderr] Checking async-wsocket v0.12.0 [INFO] [stderr] Checking nostr v0.38.0 [INFO] [stderr] Checking nostr-database v0.38.0 [INFO] [stderr] Checking nostr-relay-pool v0.38.0 [INFO] [stderr] Checking nostr-sdk v0.38.0 [INFO] [stderr] Checking mostr v0.9.3 (/opt/rustwide/workdir) [INFO] [stdout] warning: unexpected `cfg` condition value: `with-file-history` [INFO] [stdout] --> examples/rustyline.rs:22:11 [INFO] [stdout] | [INFO] [stdout] 22 | #[cfg(feature = "with-file-history")] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: expected values for `feature` are: `default` and `persistence` [INFO] [stdout] = help: consider adding `with-file-history` as a feature in `Cargo.toml` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] = note: `#[warn(unexpected_cfgs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unexpected `cfg` condition value: `with-file-history` [INFO] [stdout] --> examples/rustyline.rs:47:11 [INFO] [stdout] | [INFO] [stdout] 47 | #[cfg(feature = "with-file-history")] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: expected values for `feature` are: `default` and `persistence` [INFO] [stdout] = help: consider adding `with-file-history` as a feature in `Cargo.toml` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `evt` [INFO] [stdout] --> examples/rustyline.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | fn handle(&self, evt: &Event, n: RepeatCount, positive: bool, ctx: &EventContext) -> Option { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_evt` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `n` [INFO] [stdout] --> examples/rustyline.rs:6:35 [INFO] [stdout] | [INFO] [stdout] 6 | fn handle(&self, evt: &Event, n: RepeatCount, positive: bool, ctx: &EventContext) -> Option { [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_n` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `positive` [INFO] [stdout] --> examples/rustyline.rs:6:51 [INFO] [stdout] | [INFO] [stdout] 6 | fn handle(&self, evt: &Event, n: RepeatCount, positive: bool, ctx: &EventContext) -> Option { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_positive` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> examples/rustyline.rs:30:17 [INFO] [stdout] | [INFO] [stdout] 30 | rl.add_history_entry(line.as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 30 | let _ = rl.add_history_entry(line.as_str()); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `DateTime`, `TimeDelta`, `TimeZone`, and `Utc` [INFO] [stdout] --> src/main.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | use chrono::{DateTime, Local, TimeDelta, TimeZone, Utc}; [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: `nostr_sdk::bitcoin::hex::DisplayHex` [INFO] [stdout] --> src/main.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | use nostr_sdk::bitcoin::hex::DisplayHex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `nostr_sdk::serde_json::Serializer` [INFO] [stdout] --> src/main.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use nostr_sdk::serde_json::Serializer; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::iter::once` [INFO] [stdout] --> src/main.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | use std::iter::once; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/main.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 33 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::time::error::Elapsed` [INFO] [stdout] --> src/main.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 35 | use tokio::time::error::Elapsed; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::time::timeout` [INFO] [stdout] --> src/main.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | use tokio::time::timeout; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `chrono::LocalResult::Single` [INFO] [stdout] --> src/helpers.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use chrono::LocalResult::Single; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug`, `error`, `info`, and `trace` [INFO] [stdout] --> src/helpers.rs:3:11 [INFO] [stdout] | [INFO] [stdout] 3 | use log::{debug, error, info, trace, warn}; [INFO] [stdout] | ^^^^^ ^^^^^ ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `super::*` [INFO] [stdout] --> src/helpers.rs:174:9 [INFO] [stdout] | [INFO] [stdout] 174 | use super::*; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `FixedOffset`, `NaiveDate`, and `Timelike` [INFO] [stdout] --> src/helpers.rs:175:18 [INFO] [stdout] | [INFO] [stdout] 175 | use chrono::{FixedOffset, NaiveDate, Timelike}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `interim::datetime::DateTime` [INFO] [stdout] --> src/helpers.rs:176:9 [INFO] [stdout] | [INFO] [stdout] 176 | use interim::datetime::DateTime; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `fmt::Display` [INFO] [stdout] --> src/task.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use fmt::Display; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::btree_set::Iter` [INFO] [stdout] --> src/task.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::collections::btree_set::Iter; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Chain` and `Once` [INFO] [stdout] --> src/task.rs:11:23 [INFO] [stdout] | [INFO] [stdout] 11 | use std::iter::{once, Chain, Once}; [INFO] [stdout] | ^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PROCEDURE_KIND_ID` and `PROCEDURE_KIND` [INFO] [stdout] --> src/task.rs:17:49 [INFO] [stdout] | [INFO] [stdout] 17 | use crate::kinds::{match_event_tag, Prio, PRIO, PROCEDURE_KIND, PROCEDURE_KIND_ID, TASK_KIND}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Colorize` [INFO] [stdout] --> src/task.rs:23:30 [INFO] [stdout] | [INFO] [stdout] 23 | use colored::{ColoredString, Colorize}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug`, `error`, `info`, and `trace` [INFO] [stdout] --> src/task.rs:26:11 [INFO] [stdout] | [INFO] [stdout] 26 | use log::{debug, error, info, trace, warn}; [INFO] [stdout] | ^^^^^ ^^^^^ ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SingleLetterTag` [INFO] [stdout] --> src/task.rs:27:60 [INFO] [stdout] | [INFO] [stdout] 27 | use nostr_sdk::{Alphabet, Event, EventId, Kind, PublicKey, SingleLetterTag, Tag, TagKind, Timestamp}; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Keys` and `Tag` [INFO] [stdout] --> src/tasks/nostr_users.rs:2:17 [INFO] [stdout] | [INFO] [stdout] 2 | use nostr_sdk::{Keys, Metadata, PublicKey, Tag, Timestamp}; [INFO] [stdout] | ^^^^ ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `error` and `trace` [INFO] [stdout] --> src/tasks.rs:22:18 [INFO] [stdout] | [INFO] [stdout] 22 | use log::{debug, error, info, trace, warn}; [INFO] [stdout] | ^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Url` [INFO] [stdout] --> src/tasks.rs:23:152 [INFO] [stdout] | [INFO] [stdout] 23 | ...PublicKey, RelayUrl, SingleLetterTag, Tag, TagKind, Timestamp, Url}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Deref` [INFO] [stdout] --> src/tasks.rs:28:16 [INFO] [stdout] | [INFO] [stdout] 28 | use std::ops::{Deref, Div, Rem}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::tasks` [INFO] [stdout] --> src/event_sender.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use crate::tasks; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `info` and `warn` [INFO] [stdout] --> src/event_sender.rs:9:25 [INFO] [stdout] | [INFO] [stdout] 9 | use log::{debug, error, info, trace, warn}; [INFO] [stdout] | ^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `DateTime`, `TimeDelta`, `TimeZone`, and `Utc` [INFO] [stdout] --> src/main.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | use chrono::{DateTime, Local, TimeDelta, TimeZone, Utc}; [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: `nostr_sdk::bitcoin::hex::DisplayHex` [INFO] [stdout] --> src/main.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | use nostr_sdk::bitcoin::hex::DisplayHex; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `nostr_sdk::serde_json::Serializer` [INFO] [stdout] --> src/main.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 18 | use nostr_sdk::serde_json::Serializer; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::iter::once` [INFO] [stdout] --> src/main.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | use std::iter::once; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::time::Duration` [INFO] [stdout] --> src/main.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 33 | use std::time::Duration; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::time::error::Elapsed` [INFO] [stdout] --> src/main.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 35 | use tokio::time::error::Elapsed; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `tokio::time::timeout` [INFO] [stdout] --> src/main.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | use tokio::time::timeout; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `chrono::LocalResult::Single` [INFO] [stdout] --> src/helpers.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use chrono::LocalResult::Single; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug`, `error`, `info`, and `trace` [INFO] [stdout] --> src/helpers.rs:3:11 [INFO] [stdout] | [INFO] [stdout] 3 | use log::{debug, error, info, trace, warn}; [INFO] [stdout] | ^^^^^ ^^^^^ ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `interim::datetime::DateTime` [INFO] [stdout] --> src/helpers.rs:176:9 [INFO] [stdout] | [INFO] [stdout] 176 | use interim::datetime::DateTime; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this is a decimal constant [INFO] [stdout] --> src/helpers.rs:196:61 [INFO] [stdout] | [INFO] [stdout] 196 | (date - TimeDelta::days(1)).and_hms_opt(23, 01, 0).unwrap() [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_prefixed_literal [INFO] [stdout] = note: `#[warn(clippy::zero_prefixed_literal)]` on by default [INFO] [stdout] help: if you mean to use a decimal constant, remove the `0` to avoid confusion [INFO] [stdout] | [INFO] [stdout] 196 - (date - TimeDelta::days(1)).and_hms_opt(23, 01, 0).unwrap() [INFO] [stdout] 196 + (date - TimeDelta::days(1)).and_hms_opt(23, 1, 0).unwrap() [INFO] [stdout] | [INFO] [stdout] help: if you mean to use an octal constant, use `0o` [INFO] [stdout] | [INFO] [stdout] 196 | (date - TimeDelta::days(1)).and_hms_opt(23, 0o1, 0).unwrap() [INFO] [stdout] | + [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `fmt::Display` [INFO] [stdout] --> src/task.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use fmt::Display; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::btree_set::Iter` [INFO] [stdout] --> src/task.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use std::collections::btree_set::Iter; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Chain` and `Once` [INFO] [stdout] --> src/task.rs:11:23 [INFO] [stdout] | [INFO] [stdout] 11 | use std::iter::{once, Chain, Once}; [INFO] [stdout] | ^^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PROCEDURE_KIND_ID` and `PROCEDURE_KIND` [INFO] [stdout] --> src/task.rs:17:49 [INFO] [stdout] | [INFO] [stdout] 17 | use crate::kinds::{match_event_tag, Prio, PRIO, PROCEDURE_KIND, PROCEDURE_KIND_ID, TASK_KIND}; [INFO] [stdout] | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Colorize` [INFO] [stdout] --> src/task.rs:23:30 [INFO] [stdout] | [INFO] [stdout] 23 | use colored::{ColoredString, Colorize}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug`, `error`, `info`, and `trace` [INFO] [stdout] --> src/task.rs:26:11 [INFO] [stdout] | [INFO] [stdout] 26 | use log::{debug, error, info, trace, warn}; [INFO] [stdout] | ^^^^^ ^^^^^ ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SingleLetterTag` [INFO] [stdout] --> src/task.rs:27:60 [INFO] [stdout] | [INFO] [stdout] 27 | use nostr_sdk::{Alphabet, Event, EventId, Kind, PublicKey, SingleLetterTag, Tag, TagKind, Timestamp}; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `error` and `trace` [INFO] [stdout] --> src/tasks.rs:22:18 [INFO] [stdout] | [INFO] [stdout] 22 | use log::{debug, error, info, trace, warn}; [INFO] [stdout] | ^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Url` [INFO] [stdout] --> src/tasks.rs:23:152 [INFO] [stdout] | [INFO] [stdout] 23 | ...PublicKey, RelayUrl, SingleLetterTag, Tag, TagKind, Timestamp, Url}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Deref` [INFO] [stdout] --> src/tasks.rs:28:16 [INFO] [stdout] | [INFO] [stdout] 28 | use std::ops::{Deref, Div, Rem}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `crate::tasks` [INFO] [stdout] --> src/event_sender.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use crate::tasks; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `info` and `warn` [INFO] [stdout] --> src/event_sender.rs:9:25 [INFO] [stdout] | [INFO] [stdout] 9 | use log::{debug, error, info, trace, warn}; [INFO] [stdout] | ^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated tuple variant `nostr_sdk::Kind::Regular`: Use `Custom` variant or `is_regular` method instead. [INFO] [stdout] --> src/kinds.rs:10:40 [INFO] [stdout] | [INFO] [stdout] 10 | pub const PROCEDURE_KIND: Kind = Kind::Regular(PROCEDURE_KIND_ID); [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated tuple variant `nostr_sdk::Kind::Regular`: Use `Custom` variant or `is_regular` method instead. [INFO] [stdout] --> src/kinds.rs:11:39 [INFO] [stdout] | [INFO] [stdout] 11 | pub const TRACKING_KIND: Kind = Kind::Regular(1650); [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated tuple variant `nostr_sdk::Kind::Regular`: Use `Custom` variant or `is_regular` method instead. [INFO] [stdout] --> src/kinds.rs:10:40 [INFO] [stdout] | [INFO] [stdout] 10 | pub const PROCEDURE_KIND: Kind = Kind::Regular(PROCEDURE_KIND_ID); [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated tuple variant `nostr_sdk::Kind::Regular`: Use `Custom` variant or `is_regular` method instead. [INFO] [stdout] --> src/kinds.rs:11:39 [INFO] [stdout] | [INFO] [stdout] 11 | pub const TRACKING_KIND: Kind = Kind::Regular(1650); [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> examples/relay-test-0_34.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | client.send_event_builder(EventBuilder::new(Kind::TextNote, "test")).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 16 | let _ = client.send_event_builder(EventBuilder::new(Kind::TextNote, "test")).await; [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ops::Add` [INFO] [stdout] --> src/main.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | use std::ops::Add; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/task.rs:92:67 [INFO] [stdout] | [INFO] [stdout] 92 | .and_then(|c| PublicKey::from_str(c).inspect_err(|e| warn!("Unparseable pubkey in {:?}", t)).ok())) [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `v` [INFO] [stdout] --> src/tasks/nostr_users.rs:32:42 [INFO] [stdout] | [INFO] [stdout] 32 | .sorted_unstable_by_key(|(k, v)| self.get_user_time(k)) [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_v` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ops::Add` [INFO] [stdout] --> src/main.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | use std::ops::Add; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `e` [INFO] [stdout] --> src/task.rs:92:67 [INFO] [stdout] | [INFO] [stdout] 92 | .and_then(|c| PublicKey::from_str(c).inspect_err(|e| warn!("Unparseable pubkey in {:?}", t)).ok())) [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_e` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `v` [INFO] [stdout] --> src/tasks/nostr_users.rs:32:42 [INFO] [stdout] | [INFO] [stdout] 32 | .sorted_unstable_by_key(|(k, v)| self.get_user_time(k)) [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_v` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `side` [INFO] [stdout] --> src/tasks/tests.rs:264:9 [INFO] [stdout] | [INFO] [stdout] 264 | let side = tasks.submit( [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_side` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `v` [INFO] [stdout] --> src/main.rs:526:80 [INFO] [stdout] | [INFO] [stdout] 526 | ... tasks.set_key_filter(users.iter().map(|(k, v)| *k).collect_vec()) [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_v` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `k` [INFO] [stdout] --> src/main.rs:525:86 [INFO] [stdout] | [INFO] [stdout] 525 | ... info!("Showing tasks for {}", users.iter().map(|(k, v)| v).join(", ")); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_k` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `from` is never used [INFO] [stdout] --> src/tasks.rs:112:8 [INFO] [stdout] | [INFO] [stdout] 111 | impl StateFilter { [INFO] [stdout] | ---------------- associated function in this implementation [INFO] [stdout] 112 | fn from(str: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `len`, `visible_tasks`, `parent_tag`, and `make_task_unwrapped` are never used [INFO] [stdout] --> src/tasks.rs:237:19 [INFO] [stdout] | [INFO] [stdout] 154 | impl TasksRelay { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 237 | pub(crate) fn len(&self) -> usize { self.tasks.len() } [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 607 | fn visible_tasks(&self) -> Vec<&Task> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1050 | pub(crate) fn parent_tag(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 1158 | fn make_task_unwrapped(&mut self, input: &str) -> EventId { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `TraversalFilter` is never used [INFO] [stdout] --> src/tasks/children_traversal.rs:8:6 [INFO] [stdout] | [INFO] [stdout] 8 | enum TraversalFilter { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `takes_children` and `takes_self` are never used [INFO] [stdout] --> src/tasks/children_traversal.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 14 | impl TraversalFilter { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] 15 | fn takes_children(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | fn takes_self(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `rooted`, `with_queue`, `process_depth`, `get_depth`, and `next_filtered` are never used [INFO] [stdout] --> src/tasks/children_traversal.rs:38:8 [INFO] [stdout] | [INFO] [stdout] 37 | impl<'a> ChildrenTraversal<'a> { [INFO] [stdout] | ------------------------------ associated items in this implementation [INFO] [stdout] 38 | fn rooted(tasks: &'a TaskMap, id: Option<&EventId>) -> Self { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | fn with_queue(tasks: &'a TaskMap, queue: Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub(super) fn process_depth(&mut self, depth: usize) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 90 | pub(super) fn get_depth(mut self, depth: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 113 | fn next_filtered(&mut self, filter: &F) -> Option<&'a Task> [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-canonical implementation of `partial_cmp` on an `Ord` type [INFO] [stdout] --> src/task.rs:45:1 [INFO] [stdout] | [INFO] [stdout] 45 | / impl PartialOrd for Task { [INFO] [stdout] 46 | | fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 47 | | self.event.partial_cmp(&other.event) [INFO] [stdout] 48 | | } [INFO] [stdout] 49 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#non_canonical_partial_ord_impl [INFO] [stdout] = note: `#[warn(clippy::non_canonical_partial_ord_impl)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 46 - fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 47 - self.event.partial_cmp(&other.event) [INFO] [stdout] 48 - } [INFO] [stdout] 46 + fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/task.rs:100:9 [INFO] [stdout] | [INFO] [stdout] 100 | / self.get_assignee() [INFO] [stdout] 101 | | .unwrap_or_else(|| self.event.pubkey) [INFO] [stdout] | |_________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 101 - .unwrap_or_else(|| self.event.pubkey) [INFO] [stdout] 101 + .unwrap_or(self.event.pubkey) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/tasks/nostr_users.rs:72:9 [INFO] [stdout] | [INFO] [stdout] 72 | / if !self.users.contains_key(&pubkey) { [INFO] [stdout] 73 | | self.users.insert(pubkey, Default::default()); [INFO] [stdout] 74 | | } [INFO] [stdout] | |_________^ help: try: `self.users.entry(pubkey).or_insert_with(|| Default::default());` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` 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/tasks/children_traversal.rs:52:20 [INFO] [stdout] | [INFO] [stdout] 52 | tasks: &tasks, [INFO] [stdout] | ^^^^^^ help: change this to: `tasks` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks/children_traversal.rs:121:44 [INFO] [stdout] | [INFO] [stdout] 121 | self.queue_children_of(&task); [INFO] [stdout] | ^^^^^ help: change this to: `task` [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/tasks/children_traversal.rs:153:44 [INFO] [stdout] | [INFO] [stdout] 153 | self.queue_children_of(&task); [INFO] [stdout] | ^^^^^ help: change this to: `task` [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 loop could be written as a `for` loop [INFO] [stdout] --> src/tasks/durations.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | while let Some(event) = self.events.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for event in self.events.by_ref()` [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: using `clone` on type `EventId` which implements the `Copy` trait [INFO] [stdout] --> src/tasks.rs:51:32 [INFO] [stdout] | [INFO] [stdout] 51 | self.children_for(Some(task.get_id().clone())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `task.get_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: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:162:9 [INFO] [stdout] | [INFO] [stdout] 162 | metadata.map(|m| new.users.insert(keys.public_key(), m, Timestamp::now())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] = note: `#[warn(clippy::option_map_unit_fn)]` on by default [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 162 - metadata.map(|m| new.users.insert(keys.public_key(), m, Timestamp::now())); [INFO] [stdout] 162 + if let Some(m) = metadata { new.users.insert(keys.public_key(), m, Timestamp::now()) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:334:48 [INFO] [stdout] | [INFO] [stdout] 334 | self.users.get_displayname(&key) [INFO] [stdout] | ^^^^ help: change this to: `key` [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 loop could be written as a `for` loop [INFO] [stdout] --> src/tasks.rs:357:25 [INFO] [stdout] | [INFO] [stdout] 357 | while let Some(((start, _), (end, _))) = iter.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for ((start, _), (end, _)) in iter.by_ref()` [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:398:48 [INFO] [stdout] | [INFO] [stdout] 398 | let children = ChildrenTraversal::from(&self, id).get_all(); [INFO] [stdout] | ^^^^^ help: change this to: `self` [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/tasks.rs:448:50 [INFO] [stdout] | [INFO] [stdout] 448 | Some(self.users.get_username(&key)) [INFO] [stdout] | ^^^^ help: change this to: `key` [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: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:467:9 [INFO] [stdout] | [INFO] [stdout] 467 | / self.priority [INFO] [stdout] 468 | | .map(|p| prompt.push_str(&format!(" *{:02}", p))); [INFO] [stdout] | |_____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 467 - self.priority [INFO] [stdout] 468 - .map(|p| prompt.push_str(&format!(" *{:02}", p))); [INFO] [stdout] 467 + if let Some(p) = self.priority { prompt.push_str(&format!(" *{:02}", p)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/tasks.rs:525:17 [INFO] [stdout] | [INFO] [stdout] 525 | return if self.filter(task) { vec![task] } else { vec![] }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 525 - return if self.filter(task) { vec![task] } else { vec![] }; [INFO] [stdout] 525 + if self.filter(task) { vec![task] } else { vec![] } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:517:71 [INFO] [stdout] | [INFO] [stdout] 517 | self.resolve_tasks_rec(self.tasks.children_of(&task), sparse, new_depth); [INFO] [stdout] | ^^^^^ help: change this to: `task` [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 creates an owned instance just for comparison [INFO] [stdout] --> src/tasks.rs:537:37 [INFO] [stdout] | [INFO] [stdout] 537 | .is_none_or(|m| m.to_string() == MARKER_PROPERTY) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] = note: `#[warn(clippy::cmp_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:539:21 [INFO] [stdout] | [INFO] [stdout] 539 | / self.tasks.get_mut(&event_tag.id).map(|t| { [INFO] [stdout] 540 | | found = true; [INFO] [stdout] 541 | | f(t); [INFO] [stdout] 542 | | }); [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 539 - self.tasks.get_mut(&event_tag.id).map(|t| { [INFO] [stdout] 540 - found = true; [INFO] [stdout] 541 - f(t); [INFO] [stdout] 542 - }); [INFO] [stdout] 539 + if let Some(t) = self.tasks.get_mut(&event_tag.id) { ... } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:558:85 [INFO] [stdout] | [INFO] [stdout] 558 | task.list_hashtags().any(|t| t.matches(&self.users.get_username(&p))))) && [INFO] [stdout] | ^^ help: change this to: `p` [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/tasks.rs:574:9 [INFO] [stdout] | [INFO] [stdout] 574 | / if current.is_empty() { [INFO] [stdout] 575 | | if !self.tags.is_empty() { [INFO] [stdout] 576 | | let mut children = self.tasks.children_for(position).peekable(); [INFO] [stdout] 577 | | if children.peek().is_some() { [INFO] [stdout] ... | [INFO] [stdout] 588 | | } [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] 574 ~ if current.is_empty() [INFO] [stdout] 575 ~ && !self.tags.is_empty() { [INFO] [stdout] 576 | let mut children = self.tasks.children_for(position).peekable(); [INFO] [stdout] ... [INFO] [stdout] 586 | } [INFO] [stdout] 587 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tasks.rs:597:34 [INFO] [stdout] | [INFO] [stdout] 597 | .filter(|id| !position.is_some_and(|p| &&p == id) && !ids.contains(id)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `position.is_none_or(|p| &&p != id)` [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: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> src/tasks.rs:611:36 [INFO] [stdout] | [INFO] [stdout] 611 | return bookmarks.chain(tasks.into_iter()).collect_vec(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:510:11 [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] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 611 - return bookmarks.chain(tasks.into_iter()).collect_vec(); [INFO] [stdout] 611 + return bookmarks.chain(tasks).collect_vec(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `hashtag::Hashtag` [INFO] [stdout] --> src/tasks.rs:865:39 [INFO] [stdout] | [INFO] [stdout] 865 | self.tags_excluded.insert(Hashtag::from(tag).into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `Hashtag::from(tag)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> src/tasks.rs:948:9 [INFO] [stdout] | [INFO] [stdout] 948 | /// Returns an EventId if a new Task was created. [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: if this is supposed to be its own paragraph, add a blank line [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation [INFO] [stdout] = note: `#[warn(clippy::doc_lazy_continuation)]` on by default [INFO] [stdout] help: indent this line [INFO] [stdout] | [INFO] [stdout] 948 | /// Returns an EventId if a new Task was created. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tasks.rs:1002:12 [INFO] [stdout] | [INFO] [stdout] 1002 | if !target [INFO] [stdout] | ____________^ [INFO] [stdout] 1003 | | .and_then(|id| self.get_by_id(&id)) [INFO] [stdout] 1004 | | .is_some_and(|t| t.parent_id() == pos.as_ref()) [INFO] [stdout] | |___________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1002 ~ if target [INFO] [stdout] 1003 + .and_then(|id| self.get_by_id(&id)).is_none_or(|t| t.parent_id() != pos.as_ref()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:1063:13 [INFO] [stdout] | [INFO] [stdout] 1063 | / self.get_by_id(&pos).map(|task| { [INFO] [stdout] 1064 | | if task.pure_state() == State::Procedure { [INFO] [stdout] 1065 | | self.tasks [INFO] [stdout] 1066 | | .children_of(task) [INFO] [stdout] ... | [INFO] [stdout] 1070 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 1063 - self.get_by_id(&pos).map(|task| { [INFO] [stdout] 1064 - if task.pure_state() == State::Procedure { [INFO] [stdout] 1065 - self.tasks [INFO] [stdout] 1066 - .children_of(task) [INFO] [stdout] 1067 - .max() [INFO] [stdout] 1068 - .map(|t| tags.push(self.make_event_tag(&t.event, MARKER_DEPENDS))); [INFO] [stdout] 1069 - } [INFO] [stdout] 1070 - }); [INFO] [stdout] 1063 + if let Some(task) = self.get_by_id(&pos) { ... } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:1065:21 [INFO] [stdout] | [INFO] [stdout] 1065 | / self.tasks [INFO] [stdout] 1066 | | .children_of(task) [INFO] [stdout] 1067 | | .max() [INFO] [stdout] 1068 | | .map(|t| tags.push(self.make_event_tag(&t.event, MARKER_DEPENDS))); [INFO] [stdout] | |__________________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 1065 ~ if let Some(t) = self.tasks [INFO] [stdout] 1066 + .children_of(task) [INFO] [stdout] 1067 + .max() { tags.push(self.make_event_tag(&t.event, MARKER_DEPENDS)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/tasks.rs:1144:35 [INFO] [stdout] | [INFO] [stdout] 1144 | self.priority.map(|p| to_prio_tag(p)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `to_prio_tag` [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] --> src/tasks.rs:1344:23 [INFO] [stdout] | [INFO] [stdout] 1344 | .and_then(|e| referenced_event(e)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `referenced_event` [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: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:1359:9 [INFO] [stdout] | [INFO] [stdout] 1359 | / self.history.get_mut(&self.sender.pubkey()) [INFO] [stdout] 1360 | | .map(|t| { [INFO] [stdout] 1361 | | t.retain(|_, e| e != event && !referenced_event(e).is_some_and(|id| id == event.id)) [INFO] [stdout] 1362 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 1359 - self.history.get_mut(&self.sender.pubkey()) [INFO] [stdout] 1360 - .map(|t| { [INFO] [stdout] 1361 - t.retain(|_, e| e != event && !referenced_event(e).is_some_and(|id| id == event.id)) [INFO] [stdout] 1362 - }); [INFO] [stdout] 1359 + if let Some(t) = self.history.get_mut(&self.sender.pubkey()) { t.retain(|_, e| e != event && !referenced_event(e).is_some_and(|id| id == event.id)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tasks.rs:1361:47 [INFO] [stdout] | [INFO] [stdout] 1361 | t.retain(|_, e| e != event && !referenced_event(e).is_some_and(|id| id == event.id)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `referenced_event(e).is_none_or(|id| id != event.id)` [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: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> src/tasks.rs:1600:13 [INFO] [stdout] | [INFO] [stdout] 1600 | / tasks.last() [INFO] [stdout] 1601 | | .take_if(|_| include_last_id) [INFO] [stdout] 1602 | | .and_then(|t| t.parent_id()) [INFO] [stdout] 1603 | | .map(|id| id.to_string()) [INFO] [stdout] 1604 | | .into_iter(), [INFO] [stdout] | |____________________________^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:510:11 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 1603 - .map(|id| id.to_string()) [INFO] [stdout] 1604 - .into_iter(), [INFO] [stdout] 1603 + .map(|id| id.to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `map` over `inspect` [INFO] [stdout] --> src/tasks.rs:1626:57 [INFO] [stdout] | [INFO] [stdout] 1626 | self.current.and_then(|id| self.tasks.get(&id)).map(|t| { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_inspect [INFO] [stdout] = note: `#[warn(clippy::manual_inspect)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1626 ~ self.current.and_then(|id| self.tasks.get(&id)).inspect(|t| { [INFO] [stdout] 1627 ~ self.current = t.parent_id().cloned(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `slice` [INFO] [stdout] --> src/kinds.rs:65:34 [INFO] [stdout] | [INFO] [stdout] 65 | let mut vec = tag.as_slice().into_iter(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `nostr_sdk::Kind` [INFO] [stdout] --> src/kinds.rs:79:23 [INFO] [stdout] | [INFO] [stdout] 79 | EventBuilder::new(Kind::from(TRACKING_KIND), "") [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `Kind::from()`: `TRACKING_KIND` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/kinds.rs:108:47 [INFO] [stdout] | [INFO] [stdout] 108 | if let Ok(key) = PublicKey::parse(&s[1..]) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/kinds.rs:107:9 [INFO] [stdout] | [INFO] [stdout] 107 | if s.starts_with('@') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 107 ~ if let Some() = s.strip_prefix('@') { [INFO] [stdout] 108 ~ if let Ok(key) = PublicKey::parse() { [INFO] [stdout] 109 | tags.push(Tag::public_key(key)); [INFO] [stdout] 110 | return false; [INFO] [stdout] 111 ~ } else if let Some((key, _)) = users.find_user().first() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/kinds.rs:120:30 [INFO] [stdout] | [INFO] [stdout] 120 | if let Ok(num) = s[1..].parse::() { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/kinds.rs:115:16 [INFO] [stdout] | [INFO] [stdout] 115 | } else if s.starts_with('*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 115 ~ } else if let Some() = s.strip_prefix('*') { [INFO] [stdout] 116 | if s.len() == 1 { [INFO] [stdout] ... [INFO] [stdout] 119 | } [INFO] [stdout] 120 ~ if let Ok(num) = .parse::() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/kinds.rs:130:55 [INFO] [stdout] | [INFO] [stdout] 130 | .chain(split.flatten().map(|s| to_hashtag_tag(&s))) [INFO] [stdout] | ^^ help: change this to: `s` [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: large size difference between variants [INFO] [stdout] --> src/event_sender.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | / pub(crate) enum MostrMessage { [INFO] [stdout] 16 | | NewRelay(RelayUrl), [INFO] [stdout] | | ------------------ the second-largest variant contains at least 96 bytes [INFO] [stdout] 17 | | SendTask(RelayUrl, Event), [INFO] [stdout] | | ------------------------- the largest variant contains at least 376 bytes [INFO] [stdout] 18 | | } [INFO] [stdout] | |_^ the entire enum is at least 376 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] 17 - SendTask(RelayUrl, Event), [INFO] [stdout] 17 + SendTask(RelayUrl, Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/hashtag.rs:51:18 [INFO] [stdout] | [INFO] [stdout] 51 | .map(|s| Hashtag::from(s)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Hashtag::from` [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: non-canonical implementation of `partial_cmp` on an `Ord` type [INFO] [stdout] --> src/hashtag.rs:82:1 [INFO] [stdout] | [INFO] [stdout] 82 | / impl PartialOrd for Hashtag { [INFO] [stdout] 83 | | fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 84 | | Some(self.lowercased.cmp(&other.lowercased)) [INFO] [stdout] 85 | | } [INFO] [stdout] 86 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#non_canonical_partial_ord_impl [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 83 - fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 84 - Some(self.lowercased.cmp(&other.lowercased)) [INFO] [stdout] 85 - } [INFO] [stdout] 83 + fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/main.rs:71:52 [INFO] [stdout] | [INFO] [stdout] 71 | return Ok(SecretKey::from_slice(&pass).map(|s| Keys::new(s)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Keys::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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:145:100 [INFO] [stdout] | [INFO] [stdout] 145 | if let Ok(Some(keys)) = fs::read_to_string(key_file.as_path()).map(|s| or_warn!(Keys::from_str(&s.trim()))) { [INFO] [stdout] | ^^^^^^^^^ help: change this to: `s.trim()` [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: `flatten()` will run forever if the iterator repeatedly produces an `Err` [INFO] [stdout] --> src/main.rs:198:79 [INFO] [stdout] | [INFO] [stdout] 198 | _ => match File::open(&relays_file).map(|f| BufReader::new(f).lines().flatten()) { [INFO] [stdout] | ^^^^^^^^^ help: replace with: `map_while(Result::ok)` [INFO] [stdout] | [INFO] [stdout] note: this expression returning a `std::io::Lines` may produce an infinite number of `Err` in case of a read error [INFO] [stdout] --> src/main.rs:198:53 [INFO] [stdout] | [INFO] [stdout] 198 | _ => match File::open(&relays_file).map(|f| BufReader::new(f).lines().flatten()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#lines_filter_map_ok [INFO] [stdout] = note: `#[warn(clippy::lines_filter_map_ok)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/main.rs:580:33 [INFO] [stdout] | [INFO] [stdout] 580 | / ... if !arg.starts_with('|') { [INFO] [stdout] 581 | | ... if tasks.make_dependent_sibling(arg) { [INFO] [stdout] 582 | | ... break 'arm; [INFO] [stdout] 583 | | ... } [INFO] [stdout] 584 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 580 ~ if !arg.starts_with('|') [INFO] [stdout] 581 ~ && tasks.make_dependent_sibling(arg) { [INFO] [stdout] 582 | break 'arm; [INFO] [stdout] 583 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:658:36 [INFO] [stdout] | [INFO] [stdout] 658 | ... if remaining.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!remaining.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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:666:82 [INFO] [stdout] | [INFO] [stdout] 666 | ... let (label, mut times) = tasks.times_tracked_for(&key); [INFO] [stdout] | ^^^^ help: change this to: `key` [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: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/main.rs:712:37 [INFO] [stdout] | [INFO] [stdout] 712 | / ... tasks.filter_or_create(pos, &remaining) [INFO] [stdout] 713 | | ... .map(|id| tasks.move_to(Some(id))); [INFO] [stdout] | |____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 712 - tasks.filter_or_create(pos, &remaining) [INFO] [stdout] 713 - .map(|id| tasks.move_to(Some(id))); [INFO] [stdout] 712 + if let Some(id) = tasks.filter_or_create(pos, &remaining) { tasks.move_to(Some(id)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:712:65 [INFO] [stdout] | [INFO] [stdout] 712 | ... tasks.filter_or_create(pos, &remaining) [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `remaining` [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/main.rs:746:76 [INFO] [stdout] | [INFO] [stdout] 746 | ... transform(&t.get_title()).contains(&remaining) || [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `remaining` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:748:68 [INFO] [stdout] | [INFO] [stdout] 748 | ... |tag| tag.contains(&remaining)) [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `remaining` [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: compiling a regex in a loop [INFO] [stdout] --> src/main.rs:762:28 [INFO] [stdout] | [INFO] [stdout] 762 | if Regex::new("^wss?://").unwrap().is_match(command.trim()) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/main.rs:314:12 [INFO] [stdout] | [INFO] [stdout] 314 | 'repl: loop { [INFO] [stdout] | ^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] = note: `#[warn(clippy::regex_creation_in_loops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:45:72 [INFO] [stdout] | [INFO] [stdout] 45 | fn children_of<'a>(&'a self, task: &'a Task) -> impl Iterator + 'a; [INFO] [stdout] | -- -- ^^^^^ -- the same lifetime is named here [INFO] [stdout] | | | | [INFO] [stdout] | | the lifetime is named here the same lifetime is elided here [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 45 | fn children_of<'a>(&'a self, task: &'a Task) -> impl Iterator + 'a; [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:46:78 [INFO] [stdout] | [INFO] [stdout] 46 | fn children_for<'a>(&'a self, id: Option) -> impl Iterator + 'a; [INFO] [stdout] | -- ^^^^^ -- the same lifetime is named here [INFO] [stdout] | | | [INFO] [stdout] | the lifetime is named here the same lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 46 | fn children_for<'a>(&'a self, id: Option) -> impl Iterator + 'a; [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:50:72 [INFO] [stdout] | [INFO] [stdout] 50 | fn children_of<'a>(&'a self, task: &'a Task) -> impl Iterator + 'a { [INFO] [stdout] | -- -- ^^^^^ -- the same lifetime is named here [INFO] [stdout] | | | | [INFO] [stdout] | | the lifetime is named here the same lifetime is elided here [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 50 | fn children_of<'a>(&'a self, task: &'a Task) -> impl Iterator + 'a { [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:54:78 [INFO] [stdout] | [INFO] [stdout] 54 | fn children_for<'a>(&'a self, id: Option) -> impl Iterator + 'a { [INFO] [stdout] | -- ^^^^^ -- the same lifetime is named here [INFO] [stdout] | | | [INFO] [stdout] | the lifetime is named here the same lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 54 | fn children_for<'a>(&'a self, id: Option) -> impl Iterator + 'a { [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:488:25 [INFO] [stdout] | [INFO] [stdout] 488 | fn traverse_up_from(&self, id: Option) -> ParentIterator { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 488 | fn traverse_up_from(&self, id: Option) -> ParentIterator<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks/durations.rs:19:26 [INFO] [stdout] | [INFO] [stdout] 18 | ids: &'a [EventId], [INFO] [stdout] | -- the lifetime is named here [INFO] [stdout] 19 | ) -> impl Iterator)> { [INFO] [stdout] | ^^^^^^^^^^ the same lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 19 | ) -> impl Iterator)> { [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `v` [INFO] [stdout] --> src/main.rs:526:80 [INFO] [stdout] | [INFO] [stdout] 526 | ... tasks.set_key_filter(users.iter().map(|(k, v)| *k).collect_vec()) [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_v` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `k` [INFO] [stdout] --> src/main.rs:525:86 [INFO] [stdout] | [INFO] [stdout] 525 | ... info!("Showing tasks for {}", users.iter().map(|(k, v)| v).join(", ")); [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_k` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `parent_tag` is never used [INFO] [stdout] --> src/tasks.rs:1050:19 [INFO] [stdout] | [INFO] [stdout] 154 | impl TasksRelay { [INFO] [stdout] | --------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 1050 | pub(crate) fn parent_tag(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `TraversalFilter` is never used [INFO] [stdout] --> src/tasks/children_traversal.rs:8:6 [INFO] [stdout] | [INFO] [stdout] 8 | enum TraversalFilter { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `takes_children` and `takes_self` are never used [INFO] [stdout] --> src/tasks/children_traversal.rs:15:8 [INFO] [stdout] | [INFO] [stdout] 14 | impl TraversalFilter { [INFO] [stdout] | -------------------- methods in this implementation [INFO] [stdout] 15 | fn takes_children(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | fn takes_self(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `rooted`, `with_queue`, and `next_filtered` are never used [INFO] [stdout] --> src/tasks/children_traversal.rs:38:8 [INFO] [stdout] | [INFO] [stdout] 37 | impl<'a> ChildrenTraversal<'a> { [INFO] [stdout] | ------------------------------ associated items in this implementation [INFO] [stdout] 38 | fn rooted(tasks: &'a TaskMap, id: Option<&EventId>) -> Self { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | fn with_queue(tasks: &'a TaskMap, queue: Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 113 | fn next_filtered(&mut self, filter: &F) -> Option<&'a Task> [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: non-canonical implementation of `partial_cmp` on an `Ord` type [INFO] [stdout] --> src/task.rs:45:1 [INFO] [stdout] | [INFO] [stdout] 45 | / impl PartialOrd for Task { [INFO] [stdout] 46 | | fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 47 | | self.event.partial_cmp(&other.event) [INFO] [stdout] 48 | | } [INFO] [stdout] 49 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#non_canonical_partial_ord_impl [INFO] [stdout] = note: `#[warn(clippy::non_canonical_partial_ord_impl)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 46 - fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 47 - self.event.partial_cmp(&other.event) [INFO] [stdout] 48 - } [INFO] [stdout] 46 + fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/task.rs:100:9 [INFO] [stdout] | [INFO] [stdout] 100 | / self.get_assignee() [INFO] [stdout] 101 | | .unwrap_or_else(|| self.event.pubkey) [INFO] [stdout] | |_________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `unwrap_or` instead [INFO] [stdout] | [INFO] [stdout] 101 - .unwrap_or_else(|| self.event.pubkey) [INFO] [stdout] 101 + .unwrap_or(self.event.pubkey) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/tasks/nostr_users.rs:72:9 [INFO] [stdout] | [INFO] [stdout] 72 | / if !self.users.contains_key(&pubkey) { [INFO] [stdout] 73 | | self.users.insert(pubkey, Default::default()); [INFO] [stdout] 74 | | } [INFO] [stdout] | |_________^ help: try: `self.users.entry(pubkey).or_insert_with(|| Default::default());` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` 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/tasks/children_traversal.rs:52:20 [INFO] [stdout] | [INFO] [stdout] 52 | tasks: &tasks, [INFO] [stdout] | ^^^^^^ help: change this to: `tasks` [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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks/children_traversal.rs:121:44 [INFO] [stdout] | [INFO] [stdout] 121 | self.queue_children_of(&task); [INFO] [stdout] | ^^^^^ help: change this to: `task` [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/tasks/children_traversal.rs:153:44 [INFO] [stdout] | [INFO] [stdout] 153 | self.queue_children_of(&task); [INFO] [stdout] | ^^^^^ help: change this to: `task` [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 loop could be written as a `for` loop [INFO] [stdout] --> src/tasks/durations.rs:50:9 [INFO] [stdout] | [INFO] [stdout] 50 | while let Some(event) = self.events.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for event in self.events.by_ref()` [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: using `clone` on type `EventId` which implements the `Copy` trait [INFO] [stdout] --> src/tasks.rs:51:32 [INFO] [stdout] | [INFO] [stdout] 51 | self.children_for(Some(task.get_id().clone())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `task.get_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: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:162:9 [INFO] [stdout] | [INFO] [stdout] 162 | metadata.map(|m| new.users.insert(keys.public_key(), m, Timestamp::now())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] = note: `#[warn(clippy::option_map_unit_fn)]` on by default [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 162 - metadata.map(|m| new.users.insert(keys.public_key(), m, Timestamp::now())); [INFO] [stdout] 162 + if let Some(m) = metadata { new.users.insert(keys.public_key(), m, Timestamp::now()) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:334:48 [INFO] [stdout] | [INFO] [stdout] 334 | self.users.get_displayname(&key) [INFO] [stdout] | ^^^^ help: change this to: `key` [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 loop could be written as a `for` loop [INFO] [stdout] --> src/tasks.rs:357:25 [INFO] [stdout] | [INFO] [stdout] 357 | while let Some(((start, _), (end, _))) = iter.next() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `for ((start, _), (end, _)) in iter.by_ref()` [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] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:398:48 [INFO] [stdout] | [INFO] [stdout] 398 | let children = ChildrenTraversal::from(&self, id).get_all(); [INFO] [stdout] | ^^^^^ help: change this to: `self` [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/tasks.rs:448:50 [INFO] [stdout] | [INFO] [stdout] 448 | Some(self.users.get_username(&key)) [INFO] [stdout] | ^^^^ help: change this to: `key` [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: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:467:9 [INFO] [stdout] | [INFO] [stdout] 467 | / self.priority [INFO] [stdout] 468 | | .map(|p| prompt.push_str(&format!(" *{:02}", p))); [INFO] [stdout] | |_____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 467 - self.priority [INFO] [stdout] 468 - .map(|p| prompt.push_str(&format!(" *{:02}", p))); [INFO] [stdout] 467 + if let Some(p) = self.priority { prompt.push_str(&format!(" *{:02}", p)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/tasks.rs:525:17 [INFO] [stdout] | [INFO] [stdout] 525 | return if self.filter(task) { vec![task] } else { vec![] }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 525 - return if self.filter(task) { vec![task] } else { vec![] }; [INFO] [stdout] 525 + if self.filter(task) { vec![task] } else { vec![] } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:517:71 [INFO] [stdout] | [INFO] [stdout] 517 | self.resolve_tasks_rec(self.tasks.children_of(&task), sparse, new_depth); [INFO] [stdout] | ^^^^^ help: change this to: `task` [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 creates an owned instance just for comparison [INFO] [stdout] --> src/tasks.rs:537:37 [INFO] [stdout] | [INFO] [stdout] 537 | .is_none_or(|m| m.to_string() == MARKER_PROPERTY) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `m` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cmp_owned [INFO] [stdout] = note: `#[warn(clippy::cmp_owned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:539:21 [INFO] [stdout] | [INFO] [stdout] 539 | / self.tasks.get_mut(&event_tag.id).map(|t| { [INFO] [stdout] 540 | | found = true; [INFO] [stdout] 541 | | f(t); [INFO] [stdout] 542 | | }); [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 539 - self.tasks.get_mut(&event_tag.id).map(|t| { [INFO] [stdout] 540 - found = true; [INFO] [stdout] 541 - f(t); [INFO] [stdout] 542 - }); [INFO] [stdout] 539 + if let Some(t) = self.tasks.get_mut(&event_tag.id) { ... } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tasks.rs:558:85 [INFO] [stdout] | [INFO] [stdout] 558 | task.list_hashtags().any(|t| t.matches(&self.users.get_username(&p))))) && [INFO] [stdout] | ^^ help: change this to: `p` [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/tasks.rs:574:9 [INFO] [stdout] | [INFO] [stdout] 574 | / if current.is_empty() { [INFO] [stdout] 575 | | if !self.tags.is_empty() { [INFO] [stdout] 576 | | let mut children = self.tasks.children_for(position).peekable(); [INFO] [stdout] 577 | | if children.peek().is_some() { [INFO] [stdout] ... | [INFO] [stdout] 588 | | } [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] 574 ~ if current.is_empty() [INFO] [stdout] 575 ~ && !self.tags.is_empty() { [INFO] [stdout] 576 | let mut children = self.tasks.children_for(position).peekable(); [INFO] [stdout] ... [INFO] [stdout] 586 | } [INFO] [stdout] 587 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tasks.rs:597:34 [INFO] [stdout] | [INFO] [stdout] 597 | .filter(|id| !position.is_some_and(|p| &&p == id) && !ids.contains(id)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `position.is_none_or(|p| &&p != id)` [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: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> src/tasks.rs:611:36 [INFO] [stdout] | [INFO] [stdout] 611 | return bookmarks.chain(tasks.into_iter()).collect_vec(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:510:11 [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] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 611 - return bookmarks.chain(tasks.into_iter()).collect_vec(); [INFO] [stdout] 611 + return bookmarks.chain(tasks).collect_vec(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `hashtag::Hashtag` [INFO] [stdout] --> src/tasks.rs:865:39 [INFO] [stdout] | [INFO] [stdout] 865 | self.tags_excluded.insert(Hashtag::from(tag).into()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into()`: `Hashtag::from(tag)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> src/tasks.rs:948:9 [INFO] [stdout] | [INFO] [stdout] 948 | /// Returns an EventId if a new Task was created. [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: if this is supposed to be its own paragraph, add a blank line [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation [INFO] [stdout] = note: `#[warn(clippy::doc_lazy_continuation)]` on by default [INFO] [stdout] help: indent this line [INFO] [stdout] | [INFO] [stdout] 948 | /// Returns an EventId if a new Task was created. [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tasks.rs:1002:12 [INFO] [stdout] | [INFO] [stdout] 1002 | if !target [INFO] [stdout] | ____________^ [INFO] [stdout] 1003 | | .and_then(|id| self.get_by_id(&id)) [INFO] [stdout] 1004 | | .is_some_and(|t| t.parent_id() == pos.as_ref()) [INFO] [stdout] | |___________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1002 ~ if target [INFO] [stdout] 1003 + .and_then(|id| self.get_by_id(&id)).is_none_or(|t| t.parent_id() != pos.as_ref()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:1063:13 [INFO] [stdout] | [INFO] [stdout] 1063 | / self.get_by_id(&pos).map(|task| { [INFO] [stdout] 1064 | | if task.pure_state() == State::Procedure { [INFO] [stdout] 1065 | | self.tasks [INFO] [stdout] 1066 | | .children_of(task) [INFO] [stdout] ... | [INFO] [stdout] 1070 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 1063 - self.get_by_id(&pos).map(|task| { [INFO] [stdout] 1064 - if task.pure_state() == State::Procedure { [INFO] [stdout] 1065 - self.tasks [INFO] [stdout] 1066 - .children_of(task) [INFO] [stdout] 1067 - .max() [INFO] [stdout] 1068 - .map(|t| tags.push(self.make_event_tag(&t.event, MARKER_DEPENDS))); [INFO] [stdout] 1069 - } [INFO] [stdout] 1070 - }); [INFO] [stdout] 1063 + if let Some(task) = self.get_by_id(&pos) { ... } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:1065:21 [INFO] [stdout] | [INFO] [stdout] 1065 | / self.tasks [INFO] [stdout] 1066 | | .children_of(task) [INFO] [stdout] 1067 | | .max() [INFO] [stdout] 1068 | | .map(|t| tags.push(self.make_event_tag(&t.event, MARKER_DEPENDS))); [INFO] [stdout] | |__________________________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 1065 ~ if let Some(t) = self.tasks [INFO] [stdout] 1066 + .children_of(task) [INFO] [stdout] 1067 + .max() { tags.push(self.make_event_tag(&t.event, MARKER_DEPENDS)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/tasks.rs:1144:35 [INFO] [stdout] | [INFO] [stdout] 1144 | self.priority.map(|p| to_prio_tag(p)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `to_prio_tag` [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] --> src/tasks.rs:1344:23 [INFO] [stdout] | [INFO] [stdout] 1344 | .and_then(|e| referenced_event(e)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `referenced_event` [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: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/tasks.rs:1359:9 [INFO] [stdout] | [INFO] [stdout] 1359 | / self.history.get_mut(&self.sender.pubkey()) [INFO] [stdout] 1360 | | .map(|t| { [INFO] [stdout] 1361 | | t.retain(|_, e| e != event && !referenced_event(e).is_some_and(|id| id == event.id)) [INFO] [stdout] 1362 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 1359 - self.history.get_mut(&self.sender.pubkey()) [INFO] [stdout] 1360 - .map(|t| { [INFO] [stdout] 1361 - t.retain(|_, e| e != event && !referenced_event(e).is_some_and(|id| id == event.id)) [INFO] [stdout] 1362 - }); [INFO] [stdout] 1359 + if let Some(t) = self.history.get_mut(&self.sender.pubkey()) { t.retain(|_, e| e != event && !referenced_event(e).is_some_and(|id| id == event.id)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tasks.rs:1361:47 [INFO] [stdout] | [INFO] [stdout] 1361 | t.retain(|_, e| e != event && !referenced_event(e).is_some_and(|id| id == event.id)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `referenced_event(e).is_none_or(|id| id != event.id)` [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: explicit call to `.into_iter()` in function argument accepting `IntoIterator` [INFO] [stdout] --> src/tasks.rs:1600:13 [INFO] [stdout] | [INFO] [stdout] 1600 | / tasks.last() [INFO] [stdout] 1601 | | .take_if(|_| include_last_id) [INFO] [stdout] 1602 | | .and_then(|t| t.parent_id()) [INFO] [stdout] 1603 | | .map(|id| id.to_string()) [INFO] [stdout] 1604 | | .into_iter(), [INFO] [stdout] | |____________________________^ [INFO] [stdout] | [INFO] [stdout] note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` [INFO] [stdout] --> /rustc/3645249d79dfb136b5d8de3ce153d19d6698d92d/library/core/src/iter/traits/iterator.rs:510:11 [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] help: consider removing the `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 1603 - .map(|id| id.to_string()) [INFO] [stdout] 1604 - .into_iter(), [INFO] [stdout] 1603 + .map(|id| id.to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `map` over `inspect` [INFO] [stdout] --> src/tasks.rs:1626:57 [INFO] [stdout] | [INFO] [stdout] 1626 | self.current.and_then(|id| self.tasks.get(&id)).map(|t| { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_inspect [INFO] [stdout] = note: `#[warn(clippy::manual_inspect)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1626 ~ self.current.and_then(|id| self.tasks.get(&id)).inspect(|t| { [INFO] [stdout] 1627 ~ self.current = t.parent_id().cloned(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `slice` [INFO] [stdout] --> src/kinds.rs:65:34 [INFO] [stdout] | [INFO] [stdout] 65 | let mut vec = tag.as_slice().into_iter(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `nostr_sdk::Kind` [INFO] [stdout] --> src/kinds.rs:79:23 [INFO] [stdout] | [INFO] [stdout] 79 | EventBuilder::new(Kind::from(TRACKING_KIND), "") [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `Kind::from()`: `TRACKING_KIND` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/kinds.rs:108:47 [INFO] [stdout] | [INFO] [stdout] 108 | if let Ok(key) = PublicKey::parse(&s[1..]) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/kinds.rs:107:9 [INFO] [stdout] | [INFO] [stdout] 107 | if s.starts_with('@') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 107 ~ if let Some() = s.strip_prefix('@') { [INFO] [stdout] 108 ~ if let Ok(key) = PublicKey::parse() { [INFO] [stdout] 109 | tags.push(Tag::public_key(key)); [INFO] [stdout] 110 | return false; [INFO] [stdout] 111 ~ } else if let Some((key, _)) = users.find_user().first() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/kinds.rs:120:30 [INFO] [stdout] | [INFO] [stdout] 120 | if let Ok(num) = s[1..].parse::() { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/kinds.rs:115:16 [INFO] [stdout] | [INFO] [stdout] 115 | } else if s.starts_with('*') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 115 ~ } else if let Some() = s.strip_prefix('*') { [INFO] [stdout] 116 | if s.len() == 1 { [INFO] [stdout] ... [INFO] [stdout] 119 | } [INFO] [stdout] 120 ~ if let Ok(num) = .parse::() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/kinds.rs:130:55 [INFO] [stdout] | [INFO] [stdout] 130 | .chain(split.flatten().map(|s| to_hashtag_tag(&s))) [INFO] [stdout] | ^^ help: change this to: `s` [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: large size difference between variants [INFO] [stdout] --> src/event_sender.rs:15:1 [INFO] [stdout] | [INFO] [stdout] 15 | / pub(crate) enum MostrMessage { [INFO] [stdout] 16 | | NewRelay(RelayUrl), [INFO] [stdout] | | ------------------ the second-largest variant contains at least 96 bytes [INFO] [stdout] 17 | | SendTask(RelayUrl, Event), [INFO] [stdout] | | ------------------------- the largest variant contains at least 376 bytes [INFO] [stdout] 18 | | } [INFO] [stdout] | |_^ the entire enum is at least 376 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] 17 - SendTask(RelayUrl, Event), [INFO] [stdout] 17 + SendTask(RelayUrl, Box), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/hashtag.rs:51:18 [INFO] [stdout] | [INFO] [stdout] 51 | .map(|s| Hashtag::from(s)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Hashtag::from` [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: non-canonical implementation of `partial_cmp` on an `Ord` type [INFO] [stdout] --> src/hashtag.rs:82:1 [INFO] [stdout] | [INFO] [stdout] 82 | / impl PartialOrd for Hashtag { [INFO] [stdout] 83 | | fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 84 | | Some(self.lowercased.cmp(&other.lowercased)) [INFO] [stdout] 85 | | } [INFO] [stdout] 86 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#non_canonical_partial_ord_impl [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 83 - fn partial_cmp(&self, other: &Self) -> Option { [INFO] [stdout] 84 - Some(self.lowercased.cmp(&other.lowercased)) [INFO] [stdout] 85 - } [INFO] [stdout] 83 + fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/main.rs:71:52 [INFO] [stdout] | [INFO] [stdout] 71 | return Ok(SecretKey::from_slice(&pass).map(|s| Keys::new(s)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: replace the closure with the associated function itself: `Keys::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 expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:145:100 [INFO] [stdout] | [INFO] [stdout] 145 | if let Ok(Some(keys)) = fs::read_to_string(key_file.as_path()).map(|s| or_warn!(Keys::from_str(&s.trim()))) { [INFO] [stdout] | ^^^^^^^^^ help: change this to: `s.trim()` [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: `flatten()` will run forever if the iterator repeatedly produces an `Err` [INFO] [stdout] --> src/main.rs:198:79 [INFO] [stdout] | [INFO] [stdout] 198 | _ => match File::open(&relays_file).map(|f| BufReader::new(f).lines().flatten()) { [INFO] [stdout] | ^^^^^^^^^ help: replace with: `map_while(Result::ok)` [INFO] [stdout] | [INFO] [stdout] note: this expression returning a `std::io::Lines` may produce an infinite number of `Err` in case of a read error [INFO] [stdout] --> src/main.rs:198:53 [INFO] [stdout] | [INFO] [stdout] 198 | _ => match File::open(&relays_file).map(|f| BufReader::new(f).lines().flatten()) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#lines_filter_map_ok [INFO] [stdout] = note: `#[warn(clippy::lines_filter_map_ok)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/main.rs:580:33 [INFO] [stdout] | [INFO] [stdout] 580 | / ... if !arg.starts_with('|') { [INFO] [stdout] 581 | | ... if tasks.make_dependent_sibling(arg) { [INFO] [stdout] 582 | | ... break 'arm; [INFO] [stdout] 583 | | ... } [INFO] [stdout] 584 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 580 ~ if !arg.starts_with('|') [INFO] [stdout] 581 ~ && tasks.make_dependent_sibling(arg) { [INFO] [stdout] 582 | break 'arm; [INFO] [stdout] 583 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:658:36 [INFO] [stdout] | [INFO] [stdout] 658 | ... if remaining.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!remaining.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: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:666:82 [INFO] [stdout] | [INFO] [stdout] 666 | ... let (label, mut times) = tasks.times_tracked_for(&key); [INFO] [stdout] | ^^^^ help: change this to: `key` [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: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/main.rs:712:37 [INFO] [stdout] | [INFO] [stdout] 712 | / ... tasks.filter_or_create(pos, &remaining) [INFO] [stdout] 713 | | ... .map(|id| tasks.move_to(Some(id))); [INFO] [stdout] | |____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 712 - tasks.filter_or_create(pos, &remaining) [INFO] [stdout] 713 - .map(|id| tasks.move_to(Some(id))); [INFO] [stdout] 712 + if let Some(id) = tasks.filter_or_create(pos, &remaining) { tasks.move_to(Some(id)) } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:712:65 [INFO] [stdout] | [INFO] [stdout] 712 | ... tasks.filter_or_create(pos, &remaining) [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `remaining` [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/main.rs:746:76 [INFO] [stdout] | [INFO] [stdout] 746 | ... transform(&t.get_title()).contains(&remaining) || [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `remaining` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:748:68 [INFO] [stdout] | [INFO] [stdout] 748 | ... |tag| tag.contains(&remaining)) [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `remaining` [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: compiling a regex in a loop [INFO] [stdout] --> src/main.rs:762:28 [INFO] [stdout] | [INFO] [stdout] 762 | if Regex::new("^wss?://").unwrap().is_match(command.trim()) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: move the regex construction outside this loop [INFO] [stdout] --> src/main.rs:314:12 [INFO] [stdout] | [INFO] [stdout] 314 | 'repl: loop { [INFO] [stdout] | ^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#regex_creation_in_loops [INFO] [stdout] = note: `#[warn(clippy::regex_creation_in_loops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:45:72 [INFO] [stdout] | [INFO] [stdout] 45 | fn children_of<'a>(&'a self, task: &'a Task) -> impl Iterator + 'a; [INFO] [stdout] | -- -- ^^^^^ -- the same lifetime is named here [INFO] [stdout] | | | | [INFO] [stdout] | | the lifetime is named here the same lifetime is elided here [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 45 | fn children_of<'a>(&'a self, task: &'a Task) -> impl Iterator + 'a; [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:46:78 [INFO] [stdout] | [INFO] [stdout] 46 | fn children_for<'a>(&'a self, id: Option) -> impl Iterator + 'a; [INFO] [stdout] | -- ^^^^^ -- the same lifetime is named here [INFO] [stdout] | | | [INFO] [stdout] | the lifetime is named here the same lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 46 | fn children_for<'a>(&'a self, id: Option) -> impl Iterator + 'a; [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:50:72 [INFO] [stdout] | [INFO] [stdout] 50 | fn children_of<'a>(&'a self, task: &'a Task) -> impl Iterator + 'a { [INFO] [stdout] | -- -- ^^^^^ -- the same lifetime is named here [INFO] [stdout] | | | | [INFO] [stdout] | | the lifetime is named here the same lifetime is elided here [INFO] [stdout] | the lifetime is named here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 50 | fn children_of<'a>(&'a self, task: &'a Task) -> impl Iterator + 'a { [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:54:78 [INFO] [stdout] | [INFO] [stdout] 54 | fn children_for<'a>(&'a self, id: Option) -> impl Iterator + 'a { [INFO] [stdout] | -- ^^^^^ -- the same lifetime is named here [INFO] [stdout] | | | [INFO] [stdout] | the lifetime is named here the same lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 54 | fn children_for<'a>(&'a self, id: Option) -> impl Iterator + 'a { [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/tasks.rs:488:25 [INFO] [stdout] | [INFO] [stdout] 488 | fn traverse_up_from(&self, id: Option) -> ParentIterator { [INFO] [stdout] | ^^^^^ ^^^^^^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 488 | fn traverse_up_from(&self, id: Option) -> ParentIterator<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: eliding a lifetime that's named elsewhere is confusing [INFO] [stdout] --> src/tasks/durations.rs:19:26 [INFO] [stdout] | [INFO] [stdout] 18 | ids: &'a [EventId], [INFO] [stdout] | -- the lifetime is named here [INFO] [stdout] 19 | ) -> impl Iterator)> { [INFO] [stdout] | ^^^^^^^^^^ the same lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 19 | ) -> impl Iterator)> { [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 45.79s [INFO] running `Command { std: "docker" "inspect" "f73876e16ac51dc4f2b3c7dc4ca6f7c521d3ed75e4955487aa9c93aa8bc646b7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f73876e16ac51dc4f2b3c7dc4ca6f7c521d3ed75e4955487aa9c93aa8bc646b7", kill_on_drop: false }` [INFO] [stdout] f73876e16ac51dc4f2b3c7dc4ca6f7c521d3ed75e4955487aa9c93aa8bc646b7