[INFO] cloning repository https://github.com/noahsabaj/mermaid-cli [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/noahsabaj/mermaid-cli" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnoahsabaj%2Fmermaid-cli", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnoahsabaj%2Fmermaid-cli'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 89effe7b3ca7a19a01b4d50d15cd60cc3af2335f [INFO] linting noahsabaj/mermaid-cli against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fnoahsabaj%2Fmermaid-cli" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/noahsabaj/mermaid-cli [INFO] finished tweaking git repo https://github.com/noahsabaj/mermaid-cli [INFO] tweaked toml for git repo https://github.com/noahsabaj/mermaid-cli written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/noahsabaj/mermaid-cli 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/noahsabaj/mermaid-cli already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded env_home v0.1.0 [INFO] [stderr] Downloaded which v8.0.0 [INFO] [stderr] Downloaded instability v0.3.11 [INFO] [stderr] Downloaded zmij v1.0.18 [INFO] [stderr] Downloaded toml v0.9.11+spec-1.1.0 [INFO] [stderr] Downloaded pulldown-cmark-escape v0.11.0 [INFO] [stderr] Downloaded by_address v1.2.1 [INFO] [stderr] Downloaded numtoa v0.2.4 [INFO] [stderr] Downloaded fsevent-sys v4.1.0 [INFO] [stderr] Downloaded kqueue-sys v1.0.4 [INFO] [stderr] Downloaded notify-types v2.1.0 [INFO] [stderr] Downloaded directories v6.0.0 [INFO] [stderr] Downloaded globset v0.4.18 [INFO] [stderr] Downloaded clap v4.5.56 [INFO] [stderr] Downloaded ignore v0.4.25 [INFO] [stderr] Downloaded tui-textarea v0.7.0 [INFO] [stderr] Downloaded zerocopy-derive v0.8.37 [INFO] [stderr] Downloaded reqwest v0.13.1 [INFO] [stderr] Downloaded pest v2.8.5 [INFO] [stderr] Downloaded security-framework v3.5.1 [INFO] [stderr] Downloaded clap_builder v4.5.56 [INFO] [stderr] Downloaded pulldown-cmark v0.13.0 [INFO] [stderr] Downloaded cc v1.2.55 [INFO] [stderr] Downloaded pest_derive v2.8.5 [INFO] [stderr] Downloaded git2 v0.20.4 [INFO] [stderr] Downloaded palette v0.7.6 [INFO] [stderr] Downloaded zerocopy v0.8.37 [INFO] [stderr] Downloaded aws-lc-rs v1.15.4 [INFO] [stderr] Downloaded kqueue v1.1.1 [INFO] [stderr] Downloaded notify v8.2.0 [INFO] [stderr] Downloaded termion v4.0.6 [INFO] [stderr] Downloaded rustls v0.23.36 [INFO] [stderr] Downloaded pest_meta v2.8.5 [INFO] [stderr] Downloaded fast-srgb8 v1.0.0 [INFO] [stderr] Downloaded wasm-bindgen-futures v0.4.58 [INFO] [stderr] Downloaded winsafe v0.0.19 [INFO] [stderr] Downloaded inotify v0.11.0 [INFO] [stderr] Downloaded ratatui-termion v0.1.0 [INFO] [stderr] Downloaded pest_generator v2.8.5 [INFO] [stderr] Downloaded palette_derive v0.7.6 [INFO] [stderr] Downloaded libssh2-sys v0.3.1 [INFO] [stderr] Downloaded web-sys v0.3.85 [INFO] [stderr] Downloaded libz-sys v1.1.23 [INFO] [stderr] Downloaded libgit2-sys v0.18.3+1.9.2 [INFO] [stderr] Downloaded openssl-src v300.5.5+3.5.5 [INFO] [stderr] Downloaded aws-lc-sys v0.37.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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] c6a14c000a7e31cdd8b5ba25aee6b5c400df219e340e454e102e3fe6d76a01db [INFO] running `Command { std: "docker" "start" "-a" "c6a14c000a7e31cdd8b5ba25aee6b5c400df219e340e454e102e3fe6d76a01db", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "c6a14c000a7e31cdd8b5ba25aee6b5c400df219e340e454e102e3fe6d76a01db", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c6a14c000a7e31cdd8b5ba25aee6b5c400df219e340e454e102e3fe6d76a01db", kill_on_drop: false }` [INFO] [stdout] c6a14c000a7e31cdd8b5ba25aee6b5c400df219e340e454e102e3fe6d76a01db [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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] a87cafc1a594df4848b9cb8eac8f255284cd787698a80f1532c58e90e1003335 [INFO] running `Command { std: "docker" "start" "-a" "a87cafc1a594df4848b9cb8eac8f255284cd787698a80f1532c58e90e1003335", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.106 [INFO] [stderr] Compiling quote v1.0.44 [INFO] [stderr] Compiling libc v0.2.180 [INFO] [stderr] Compiling find-msvc-tools v0.1.9 [INFO] [stderr] Checking log v0.4.29 [INFO] [stderr] Checking smallvec v1.15.1 [INFO] [stderr] Checking bitflags v2.10.0 [INFO] [stderr] Checking itoa v1.0.17 [INFO] [stderr] Checking bytes v1.11.0 [INFO] [stderr] Compiling dunce v1.0.5 [INFO] [stderr] Compiling fs_extra v1.3.0 [INFO] [stderr] Compiling siphasher v1.0.2 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Checking castaway v0.2.4 [INFO] [stderr] Checking futures-channel v0.3.31 [INFO] [stderr] Compiling aws-lc-rs v1.15.4 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Checking writeable v0.6.2 [INFO] [stderr] Checking litemap v0.8.1 [INFO] [stderr] Checking unicode-segmentation v1.12.0 [INFO] [stderr] Compiling phf_shared v0.11.3 [INFO] [stderr] Checking ryu v1.0.22 [INFO] [stderr] Checking zeroize v1.8.2 [INFO] [stderr] Checking foldhash v0.2.0 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling icu_properties_data v2.1.2 [INFO] [stderr] Checking slab v0.4.12 [INFO] [stderr] Compiling icu_normalizer_data v2.1.1 [INFO] [stderr] Checking hashbrown v0.16.1 [INFO] [stderr] Checking rustls-pki-types v1.14.0 [INFO] [stderr] Compiling by_address v1.2.1 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Compiling palette v0.7.6 [INFO] [stderr] Checking approx v0.5.1 [INFO] [stderr] Checking itertools v0.14.0 [INFO] [stderr] Checking tracing-core v0.1.36 [INFO] [stderr] Checking aho-corasick v1.1.4 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Checking http v1.4.0 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Compiling phf_generator v0.11.3 [INFO] [stderr] Checking regex-syntax v0.8.8 [INFO] [stderr] Checking percent-encoding v2.3.2 [INFO] [stderr] Checking fast-srgb8 v1.0.0 [INFO] [stderr] Compiling httparse v1.10.1 [INFO] [stderr] Checking lru v0.16.3 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Checking compact_str v0.9.0 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Checking tower-service v0.3.3 [INFO] [stderr] Checking powerfmt v0.2.0 [INFO] [stderr] Checking subtle v2.6.1 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Checking atomic-waker v1.1.2 [INFO] [stderr] Checking deranged v0.5.5 [INFO] [stderr] Checking num-conv v0.2.0 [INFO] [stderr] Checking linux-raw-sys v0.4.15 [INFO] [stderr] Compiling zmij v1.0.18 [INFO] [stderr] Checking time-core v0.1.8 [INFO] [stderr] Checking num_threads v0.1.7 [INFO] [stderr] Checking hashbrown v0.15.5 [INFO] [stderr] Checking anstyle-parse v0.2.7 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Checking form_urlencoded v1.2.2 [INFO] [stderr] Checking line-clipping v0.3.5 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking itertools v0.13.0 [INFO] [stderr] Checking sync_wrapper v1.0.2 [INFO] [stderr] Checking colorchoice v1.0.4 [INFO] [stderr] Checking base64 v0.22.1 [INFO] [stderr] Checking same-file v1.0.6 [INFO] [stderr] Checking anstyle v1.0.13 [INFO] [stderr] Compiling cc v1.2.55 [INFO] [stderr] Checking openssl-probe v0.2.1 [INFO] [stderr] Checking ipnet v2.11.0 [INFO] [stderr] Checking errno v0.3.14 [INFO] [stderr] Checking mio v1.1.1 [INFO] [stderr] Checking parking_lot_core v0.9.12 [INFO] [stderr] Checking signal-hook-registry v1.4.8 [INFO] [stderr] Checking socket2 v0.6.2 [INFO] [stderr] Checking is_terminal_polyfill v1.70.2 [INFO] [stderr] Checking anstyle-query v1.1.5 [INFO] [stderr] Checking unicode-width v0.1.14 [INFO] [stderr] Checking signal-hook v0.3.18 [INFO] [stderr] Checking tower-layer v0.3.3 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Checking anstream v0.6.21 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Checking parking_lot v0.12.5 [INFO] [stderr] Checking rustls-native-certs v0.8.3 [INFO] [stderr] Checking regex-automata v0.4.13 [INFO] [stderr] Checking crossbeam-epoch v0.9.18 [INFO] [stderr] Checking inotify-sys v0.1.5 [INFO] [stderr] Checking walkdir v2.5.0 [INFO] [stderr] Checking crypto-common v0.1.7 [INFO] [stderr] Checking block-buffer v0.10.4 [INFO] [stderr] Checking signal-hook-mio v0.2.5 [INFO] [stderr] Checking unicode-truncate v2.0.1 [INFO] [stderr] Checking time v0.3.46 [INFO] [stderr] Checking compact_str v0.8.1 [INFO] [stderr] Checking bstr v1.12.1 [INFO] [stderr] Checking iri-string v0.7.10 [INFO] [stderr] Checking cassowary v0.3.0 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Compiling pulldown-cmark v0.13.0 [INFO] [stderr] Checking clap_lex v0.7.7 [INFO] [stderr] Compiling cmake v0.1.57 [INFO] [stderr] Compiling openssl-src v300.5.5+3.5.5 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Checking inotify v0.11.0 [INFO] [stderr] Checking dirs-sys v0.5.0 [INFO] [stderr] Checking toml_parser v1.0.6+spec-1.1.0 [INFO] [stderr] Checking clap_builder v4.5.56 [INFO] [stderr] Checking crossbeam-deque v0.8.6 [INFO] [stderr] Checking toml_datetime v0.7.5+spec-1.1.0 [INFO] [stderr] Checking serde_spanned v1.0.4 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Checking tracing-log v0.2.0 [INFO] [stderr] Checking notify-types v2.1.0 [INFO] [stderr] Checking getopts v0.2.24 [INFO] [stderr] Checking thread_local v1.1.9 [INFO] [stderr] Checking unicode-truncate v1.1.0 [INFO] [stderr] Checking nu-ansi-term v0.50.3 [INFO] [stderr] Checking iana-time-zone v0.1.65 [INFO] [stderr] Checking unicase v2.9.0 [INFO] [stderr] Checking pulldown-cmark-escape v0.11.0 [INFO] [stderr] Checking env_home v0.1.0 [INFO] [stderr] Checking openssl-probe v0.1.6 [INFO] [stderr] Checking cpufeatures v0.2.17 [INFO] [stderr] Checking toml_writer v1.0.6+spec-1.1.0 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Checking notify v8.2.0 [INFO] [stderr] Checking sha2 v0.10.9 [INFO] [stderr] Checking directories v6.0.0 [INFO] [stderr] Checking rustc-hash v2.1.1 [INFO] [stderr] Compiling aws-lc-sys v0.37.0 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Compiling libz-sys v1.1.23 [INFO] [stderr] Compiling libssh2-sys v0.3.1 [INFO] [stderr] Compiling lz4-sys v1.11.1+lz4-1.10.0 [INFO] [stderr] Compiling libgit2-sys v0.18.3+1.9.2 [INFO] [stderr] Checking which v8.0.0 [INFO] [stderr] Checking toml v0.9.11+spec-1.1.0 [INFO] [stderr] Checking tempfile v3.24.0 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Checking matchers v0.2.0 [INFO] [stderr] Checking globset v0.4.18 [INFO] [stderr] Checking regex v1.12.2 [INFO] [stderr] Checking ignore v0.4.25 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling phf_macros v0.11.3 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Compiling palette_derive v0.7.6 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Checking phf v0.11.3 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking tokio v1.49.0 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Checking kasuari v0.4.11 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking derive_more v2.1.1 [INFO] [stderr] Checking crossterm v0.29.0 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking tracing-subscriber v0.3.22 [INFO] [stderr] Checking zerovec v0.11.5 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Checking strum v0.27.2 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking clap v4.5.56 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Checking ratatui v0.29.0 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking bincode v1.3.3 [INFO] [stderr] Checking chrono v0.4.43 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking tower v0.5.3 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking tokio-stream v0.1.18 [INFO] [stderr] Checking tui-textarea v0.7.0 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking hyper-util v0.1.19 [INFO] [stderr] Checking lz4 v1.28.1 [INFO] [stderr] Checking ratatui-core v0.1.0 [INFO] [stderr] Checking ratatui-widgets v0.3.0 [INFO] [stderr] Checking ratatui-crossterm v0.1.0 [INFO] [stderr] Checking ratatui-macros v0.7.0 [INFO] [stderr] Checking ratatui v0.30.0 [INFO] [stderr] Checking rustls-webpki v0.103.9 [INFO] [stderr] Checking tokio-rustls v0.26.4 [INFO] [stderr] Checking rustls-platform-verifier v0.6.2 [INFO] [stderr] Checking hyper-rustls v0.27.7 [INFO] [stderr] Checking reqwest v0.13.1 [INFO] [stderr] Checking git2 v0.20.4 [INFO] [stderr] Checking mermaid-cli v0.3.9 (/opt/rustwide/workdir) [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/clipboard.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// system tool (xclip or wl-paste) to read clipboard contents. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use anyhow::{Context, Result}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_doc_comments)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Clipboard access for image and text paste [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Auto-detects X11 or Wayland display server and uses the appropriate [INFO] [stdout] 4 ~ //! system tool (xclip or wl-paste) to read clipboard contents. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/context/context.rs:7:1 [INFO] [stdout] | [INFO] [stdout] 7 | / /// - Project context building [INFO] [stdout] 8 | | [INFO] [stdout] | |_^ [INFO] [stdout] 9 | use anyhow::Result; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Unified context management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Single module that handles: [INFO] [stdout] 4 ~ //! - File collection and caching [INFO] [stdout] 5 ~ //! - Change detection for dynamic reloading [INFO] [stdout] 6 ~ //! - Token counting and content loading [INFO] [stdout] 7 ~ //! - Project context building [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/adapters/mod.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Contains implementations of the Model trait for Ollama. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | pub mod ollama; [INFO] [stdout] | -------------- the comment documents this module [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Provider adapters module [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Contains implementations of the Model trait for Ollama. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/adapters/ollama.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// health monitoring, and zero-unwrap error handling. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use async_trait::async_trait; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Ollama model adapter [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Provides unified interface to Ollama (both local and cloud) with connection pooling, [INFO] [stdout] 4 ~ //! health monitoring, and zero-unwrap error handling. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/backend.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// the appropriate adapter implementing the Model trait. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use std::sync::Arc; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Model factory - creates model instances from identifiers [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Parses model identifiers like "ollama/llama3" and creates [INFO] [stdout] 4 ~ //! the appropriate adapter implementing the Model trait. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/config.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// with a single, coherent, backend-agnostic configuration structure. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use crate::prompts; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Unified configuration system for models and backends [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Replaces the fragmented app::Config + models::ModelConfig split [INFO] [stdout] 4 ~ //! with a single, coherent, backend-agnostic configuration structure. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/error.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// that enable proper recovery, retry logic, and user-friendly messages. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use serde::{Deserialize, Serialize}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Comprehensive error types for the model system [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Replaces scattered anyhow::Error usage with structured, actionable errors [INFO] [stdout] 4 ~ //! that enable proper recovery, retry logic, and user-friendly messages. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/factory.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// configuration conversion and delegates to the internal ModelFactory. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use super::backend::ModelFactory as InternalFactory; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Factory for creating model instances [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! This factory provides the public API for creating models. It handles [INFO] [stdout] 4 ~ //! configuration conversion and delegates to the internal ModelFactory. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/traits.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Adapters implement this trait directly. No intermediate layers. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use async_trait::async_trait; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Core Model trait - the single interface for model interactions [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Adapters implement this trait directly. No intermediate layers. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/tool_call.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// them to Mermaid's internal AgentAction enum. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use anyhow::{anyhow, Result}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Tool call parsing and conversion to AgentAction [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Handles deserialization of Ollama tool_calls responses and converts [INFO] [stdout] 4 ~ //! them to Mermaid's internal AgentAction enum. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/tools.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// replacing the legacy text-based action block system. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use serde::{Deserialize, Serialize}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Ollama Tools API support for native function calling [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! This module defines Mermaid's available tools in Ollama's JSON Schema format, [INFO] [stdout] 4 ~ //! replacing the legacy text-based action block system. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/clipboard.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// system tool (xclip or wl-paste) to read clipboard contents. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use anyhow::{Context, Result}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_doc_comments)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Clipboard access for image and text paste [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Auto-detects X11 or Wayland display server and uses the appropriate [INFO] [stdout] 4 ~ //! system tool (xclip or wl-paste) to read clipboard contents. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/context/context.rs:7:1 [INFO] [stdout] | [INFO] [stdout] 7 | / /// - Project context building [INFO] [stdout] 8 | | [INFO] [stdout] | |_^ [INFO] [stdout] 9 | use anyhow::Result; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Unified context management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Single module that handles: [INFO] [stdout] 4 ~ //! - File collection and caching [INFO] [stdout] 5 ~ //! - Change detection for dynamic reloading [INFO] [stdout] 6 ~ //! - Token counting and content loading [INFO] [stdout] 7 ~ //! - Project context building [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/prompts.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// Focuses on tool usage, not coding practices - trust the model. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | pub const SYSTEM_PROMPT_TEMPLATE: &str = r#"You are Mermaid, an AI coding assistant. Terse, expert, action-oriented. [INFO] [stdout] | -------------------------------- the comment documents this constant item [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! System prompt for Mermaid AI assistant [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Teaches the model how to use Mermaid's tools and interface. [INFO] [stdout] 4 ~ //! Focuses on tool usage, not coding practices - trust the model. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/adapters/mod.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Contains implementations of the Model trait for Ollama. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | pub mod ollama; [INFO] [stdout] | -------------- the comment documents this module [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Provider adapters module [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Contains implementations of the Model trait for Ollama. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/adapters/ollama.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// health monitoring, and zero-unwrap error handling. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use async_trait::async_trait; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Ollama model adapter [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Provides unified interface to Ollama (both local and cloud) with connection pooling, [INFO] [stdout] 4 ~ //! health monitoring, and zero-unwrap error handling. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/backend.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// the appropriate adapter implementing the Model trait. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use std::sync::Arc; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Model factory - creates model instances from identifiers [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Parses model identifiers like "ollama/llama3" and creates [INFO] [stdout] 4 ~ //! the appropriate adapter implementing the Model trait. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/config.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// with a single, coherent, backend-agnostic configuration structure. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use crate::prompts; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Unified configuration system for models and backends [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Replaces the fragmented app::Config + models::ModelConfig split [INFO] [stdout] 4 ~ //! with a single, coherent, backend-agnostic configuration structure. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/action_handler.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// UI displays for the results. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use crate::agents::{ [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Tool call execution for the agent loop [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! This module handles executing Ollama native tool calls and building [INFO] [stdout] 4 ~ //! UI displays for the results. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/error.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// that enable proper recovery, retry logic, and user-friendly messages. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use serde::{Deserialize, Serialize}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Comprehensive error types for the model system [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Replaces scattered anyhow::Error usage with structured, actionable errors [INFO] [stdout] 4 ~ //! that enable proper recovery, retry logic, and user-friendly messages. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/app.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// focused modules in src/tui/state/. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use std::collections::VecDeque; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Application coordinator [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Thin coordinator that composes state modules. All state is delegated to [INFO] [stdout] 4 ~ //! focused modules in src/tui/state/. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/factory.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// configuration conversion and delegates to the internal ModelFactory. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use super::backend::ModelFactory as InternalFactory; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Factory for creating model instances [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! This factory provides the public API for creating models. It handles [INFO] [stdout] 4 ~ //! configuration conversion and delegates to the internal ModelFactory. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/traits.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Adapters implement this trait directly. No intermediate layers. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use async_trait::async_trait; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Core Model trait - the single interface for model interactions [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Adapters implement this trait directly. No intermediate layers. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block is too nested [INFO] [stdout] --> src/tui/loop_coordinator.rs:115:90 [INFO] [stdout] | [INFO] [stdout] 115 | ... if key.kind == crossterm::event::KeyEventKind::Press { [INFO] [stdout] | ____________________________________________________________________________^ [INFO] [stdout] 116 | | ... match key.code { [INFO] [stdout] 117 | | ... crossterm::event::KeyCode::Esc => { [INFO] [stdout] ... | [INFO] [stdout] 154 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: try refactoring your code to minimize nesting [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#excessive_nesting [INFO] [stdout] = note: `#[warn(clippy::excessive_nesting)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/tool_call.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// them to Mermaid's internal AgentAction enum. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use anyhow::{anyhow, Result}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Tool call parsing and conversion to AgentAction [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Handles deserialization of Ollama tool_calls responses and converts [INFO] [stdout] 4 ~ //! them to Mermaid's internal AgentAction enum. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/mod.rs:11:1 [INFO] [stdout] | [INFO] [stdout] 11 | / /// - input: User input buffer [INFO] [stdout] 12 | | [INFO] [stdout] | |_^ [INFO] [stdout] 13 | pub mod attachment; [INFO] [stdout] | ------------------ the comment documents this module [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! State management modules for the TUI [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Splits the App god object into focused, composable state modules: [INFO] [stdout] 4 ~ //! - generation: State machine for model interactions [INFO] [stdout] 5 ~ //! - error: Structured error logging [INFO] [stdout] 6 ~ //! - conversation: Chat messages and history [INFO] [stdout] 7 ~ //! - model: LLM configuration [INFO] [stdout] 8 ~ //! - ui: Visual presentation [INFO] [stdout] 9 ~ //! - operation: Modes and confirmations [INFO] [stdout] 10 ~ //! - status: Status messages [INFO] [stdout] 11 ~ //! - input: User input buffer [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/attachment.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Manages pending image attachments before they are sent with a message. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use base64::{engine::general_purpose, Engine as _}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Attachment state for image paste support [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Manages pending image attachments before they are sent with a message. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/conversation.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Handles chat messages, history, and persistence. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::collections::VecDeque; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Conversation state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Handles chat messages, history, and persistence. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/error.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Structured error logging with severity levels. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::time::Instant; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Error types for the UI layer [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Structured error logging with severity levels. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/generation.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Tracks the application lifecycle during model interactions. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::time::Instant; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Generation state machine [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Tracks the application lifecycle during model interactions. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/input.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// User input buffer and cursor handling. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | /// Input state - user input buffer and cursor [INFO] [stdout] 6 | pub struct InputBuffer { [INFO] [stdout] | ---------------------- the comment documents this struct [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Input state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! User input buffer and cursor handling. [INFO] [stdout] | [INFO] [stdout] help: if the documentation should include the empty line include it in the comment [INFO] [stdout] | [INFO] [stdout] 4 | /// [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/model.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Handles LLM configuration and identity. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::sync::Arc; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Model state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Handles LLM configuration and identity. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/operation.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Minimal state for tracking active operations. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::collections::VecDeque; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Operation state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Minimal state for tracking active operations. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/status.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// UI status messages and timing. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::time::Instant; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Status state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! UI status messages and timing. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/ui.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Visual presentation and widget states. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use crate::tui::theme::Theme; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! UI state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Visual presentation and widget states. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/models/tools.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// replacing the legacy text-based action block system. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use serde::{Deserialize, Serialize}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Ollama Tools API support for native function calling [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! This module defines Mermaid's available tools in Ollama's JSON Schema format, [INFO] [stdout] 4 ~ //! replacing the legacy text-based action block system. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/prompts.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// Focuses on tool usage, not coding practices - trust the model. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | pub const SYSTEM_PROMPT_TEMPLATE: &str = r#"You are Mermaid, an AI coding assistant. Terse, expert, action-oriented. [INFO] [stdout] | -------------------------------- the comment documents this constant item [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! System prompt for Mermaid AI assistant [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Teaches the model how to use Mermaid's tools and interface. [INFO] [stdout] 4 ~ //! Focuses on tool usage, not coding practices - trust the model. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/widgets/attachment.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// Shows help text for navigation: "(↑ to select)" normally, or navigation hints when focused. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use ratatui::{ [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Attachment indicator widget [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Renders [Image #N] indicators above the input box when images are attached. [INFO] [stdout] 4 ~ //! Shows help text for navigation: "(↑ to select)" normally, or navigation hints when focused. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/utils/checks.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// rather than cryptic failures during execution. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use std::path::Path; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Preemptive checks for service availability [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! These checks run BEFORE operations to provide clear, early error messages [INFO] [stdout] 4 ~ //! rather than cryptic failures during execution. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/action_handler.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// UI displays for the results. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use crate::agents::{ [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Tool call execution for the agent loop [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! This module handles executing Ollama native tool calls and building [INFO] [stdout] 4 ~ //! UI displays for the results. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/app.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// focused modules in src/tui/state/. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use std::collections::VecDeque; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Application coordinator [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Thin coordinator that composes state modules. All state is delegated to [INFO] [stdout] 4 ~ //! focused modules in src/tui/state/. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this block is too nested [INFO] [stdout] --> src/tui/loop_coordinator.rs:115:90 [INFO] [stdout] | [INFO] [stdout] 115 | ... if key.kind == crossterm::event::KeyEventKind::Press { [INFO] [stdout] | ____________________________________________________________________________^ [INFO] [stdout] 116 | | ... match key.code { [INFO] [stdout] 117 | | ... crossterm::event::KeyCode::Esc => { [INFO] [stdout] ... | [INFO] [stdout] 154 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: try refactoring your code to minimize nesting [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#excessive_nesting [INFO] [stdout] = note: `#[warn(clippy::excessive_nesting)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/mod.rs:11:1 [INFO] [stdout] | [INFO] [stdout] 11 | / /// - input: User input buffer [INFO] [stdout] 12 | | [INFO] [stdout] | |_^ [INFO] [stdout] 13 | pub mod attachment; [INFO] [stdout] | ------------------ the comment documents this module [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! State management modules for the TUI [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Splits the App god object into focused, composable state modules: [INFO] [stdout] 4 ~ //! - generation: State machine for model interactions [INFO] [stdout] 5 ~ //! - error: Structured error logging [INFO] [stdout] 6 ~ //! - conversation: Chat messages and history [INFO] [stdout] 7 ~ //! - model: LLM configuration [INFO] [stdout] 8 ~ //! - ui: Visual presentation [INFO] [stdout] 9 ~ //! - operation: Modes and confirmations [INFO] [stdout] 10 ~ //! - status: Status messages [INFO] [stdout] 11 ~ //! - input: User input buffer [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/attachment.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Manages pending image attachments before they are sent with a message. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use base64::{engine::general_purpose, Engine as _}; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Attachment state for image paste support [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Manages pending image attachments before they are sent with a message. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/conversation.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Handles chat messages, history, and persistence. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::collections::VecDeque; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Conversation state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Handles chat messages, history, and persistence. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/error.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Structured error logging with severity levels. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::time::Instant; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Error types for the UI layer [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Structured error logging with severity levels. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/generation.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Tracks the application lifecycle during model interactions. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::time::Instant; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Generation state machine [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Tracks the application lifecycle during model interactions. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/input.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// User input buffer and cursor handling. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | /// Input state - user input buffer and cursor [INFO] [stdout] 6 | pub struct InputBuffer { [INFO] [stdout] | ---------------------- the comment documents this struct [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Input state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! User input buffer and cursor handling. [INFO] [stdout] | [INFO] [stdout] help: if the documentation should include the empty line include it in the comment [INFO] [stdout] | [INFO] [stdout] 4 | /// [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/model.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Handles LLM configuration and identity. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::sync::Arc; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Model state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Handles LLM configuration and identity. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/operation.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Minimal state for tracking active operations. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::collections::VecDeque; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Operation state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Minimal state for tracking active operations. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/status.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// UI status messages and timing. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use std::time::Instant; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Status state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! UI status messages and timing. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/state/ui.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | / /// Visual presentation and widget states. [INFO] [stdout] 4 | | [INFO] [stdout] | |_^ [INFO] [stdout] 5 | use crate::tui::theme::Theme; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! UI state management [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Visual presentation and widget states. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/tui/widgets/attachment.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// Shows help text for navigation: "(↑ to select)" normally, or navigation hints when focused. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use ratatui::{ [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Attachment indicator widget [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! Renders [Image #N] indicators above the input box when images are attached. [INFO] [stdout] 4 ~ //! Shows help text for navigation: "(↑ to select)" normally, or navigation hints when focused. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after doc comment [INFO] [stdout] --> src/utils/checks.rs:4:1 [INFO] [stdout] | [INFO] [stdout] 4 | / /// rather than cryptic failures during execution. [INFO] [stdout] 5 | | [INFO] [stdout] | |_^ [INFO] [stdout] 6 | use std::path::Path; [INFO] [stdout] | - the comment documents this `use` import [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] help: if the comment should document the parent module use an inner doc comment [INFO] [stdout] | [INFO] [stdout] 1 ~ //! Preemptive checks for service availability [INFO] [stdout] 2 ~ //! [INFO] [stdout] 3 ~ //! These checks run BEFORE operations to provide clear, early error messages [INFO] [stdout] 4 ~ //! rather than cryptic failures during execution. [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/agents/action_executor.rs:347:42 [INFO] [stdout] | [INFO] [stdout] 347 | let end = result.content.floor_char_boundary(8000); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] = note: `#[warn(clippy::incompatible_msrv)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|p| p.as_str())` on an `Option` value [INFO] [stdout] --> src/agents/action_executor.rs:399:24 [INFO] [stdout] | [INFO] [stdout] 399 | let path_str = path.as_ref().map(|p| p.as_str()).unwrap_or("*"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `path.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] = note: `#[warn(clippy::option_as_ref_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/agents/git.rs:71:41 [INFO] [stdout] | [INFO] [stdout] 71 | } else if status.is_index_new() { [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 72 | | format!(" staged: {}", path) [INFO] [stdout] 73 | | } else if status.is_index_modified() { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/agents/git.rs:73:46 [INFO] [stdout] | [INFO] [stdout] 73 | } else if status.is_index_modified() { [INFO] [stdout] | ______________________________________________^ [INFO] [stdout] 74 | | format!(" staged: {}", path) [INFO] [stdout] 75 | | } else if status.is_index_deleted() { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/agents/git.rs:73:46 [INFO] [stdout] | [INFO] [stdout] 73 | } else if status.is_index_modified() { [INFO] [stdout] | ______________________________________________^ [INFO] [stdout] 74 | | format!(" staged: {}", path) [INFO] [stdout] 75 | | } else if status.is_index_deleted() { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/agents/git.rs:75:45 [INFO] [stdout] | [INFO] [stdout] 75 | } else if status.is_index_deleted() { [INFO] [stdout] | _____________________________________________^ [INFO] [stdout] 76 | | format!(" staged: {}", path) [INFO] [stdout] 77 | | } else if status.is_conflicted() { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/agents/web_search.rs:253:35 [INFO] [stdout] | [INFO] [stdout] 253 | let truncate_at = content.floor_char_boundary(max_chars); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/app/config.rs:52:1 [INFO] [stdout] | [INFO] [stdout] 52 | / impl Default for Config { [INFO] [stdout] 53 | | fn default() -> Self { [INFO] [stdout] 54 | | Self { [INFO] [stdout] 55 | | last_used_model: None, [INFO] [stdout] ... | [INFO] [stdout] 67 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 10 + #[derive(Default)] [INFO] [stdout] 11 | pub struct Config { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/agents/action_executor.rs:347:42 [INFO] [stdout] | [INFO] [stdout] 347 | let end = result.content.floor_char_boundary(8000); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] = note: `#[warn(clippy::incompatible_msrv)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.as_ref().map(|p| p.as_str())` on an `Option` value [INFO] [stdout] --> src/agents/action_executor.rs:399:24 [INFO] [stdout] | [INFO] [stdout] 399 | let path_str = path.as_ref().map(|p| p.as_str()).unwrap_or("*"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using as_deref: `path.as_deref()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_as_ref_deref [INFO] [stdout] = note: `#[warn(clippy::option_as_ref_deref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/clipboard.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | / if std::env::var("WAYLAND_DISPLAY").is_ok() { [INFO] [stdout] 20 | | if Command::new("which") [INFO] [stdout] 21 | | .arg("wl-paste") [INFO] [stdout] 22 | | .output() [INFO] [stdout] ... | [INFO] [stdout] 28 | | } [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] 19 ~ if std::env::var("WAYLAND_DISPLAY").is_ok() [INFO] [stdout] 20 ~ && Command::new("which") [INFO] [stdout] 21 | .arg("wl-paste") [INFO] [stdout] ... [INFO] [stdout] 26 | return Some(DisplayServer::Wayland); [INFO] [stdout] 27 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/clipboard.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | / if std::env::var("DISPLAY").is_ok() { [INFO] [stdout] 32 | | if Command::new("which") [INFO] [stdout] 33 | | .arg("xclip") [INFO] [stdout] 34 | | .output() [INFO] [stdout] ... | [INFO] [stdout] 40 | | } [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] 31 ~ if std::env::var("DISPLAY").is_ok() [INFO] [stdout] 32 ~ && Command::new("which") [INFO] [stdout] 33 | .arg("xclip") [INFO] [stdout] ... [INFO] [stdout] 38 | return Some(DisplayServer::X11); [INFO] [stdout] 39 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/context/mod.rs:5:1 [INFO] [stdout] | [INFO] [stdout] 5 | mod context; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/context/file_collector.rs:90:24 [INFO] [stdout] | [INFO] [stdout] 90 | if config [INFO] [stdout] | ________________________^ [INFO] [stdout] 91 | | .priority_extensions [INFO] [stdout] 92 | | .iter() [INFO] [stdout] 93 | | .any(|&e| e == ext_str.as_str()) [INFO] [stdout] | |________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains [INFO] [stdout] = note: `#[warn(clippy::manual_contains)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 90 ~ if config [INFO] [stdout] 91 + .priority_extensions.contains(&ext_str.as_str()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/context/token_counter.rs:24:9 [INFO] [stdout] | [INFO] [stdout] 24 | (text.len() + 3) / 4 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `text.len().div_ceil(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> src/models/adapters/ollama.rs:164:5 [INFO] [stdout] | [INFO] [stdout] 164 | / fn process_stream_chunk( [INFO] [stdout] 165 | | &self, [INFO] [stdout] 166 | | json_chunk: &OllamaStreamChunk, [INFO] [stdout] 167 | | callback: &StreamCallback, [INFO] [stdout] ... | [INFO] [stdout] 173 | | completion_tokens: &mut usize, [INFO] [stdout] 174 | | ) { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/agents/git.rs:71:41 [INFO] [stdout] | [INFO] [stdout] 71 | } else if status.is_index_new() { [INFO] [stdout] | _________________________________________^ [INFO] [stdout] 72 | | format!(" staged: {}", path) [INFO] [stdout] 73 | | } else if status.is_index_modified() { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/agents/git.rs:73:46 [INFO] [stdout] | [INFO] [stdout] 73 | } else if status.is_index_modified() { [INFO] [stdout] | ______________________________________________^ [INFO] [stdout] 74 | | format!(" staged: {}", path) [INFO] [stdout] 75 | | } else if status.is_index_deleted() { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/agents/git.rs:73:46 [INFO] [stdout] | [INFO] [stdout] 73 | } else if status.is_index_modified() { [INFO] [stdout] | ______________________________________________^ [INFO] [stdout] 74 | | format!(" staged: {}", path) [INFO] [stdout] 75 | | } else if status.is_index_deleted() { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/agents/git.rs:75:45 [INFO] [stdout] | [INFO] [stdout] 75 | } else if status.is_index_deleted() { [INFO] [stdout] | _____________________________________________^ [INFO] [stdout] 76 | | format!(" staged: {}", path) [INFO] [stdout] 77 | | } else if status.is_conflicted() { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `result` after checking its variant with `is_ok` [INFO] [stdout] --> src/agents/git.rs:170:26 [INFO] [stdout] | [INFO] [stdout] 169 | if result.is_ok() { [INFO] [stdout] | ----------------- help: try: `if let Ok() = result` [INFO] [stdout] 170 | let status = result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `result` after checking its variant with `is_ok` [INFO] [stdout] --> src/agents/git.rs:184:24 [INFO] [stdout] | [INFO] [stdout] 183 | if result.is_ok() { [INFO] [stdout] | ----------------- help: try: `if let Ok() = result` [INFO] [stdout] 184 | let diff = result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `result` after checking its variant with `is_ok` [INFO] [stdout] --> src/agents/git.rs:211:26 [INFO] [stdout] | [INFO] [stdout] 210 | if result.is_ok() { [INFO] [stdout] | ----------------- help: try: `if let Ok() = result` [INFO] [stdout] 211 | let status = result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `result` after checking its variant with `is_ok` [INFO] [stdout] --> src/agents/git.rs:243:26 [INFO] [stdout] | [INFO] [stdout] 242 | if result.is_ok() { [INFO] [stdout] | ----------------- help: try: `if let Ok() = result` [INFO] [stdout] 243 | let status = result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `result` after checking its variant with `is_ok` [INFO] [stdout] --> src/agents/git.rs:281:26 [INFO] [stdout] | [INFO] [stdout] 278 | if result.is_ok() { [INFO] [stdout] | ----------------- help: try: `if let Ok() = result` [INFO] [stdout] ... [INFO] [stdout] 281 | let status = result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/models/adapters/ollama.rs:504:80 [INFO] [stdout] | [INFO] [stdout] 504 | if normalized.starts_with("http://") && !normalized[7..].contains(':') { [INFO] [stdout] | ________________________________________________________________________________^ [INFO] [stdout] 505 | | normalized = format!("{}:11434", normalized); [INFO] [stdout] 506 | | } else if normalized.starts_with("https://") && !normalized[8..].contains(':') { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/models/adapters/ollama.rs:506:88 [INFO] [stdout] | [INFO] [stdout] 506 | } else if normalized.starts_with("https://") && !normalized[8..].contains(':') { [INFO] [stdout] | ________________________________________________________________________________________^ [INFO] [stdout] 507 | | normalized = format!("{}:11434", normalized); [INFO] [stdout] 508 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/models/config.rs:88:14 [INFO] [stdout] | [INFO] [stdout] 88 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/agents/web_search.rs:253:35 [INFO] [stdout] | [INFO] [stdout] 253 | let truncate_at = content.floor_char_boundary(max_chars); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.80.0` [INFO] [stdout] --> src/models/tools.rs:33:28 [INFO] [stdout] | [INFO] [stdout] 33 | static OLLAMA_TOOLS_CACHE: LazyLock> = LazyLock::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable in a `const` context since `1.80.0` [INFO] [stdout] --> src/models/tools.rs:33:63 [INFO] [stdout] | [INFO] [stdout] 33 | static OLLAMA_TOOLS_CACHE: LazyLock> = LazyLock::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.80.0` [INFO] [stdout] --> src/models/tools.rs:33:63 [INFO] [stdout] | [INFO] [stdout] 33 | static OLLAMA_TOOLS_CACHE: LazyLock> = LazyLock::new(|| { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/app/config.rs:52:1 [INFO] [stdout] | [INFO] [stdout] 52 | / impl Default for Config { [INFO] [stdout] 53 | | fn default() -> Self { [INFO] [stdout] 54 | | Self { [INFO] [stdout] 55 | | last_used_model: None, [INFO] [stdout] ... | [INFO] [stdout] 67 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute [INFO] [stdout] | [INFO] [stdout] 10 + #[derive(Default)] [INFO] [stdout] 11 | pub struct Config { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/runtime/non_interactive.rs:356:21 [INFO] [stdout] | [INFO] [stdout] 356 | output.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `output.push('\n')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/runtime/non_interactive.rs:364:21 [INFO] [stdout] | [INFO] [stdout] 364 | output.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `output.push('\n')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/session/conversation.rs:77:50 [INFO] [stdout] | [INFO] [stdout] 77 | let end = first_user_msg.content.floor_char_boundary(60); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/session/conversation.rs:174:9 [INFO] [stdout] | [INFO] [stdout] 174 | conversations.sort_by(|a, b| b.updated_at.cmp(&a.updated_at)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 174 - conversations.sort_by(|a, b| b.updated_at.cmp(&a.updated_at)); [INFO] [stdout] 174 + conversations.sort_by_key(|b| std::cmp::Reverse(b.updated_at)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/session/selector.rs:79:21 [INFO] [stdout] | [INFO] [stdout] 79 | / if app.selected < app.conversations.len() - 1 { [INFO] [stdout] 80 | | app.selected += 1; [INFO] [stdout] 81 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 78 ~ KeyCode::Down | KeyCode::Char('j') [INFO] [stdout] 79 ~ if app.selected < app.conversations.len() - 1 => { [INFO] [stdout] 80 | app.selected += 1; [INFO] [stdout] 81 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/session/selector.rs:84:21 [INFO] [stdout] | [INFO] [stdout] 84 | / if app.selected > 0 { [INFO] [stdout] 85 | | app.selected -= 1; [INFO] [stdout] 86 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 83 ~ KeyCode::Up | KeyCode::Char('k') [INFO] [stdout] 84 ~ if app.selected > 0 => { [INFO] [stdout] 85 | app.selected -= 1; [INFO] [stdout] 86 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/tui/app.rs:66:65 [INFO] [stdout] | [INFO] [stdout] 66 | let input_history: std::collections::VecDeque = conversation_manager [INFO] [stdout] | _________________________________________________________________^ [INFO] [stdout] 67 | | .as_ref() [INFO] [stdout] 68 | | .and_then(|_| current_conversation.as_ref()) [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 `and` instead [INFO] [stdout] | [INFO] [stdout] 68 - .and_then(|_| current_conversation.as_ref()) [INFO] [stdout] 68 + .and(current_conversation.as_ref()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/tui/app.rs:351:9 [INFO] [stdout] | [INFO] [stdout] 351 | config.model = self.model_state.model_id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `models::config::ModelConfig { model: self.model_state.model_id.clone(), ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/tui/app.rs:350:9 [INFO] [stdout] | [INFO] [stdout] 350 | let mut config = ModelConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/clipboard.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | / if std::env::var("WAYLAND_DISPLAY").is_ok() { [INFO] [stdout] 20 | | if Command::new("which") [INFO] [stdout] 21 | | .arg("wl-paste") [INFO] [stdout] 22 | | .output() [INFO] [stdout] ... | [INFO] [stdout] 28 | | } [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] 19 ~ if std::env::var("WAYLAND_DISPLAY").is_ok() [INFO] [stdout] 20 ~ && Command::new("which") [INFO] [stdout] 21 | .arg("wl-paste") [INFO] [stdout] ... [INFO] [stdout] 26 | return Some(DisplayServer::Wayland); [INFO] [stdout] 27 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/clipboard.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | / if std::env::var("DISPLAY").is_ok() { [INFO] [stdout] 32 | | if Command::new("which") [INFO] [stdout] 33 | | .arg("xclip") [INFO] [stdout] 34 | | .output() [INFO] [stdout] ... | [INFO] [stdout] 40 | | } [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] 31 ~ if std::env::var("DISPLAY").is_ok() [INFO] [stdout] 32 ~ && Command::new("which") [INFO] [stdout] 33 | .arg("xclip") [INFO] [stdout] ... [INFO] [stdout] 38 | return Some(DisplayServer::X11); [INFO] [stdout] 39 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/context/mod.rs:5:1 [INFO] [stdout] | [INFO] [stdout] 5 | mod context; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/tui/loop_coordinator.rs:273:9 [INFO] [stdout] | [INFO] [stdout] 273 | config.model = model_id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `models::config::ModelConfig { model: model_id.clone(), thinking_enabled: thinking_enabled, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/tui/loop_coordinator.rs:272:9 [INFO] [stdout] | [INFO] [stdout] 272 | let mut config = ModelConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/tui/loop_coordinator.rs:408:17 [INFO] [stdout] | [INFO] [stdout] 408 | config.model = model_id; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `models::config::ModelConfig { model: model_id, thinking_enabled: thinking_enabled, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/tui/loop_coordinator.rs:407:17 [INFO] [stdout] | [INFO] [stdout] 407 | let mut config = ModelConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/tui/loop_coordinator.rs:511:13 [INFO] [stdout] | [INFO] [stdout] 511 | config.model = model_id; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `models::config::ModelConfig { model: model_id, thinking_enabled: thinking_enabled, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/tui/loop_coordinator.rs:510:13 [INFO] [stdout] | [INFO] [stdout] 510 | let mut config = ModelConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/markdown.rs:271:17 [INFO] [stdout] | [INFO] [stdout] 271 | / if !current_line_spans.is_empty() { [INFO] [stdout] 272 | | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 273 | | [INFO] [stdout] 274 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 270 ~ Event::SoftBreak | Event::HardBreak [INFO] [stdout] 271 ~ if !current_line_spans.is_empty() => { [INFO] [stdout] 272 | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 273 | [INFO] [stdout] 274 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/tui/markdown.rs:50:25 [INFO] [stdout] | [INFO] [stdout] 44 | / let style = match level { [INFO] [stdout] 45 | | HeadingLevel::H1 => Style::new().fg(Color::Cyan).bold(), [INFO] [stdout] 46 | | HeadingLevel::H2 => Style::new().fg(Color::Blue).bold(), [INFO] [stdout] 47 | | HeadingLevel::H3 => Style::new().fg(Color::Green).bold(), [INFO] [stdout] 48 | | _ => Style::new().fg(Color::Yellow).bold(), [INFO] [stdout] 49 | | }; [INFO] [stdout] | |__________________________- unnecessary `let` binding [INFO] [stdout] 50 | style [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 44 ~ [INFO] [stdout] 45 ~ match level { [INFO] [stdout] 46 + HeadingLevel::H1 => Style::new().fg(Color::Cyan).bold(), [INFO] [stdout] 47 + HeadingLevel::H2 => Style::new().fg(Color::Blue).bold(), [INFO] [stdout] 48 + HeadingLevel::H3 => Style::new().fg(Color::Green).bold(), [INFO] [stdout] 49 + _ => Style::new().fg(Color::Yellow).bold(), [INFO] [stdout] 50 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/markdown.rs:141:25 [INFO] [stdout] | [INFO] [stdout] 141 | / if !current_line_spans.is_empty() { [INFO] [stdout] 142 | | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 143 | | [INFO] [stdout] 144 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 140 ~ TagEnd::Heading(_) [INFO] [stdout] 141 ~ if !current_line_spans.is_empty() => { [INFO] [stdout] 142 | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] ... [INFO] [stdout] 146 | // Blank line before next heading is added by Tag::Heading [INFO] [stdout] 147 ~ , [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/markdown.rs:149:25 [INFO] [stdout] | [INFO] [stdout] 149 | / if !current_line_spans.is_empty() { [INFO] [stdout] 150 | | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 151 | | [INFO] [stdout] 152 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 148 ~ TagEnd::Paragraph | TagEnd::Item [INFO] [stdout] 149 ~ if !current_line_spans.is_empty() => { [INFO] [stdout] 150 | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 151 | [INFO] [stdout] 152 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/markdown.rs:242:25 [INFO] [stdout] | [INFO] [stdout] 242 | / if !current_line_spans.is_empty() { [INFO] [stdout] 243 | | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 244 | | [INFO] [stdout] 245 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 241 ~ TagEnd::BlockQuote(_) [INFO] [stdout] 242 ~ if !current_line_spans.is_empty() => { [INFO] [stdout] 243 | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 244 | [INFO] [stdout] 245 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `contains()` instead of `iter().any()` is more efficient [INFO] [stdout] --> src/context/file_collector.rs:90:24 [INFO] [stdout] | [INFO] [stdout] 90 | if config [INFO] [stdout] | ________________________^ [INFO] [stdout] 91 | | .priority_extensions [INFO] [stdout] 92 | | .iter() [INFO] [stdout] 93 | | .any(|&e| e == ext_str.as_str()) [INFO] [stdout] | |________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains [INFO] [stdout] = note: `#[warn(clippy::manual_contains)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 90 ~ if config [INFO] [stdout] 91 + .priority_extensions.contains(&ext_str.as_str()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/context/token_counter.rs:24:9 [INFO] [stdout] | [INFO] [stdout] 24 | (text.len() + 3) / 4 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `text.len().div_ceil(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] = note: `#[warn(clippy::manual_div_ceil)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.80.0` [INFO] [stdout] --> src/tui/render.rs:56:22 [INFO] [stdout] | [INFO] [stdout] 56 | static LAYOUT_CACHE: LazyLock> = LazyLock::new(|| Mutex::new(LayoutCache::new())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable in a `const` context since `1.80.0` [INFO] [stdout] --> src/tui/render.rs:56:53 [INFO] [stdout] | [INFO] [stdout] 56 | static LAYOUT_CACHE: LazyLock> = LazyLock::new(|| Mutex::new(LayoutCache::new())); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.80.0` [INFO] [stdout] --> src/tui/render.rs:56:53 [INFO] [stdout] | [INFO] [stdout] 56 | static LAYOUT_CACHE: LazyLock> = LazyLock::new(|| Mutex::new(LayoutCache::new())); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `AttachmentState` [INFO] [stdout] --> src/tui/state/attachment.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | / pub fn new() -> Self { [INFO] [stdout] 28 | | Self { [INFO] [stdout] 29 | | attachments: Vec::new(), [INFO] [stdout] 30 | | next_id: 1, [INFO] [stdout] 31 | | } [INFO] [stdout] 32 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 26 + impl Default for AttachmentState { [INFO] [stdout] 27 + fn default() -> Self { [INFO] [stdout] 28 + Self::new() [INFO] [stdout] 29 + } [INFO] [stdout] 30 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (9/7) [INFO] [stdout] --> src/models/adapters/ollama.rs:164:5 [INFO] [stdout] | [INFO] [stdout] 164 | / fn process_stream_chunk( [INFO] [stdout] 165 | | &self, [INFO] [stdout] 166 | | json_chunk: &OllamaStreamChunk, [INFO] [stdout] 167 | | callback: &StreamCallback, [INFO] [stdout] ... | [INFO] [stdout] 173 | | completion_tokens: &mut usize, [INFO] [stdout] 174 | | ) { [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/tui/stream_handler.rs:191:48 [INFO] [stdout] | [INFO] [stdout] 191 | let end = app.current_response.floor_char_boundary(MAX_RESPONSE_CHARS); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/models/adapters/ollama.rs:504:80 [INFO] [stdout] | [INFO] [stdout] 504 | if normalized.starts_with("http://") && !normalized[7..].contains(':') { [INFO] [stdout] | ________________________________________________________________________________^ [INFO] [stdout] 505 | | normalized = format!("{}:11434", normalized); [INFO] [stdout] 506 | | } else if normalized.starts_with("https://") && !normalized[8..].contains(':') { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/models/adapters/ollama.rs:506:88 [INFO] [stdout] | [INFO] [stdout] 506 | } else if normalized.starts_with("https://") && !normalized[8..].contains(':') { [INFO] [stdout] | ________________________________________________________________________________________^ [INFO] [stdout] 507 | | normalized = format!("{}:11434", normalized); [INFO] [stdout] 508 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/models/config.rs:88:14 [INFO] [stdout] | [INFO] [stdout] 88 | .or_insert_with(HashMap::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `extend` instead of `append` for adding the full range of a second vector [INFO] [stdout] --> src/tui/widgets/chat.rs:494:33 [INFO] [stdout] | [INFO] [stdout] 494 | ... new_spans.extend(parsed_line.spans.drain(..)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `new_spans.append(&mut parsed_line.spans)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extend_with_drain [INFO] [stdout] = note: `#[warn(clippy::extend_with_drain)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/tui/widgets/input.rs:58:50 [INFO] [stdout] | [INFO] [stdout] 58 | let safe_width = chars_remaining.floor_char_boundary(line_width); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/tui/widgets/input.rs:263:46 [INFO] [stdout] | [INFO] [stdout] 263 | let safe_width = chars_remaining.floor_char_boundary(line_width); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tui/widgets/input.rs:285:27 [INFO] [stdout] | [INFO] [stdout] 285 | chars_remaining = &chars_remaining[break_point..].trim_start(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `chars_remaining[break_point..].trim_start()` [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: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/tui/widgets/status_line.rs:89:34 [INFO] [stdout] | [INFO] [stdout] 89 | let end = queued.floor_char_boundary(max_len.saturating_sub(3)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/utils/file_watcher.rs:46:21 [INFO] [stdout] | [INFO] [stdout] 46 | / if !event.paths.is_empty() { [INFO] [stdout] 47 | | events.push(FileEvent::Created(event.paths)); [INFO] [stdout] 48 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 45 ~ EventKind::Create(_) [INFO] [stdout] 46 ~ if !event.paths.is_empty() => { [INFO] [stdout] 47 | events.push(FileEvent::Created(event.paths)); [INFO] [stdout] 48 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/utils/file_watcher.rs:63:21 [INFO] [stdout] | [INFO] [stdout] 63 | / if !event.paths.is_empty() { [INFO] [stdout] 64 | | events.push(FileEvent::Deleted(event.paths)); [INFO] [stdout] 65 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 62 ~ EventKind::Remove(_) [INFO] [stdout] 63 ~ if !event.paths.is_empty() => { [INFO] [stdout] 64 | events.push(FileEvent::Deleted(event.paths)); [INFO] [stdout] 65 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/utils/file_watcher.rs:55:29 [INFO] [stdout] | [INFO] [stdout] 55 | / ... if !event.paths.is_empty() { [INFO] [stdout] 56 | | ... events.push(FileEvent::Modified(event.paths)); [INFO] [stdout] 57 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 54 ~ ModifyKind::Data(_) | ModifyKind::Any [INFO] [stdout] 55 ~ if !event.paths.is_empty() => { [INFO] [stdout] 56 | events.push(FileEvent::Modified(event.paths)); [INFO] [stdout] 57 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `if let` [INFO] [stdout] --> src/utils/file_watcher.rs:89:21 [INFO] [stdout] | [INFO] [stdout] 89 | / match parent_str { [INFO] [stdout] 90 | | "target" | "node_modules" | "__pycache__" | ".git" | "dist" | "build" [INFO] [stdout] 91 | | | ".venv" | "venv" => return true, [INFO] [stdout] 92 | | _ => {}, [INFO] [stdout] 93 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> src/utils/file_watcher.rs:88:29 [INFO] [stdout] | [INFO] [stdout] 88 | if let Some(parent_str) = parent_name.to_str() { [INFO] [stdout] | ^^^^^^^^^^ replace this binding [INFO] [stdout] 89 | match parent_str { [INFO] [stdout] 90 | / "target" | "node_modules" | "__pycache__" | ".git" | "dist" | "build" [INFO] [stdout] 91 | | | ".venv" | "venv" => return true, [INFO] [stdout] | |__________________________________________^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `if let` [INFO] [stdout] --> src/utils/file_watcher.rs:101:17 [INFO] [stdout] | [INFO] [stdout] 101 | / match ext_str { [INFO] [stdout] 102 | | // Allow common text and code files [INFO] [stdout] 103 | | "txt" | "md" | "rs" | "toml" | "yaml" | "yml" | "json" | "js" | "ts" [INFO] [stdout] 104 | | | "jsx" | "tsx" | "py" | "go" | "java" | "c" | "cpp" | "h" | "hpp" | "sh" [INFO] [stdout] ... | [INFO] [stdout] 108 | | _ => true, [INFO] [stdout] 109 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> src/utils/file_watcher.rs:100:25 [INFO] [stdout] | [INFO] [stdout] 100 | if let Some(ext_str) = ext.to_str() { [INFO] [stdout] | ^^^^^^^ replace this binding [INFO] [stdout] ... [INFO] [stdout] 103 | / "txt" | "md" | "rs" | "toml" | "yaml" | "yml" | "json" | "js" | "ts" [INFO] [stdout] 104 | | | "jsx" | "tsx" | "py" | "go" | "java" | "c" | "cpp" | "h" | "hpp" | "sh" [INFO] [stdout] 105 | | | "bash" | "zsh" | "fish" | "html" | "css" | "scss" | "xml" | "vue" [INFO] [stdout] 106 | | | "svelte" => false, [INFO] [stdout] | |______________________________^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/utils/tokenizer.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 19 | Ok((text.len() + 3) / 4) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `text.len().div_ceil(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/utils/tokenizer.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | Ok((total_chars + 3) / 4) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `total_chars.div_ceil(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/utils/tokenizer.rs:35:42 [INFO] [stdout] | [INFO] [stdout] 35 | if model_name.contains("gpt-4o") { [INFO] [stdout] | __________________________________________^ [INFO] [stdout] 36 | | 128000 [INFO] [stdout] 37 | | } else if model_name.contains("gpt-4-turbo") || model_name.contains("gpt-4-1106") { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/utils/tokenizer.rs:37:91 [INFO] [stdout] | [INFO] [stdout] 37 | } else if model_name.contains("gpt-4-turbo") || model_name.contains("gpt-4-1106") { [INFO] [stdout] | ___________________________________________________________________________________________^ [INFO] [stdout] 38 | | 128000 [INFO] [stdout] 39 | | } else if model_name.contains("gpt-4-32k") { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/utils/tokenizer.rs:59:47 [INFO] [stdout] | [INFO] [stdout] 59 | } else if model_name.contains("qwen") { [INFO] [stdout] | _______________________________________________^ [INFO] [stdout] 60 | | 32768 [INFO] [stdout] 61 | | } else if model_name.contains("mistral") || model_name.contains("mixtral") { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/utils/tokenizer.rs:61:84 [INFO] [stdout] | [INFO] [stdout] 61 | } else if model_name.contains("mistral") || model_name.contains("mixtral") { [INFO] [stdout] | ____________________________________________________________________________________^ [INFO] [stdout] 62 | | 32768 [INFO] [stdout] 63 | | } else { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/utils/tokenizer.rs:86:5 [INFO] [stdout] | [INFO] [stdout] 86 | (content.len() + 3) / 4 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `content.len().div_ceil(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.80.0` [INFO] [stdout] --> src/models/tools.rs:33:28 [INFO] [stdout] | [INFO] [stdout] 33 | static OLLAMA_TOOLS_CACHE: LazyLock> = LazyLock::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable in a `const` context since `1.80.0` [INFO] [stdout] --> src/models/tools.rs:33:63 [INFO] [stdout] | [INFO] [stdout] 33 | static OLLAMA_TOOLS_CACHE: LazyLock> = LazyLock::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.80.0` [INFO] [stdout] --> src/models/tools.rs:33:63 [INFO] [stdout] | [INFO] [stdout] 33 | static OLLAMA_TOOLS_CACHE: LazyLock> = LazyLock::new(|| { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/runtime/non_interactive.rs:356:21 [INFO] [stdout] | [INFO] [stdout] 356 | output.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `output.push('\n')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] = note: `#[warn(clippy::single_char_add_str)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/runtime/non_interactive.rs:364:21 [INFO] [stdout] | [INFO] [stdout] 364 | output.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `output.push('\n')` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_add_str [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/session/conversation.rs:77:50 [INFO] [stdout] | [INFO] [stdout] 77 | let end = first_user_msg.content.floor_char_boundary(60); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/session/conversation.rs:174:9 [INFO] [stdout] | [INFO] [stdout] 174 | conversations.sort_by(|a, b| b.updated_at.cmp(&a.updated_at)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 174 - conversations.sort_by(|a, b| b.updated_at.cmp(&a.updated_at)); [INFO] [stdout] 174 + conversations.sort_by_key(|b| std::cmp::Reverse(b.updated_at)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/session/selector.rs:79:21 [INFO] [stdout] | [INFO] [stdout] 79 | / if app.selected < app.conversations.len() - 1 { [INFO] [stdout] 80 | | app.selected += 1; [INFO] [stdout] 81 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 78 ~ KeyCode::Down | KeyCode::Char('j') [INFO] [stdout] 79 ~ if app.selected < app.conversations.len() - 1 => { [INFO] [stdout] 80 | app.selected += 1; [INFO] [stdout] 81 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/session/selector.rs:84:21 [INFO] [stdout] | [INFO] [stdout] 84 | / if app.selected > 0 { [INFO] [stdout] 85 | | app.selected -= 1; [INFO] [stdout] 86 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 83 ~ KeyCode::Up | KeyCode::Char('k') [INFO] [stdout] 84 ~ if app.selected > 0 => { [INFO] [stdout] 85 | app.selected -= 1; [INFO] [stdout] 86 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/tui/app.rs:66:65 [INFO] [stdout] | [INFO] [stdout] 66 | let input_history: std::collections::VecDeque = conversation_manager [INFO] [stdout] | _________________________________________________________________^ [INFO] [stdout] 67 | | .as_ref() [INFO] [stdout] 68 | | .and_then(|_| current_conversation.as_ref()) [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 `and` instead [INFO] [stdout] | [INFO] [stdout] 68 - .and_then(|_| current_conversation.as_ref()) [INFO] [stdout] 68 + .and(current_conversation.as_ref()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/tui/app.rs:351:9 [INFO] [stdout] | [INFO] [stdout] 351 | config.model = self.model_state.model_id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `models::config::ModelConfig { model: self.model_state.model_id.clone(), ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/tui/app.rs:350:9 [INFO] [stdout] | [INFO] [stdout] 350 | let mut config = ModelConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] = note: `#[warn(clippy::field_reassign_with_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/tui/loop_coordinator.rs:273:9 [INFO] [stdout] | [INFO] [stdout] 273 | config.model = model_id.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `models::config::ModelConfig { model: model_id.clone(), thinking_enabled: thinking_enabled, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/tui/loop_coordinator.rs:272:9 [INFO] [stdout] | [INFO] [stdout] 272 | let mut config = ModelConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/tui/loop_coordinator.rs:408:17 [INFO] [stdout] | [INFO] [stdout] 408 | config.model = model_id; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `models::config::ModelConfig { model: model_id, thinking_enabled: thinking_enabled, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/tui/loop_coordinator.rs:407:17 [INFO] [stdout] | [INFO] [stdout] 407 | let mut config = ModelConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field assignment outside of initializer for an instance created with Default::default() [INFO] [stdout] --> src/tui/loop_coordinator.rs:511:13 [INFO] [stdout] | [INFO] [stdout] 511 | config.model = model_id; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: consider initializing the variable with `models::config::ModelConfig { model: model_id, thinking_enabled: thinking_enabled, ..Default::default() }` and removing relevant reassignments [INFO] [stdout] --> src/tui/loop_coordinator.rs:510:13 [INFO] [stdout] | [INFO] [stdout] 510 | let mut config = ModelConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#field_reassign_with_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/markdown.rs:271:17 [INFO] [stdout] | [INFO] [stdout] 271 | / if !current_line_spans.is_empty() { [INFO] [stdout] 272 | | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 273 | | [INFO] [stdout] 274 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 270 ~ Event::SoftBreak | Event::HardBreak [INFO] [stdout] 271 ~ if !current_line_spans.is_empty() => { [INFO] [stdout] 272 | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 273 | [INFO] [stdout] 274 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/tui/markdown.rs:50:25 [INFO] [stdout] | [INFO] [stdout] 44 | / let style = match level { [INFO] [stdout] 45 | | HeadingLevel::H1 => Style::new().fg(Color::Cyan).bold(), [INFO] [stdout] 46 | | HeadingLevel::H2 => Style::new().fg(Color::Blue).bold(), [INFO] [stdout] 47 | | HeadingLevel::H3 => Style::new().fg(Color::Green).bold(), [INFO] [stdout] 48 | | _ => Style::new().fg(Color::Yellow).bold(), [INFO] [stdout] 49 | | }; [INFO] [stdout] | |__________________________- unnecessary `let` binding [INFO] [stdout] 50 | style [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 44 ~ [INFO] [stdout] 45 ~ match level { [INFO] [stdout] 46 + HeadingLevel::H1 => Style::new().fg(Color::Cyan).bold(), [INFO] [stdout] 47 + HeadingLevel::H2 => Style::new().fg(Color::Blue).bold(), [INFO] [stdout] 48 + HeadingLevel::H3 => Style::new().fg(Color::Green).bold(), [INFO] [stdout] 49 + _ => Style::new().fg(Color::Yellow).bold(), [INFO] [stdout] 50 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/markdown.rs:141:25 [INFO] [stdout] | [INFO] [stdout] 141 | / if !current_line_spans.is_empty() { [INFO] [stdout] 142 | | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 143 | | [INFO] [stdout] 144 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 140 ~ TagEnd::Heading(_) [INFO] [stdout] 141 ~ if !current_line_spans.is_empty() => { [INFO] [stdout] 142 | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] ... [INFO] [stdout] 146 | // Blank line before next heading is added by Tag::Heading [INFO] [stdout] 147 ~ , [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/markdown.rs:149:25 [INFO] [stdout] | [INFO] [stdout] 149 | / if !current_line_spans.is_empty() { [INFO] [stdout] 150 | | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 151 | | [INFO] [stdout] 152 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 148 ~ TagEnd::Paragraph | TagEnd::Item [INFO] [stdout] 149 ~ if !current_line_spans.is_empty() => { [INFO] [stdout] 150 | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 151 | [INFO] [stdout] 152 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/markdown.rs:242:25 [INFO] [stdout] | [INFO] [stdout] 242 | / if !current_line_spans.is_empty() { [INFO] [stdout] 243 | | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 244 | | [INFO] [stdout] 245 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 241 ~ TagEnd::BlockQuote(_) [INFO] [stdout] 242 ~ if !current_line_spans.is_empty() => { [INFO] [stdout] 243 | lines.push(Line::from(std::mem::take(&mut current_line_spans))); [INFO] [stdout] 244 | [INFO] [stdout] 245 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.80.0` [INFO] [stdout] --> src/tui/render.rs:56:22 [INFO] [stdout] | [INFO] [stdout] 56 | static LAYOUT_CACHE: LazyLock> = LazyLock::new(|| Mutex::new(LayoutCache::new())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable in a `const` context since `1.80.0` [INFO] [stdout] --> src/tui/render.rs:56:53 [INFO] [stdout] | [INFO] [stdout] 56 | static LAYOUT_CACHE: LazyLock> = LazyLock::new(|| Mutex::new(LayoutCache::new())); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.80.0` [INFO] [stdout] --> src/tui/render.rs:56:53 [INFO] [stdout] | [INFO] [stdout] 56 | static LAYOUT_CACHE: LazyLock> = LazyLock::new(|| Mutex::new(LayoutCache::new())); [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `AttachmentState` [INFO] [stdout] --> src/tui/state/attachment.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | / pub fn new() -> Self { [INFO] [stdout] 28 | | Self { [INFO] [stdout] 29 | | attachments: Vec::new(), [INFO] [stdout] 30 | | next_id: 1, [INFO] [stdout] 31 | | } [INFO] [stdout] 32 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 26 + impl Default for AttachmentState { [INFO] [stdout] 27 + fn default() -> Self { [INFO] [stdout] 28 + Self::new() [INFO] [stdout] 29 + } [INFO] [stdout] 30 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> tests/tui_behavior_tests.rs:238:5 [INFO] [stdout] | [INFO] [stdout] 238 | assert_eq!(idle.is_generating(), false); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_assert_comparison)]` on by default [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 238 - assert_eq!(idle.is_generating(), false); [INFO] [stdout] 238 + assert!(!idle.is_generating()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: used `assert_eq!` with a literal bool [INFO] [stdout] --> tests/tui_behavior_tests.rs:239:5 [INFO] [stdout] | [INFO] [stdout] 239 | assert_eq!(generating.is_generating(), true); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_assert_comparison [INFO] [stdout] help: replace it with `assert!(..)` [INFO] [stdout] | [INFO] [stdout] 239 - assert_eq!(generating.is_generating(), true); [INFO] [stdout] 239 + assert!(generating.is_generating()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/tui/stream_handler.rs:191:48 [INFO] [stdout] | [INFO] [stdout] 191 | let end = app.current_response.floor_char_boundary(MAX_RESPONSE_CHARS); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `extend` instead of `append` for adding the full range of a second vector [INFO] [stdout] --> src/tui/widgets/chat.rs:494:33 [INFO] [stdout] | [INFO] [stdout] 494 | ... new_spans.extend(parsed_line.spans.drain(..)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `new_spans.append(&mut parsed_line.spans)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extend_with_drain [INFO] [stdout] = note: `#[warn(clippy::extend_with_drain)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/tui/widgets/input.rs:58:50 [INFO] [stdout] | [INFO] [stdout] 58 | let safe_width = chars_remaining.floor_char_boundary(line_width); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/tui/widgets/input.rs:263:46 [INFO] [stdout] | [INFO] [stdout] 263 | let safe_width = chars_remaining.floor_char_boundary(line_width); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/tui/widgets/input.rs:285:27 [INFO] [stdout] | [INFO] [stdout] 285 | chars_remaining = &chars_remaining[break_point..].trim_start(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `chars_remaining[break_point..].trim_start()` [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: current MSRV (Minimum Supported Rust Version) is `1.75.0` but this item is stable since `1.91.0` [INFO] [stdout] --> src/tui/widgets/status_line.rs:89:34 [INFO] [stdout] | [INFO] [stdout] 89 | let end = queued.floor_char_boundary(max_len.saturating_sub(3)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#incompatible_msrv [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/utils/file_watcher.rs:46:21 [INFO] [stdout] | [INFO] [stdout] 46 | / if !event.paths.is_empty() { [INFO] [stdout] 47 | | events.push(FileEvent::Created(event.paths)); [INFO] [stdout] 48 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 45 ~ EventKind::Create(_) [INFO] [stdout] 46 ~ if !event.paths.is_empty() => { [INFO] [stdout] 47 | events.push(FileEvent::Created(event.paths)); [INFO] [stdout] 48 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/utils/file_watcher.rs:63:21 [INFO] [stdout] | [INFO] [stdout] 63 | / if !event.paths.is_empty() { [INFO] [stdout] 64 | | events.push(FileEvent::Deleted(event.paths)); [INFO] [stdout] 65 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 62 ~ EventKind::Remove(_) [INFO] [stdout] 63 ~ if !event.paths.is_empty() => { [INFO] [stdout] 64 | events.push(FileEvent::Deleted(event.paths)); [INFO] [stdout] 65 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/utils/file_watcher.rs:55:29 [INFO] [stdout] | [INFO] [stdout] 55 | / ... if !event.paths.is_empty() { [INFO] [stdout] 56 | | ... events.push(FileEvent::Modified(event.paths)); [INFO] [stdout] 57 | | ... } [INFO] [stdout] | |_______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 54 ~ ModifyKind::Data(_) | ModifyKind::Any [INFO] [stdout] 55 ~ if !event.paths.is_empty() => { [INFO] [stdout] 56 | events.push(FileEvent::Modified(event.paths)); [INFO] [stdout] 57 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `if let` [INFO] [stdout] --> src/utils/file_watcher.rs:89:21 [INFO] [stdout] | [INFO] [stdout] 89 | / match parent_str { [INFO] [stdout] 90 | | "target" | "node_modules" | "__pycache__" | ".git" | "dist" | "build" [INFO] [stdout] 91 | | | ".venv" | "venv" => return true, [INFO] [stdout] 92 | | _ => {}, [INFO] [stdout] 93 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> src/utils/file_watcher.rs:88:29 [INFO] [stdout] | [INFO] [stdout] 88 | if let Some(parent_str) = parent_name.to_str() { [INFO] [stdout] | ^^^^^^^^^^ replace this binding [INFO] [stdout] 89 | match parent_str { [INFO] [stdout] 90 | / "target" | "node_modules" | "__pycache__" | ".git" | "dist" | "build" [INFO] [stdout] 91 | | | ".venv" | "venv" => return true, [INFO] [stdout] | |__________________________________________^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` can be collapsed into the outer `if let` [INFO] [stdout] --> src/utils/file_watcher.rs:101:17 [INFO] [stdout] | [INFO] [stdout] 101 | / match ext_str { [INFO] [stdout] 102 | | // Allow common text and code files [INFO] [stdout] 103 | | "txt" | "md" | "rs" | "toml" | "yaml" | "yml" | "json" | "js" | "ts" [INFO] [stdout] 104 | | | "jsx" | "tsx" | "py" | "go" | "java" | "c" | "cpp" | "h" | "hpp" | "sh" [INFO] [stdout] ... | [INFO] [stdout] 108 | | _ => true, [INFO] [stdout] 109 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: the outer pattern can be modified to include the inner pattern [INFO] [stdout] --> src/utils/file_watcher.rs:100:25 [INFO] [stdout] | [INFO] [stdout] 100 | if let Some(ext_str) = ext.to_str() { [INFO] [stdout] | ^^^^^^^ replace this binding [INFO] [stdout] ... [INFO] [stdout] 103 | / "txt" | "md" | "rs" | "toml" | "yaml" | "yml" | "json" | "js" | "ts" [INFO] [stdout] 104 | | | "jsx" | "tsx" | "py" | "go" | "java" | "c" | "cpp" | "h" | "hpp" | "sh" [INFO] [stdout] 105 | | | "bash" | "zsh" | "fish" | "html" | "css" | "scss" | "xml" | "vue" [INFO] [stdout] 106 | | | "svelte" => false, [INFO] [stdout] | |______________________________^ with this pattern [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/utils/tokenizer.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 19 | Ok((text.len() + 3) / 4) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `text.len().div_ceil(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/utils/tokenizer.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | Ok((total_chars + 3) / 4) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `total_chars.div_ceil(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/utils/tokenizer.rs:35:42 [INFO] [stdout] | [INFO] [stdout] 35 | if model_name.contains("gpt-4o") { [INFO] [stdout] | __________________________________________^ [INFO] [stdout] 36 | | 128000 [INFO] [stdout] 37 | | } else if model_name.contains("gpt-4-turbo") || model_name.contains("gpt-4-1106") { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/utils/tokenizer.rs:37:91 [INFO] [stdout] | [INFO] [stdout] 37 | } else if model_name.contains("gpt-4-turbo") || model_name.contains("gpt-4-1106") { [INFO] [stdout] | ___________________________________________________________________________________________^ [INFO] [stdout] 38 | | 128000 [INFO] [stdout] 39 | | } else if model_name.contains("gpt-4-32k") { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> src/utils/tokenizer.rs:59:47 [INFO] [stdout] | [INFO] [stdout] 59 | } else if model_name.contains("qwen") { [INFO] [stdout] | _______________________________________________^ [INFO] [stdout] 60 | | 32768 [INFO] [stdout] 61 | | } else if model_name.contains("mistral") || model_name.contains("mixtral") { [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> src/utils/tokenizer.rs:61:84 [INFO] [stdout] | [INFO] [stdout] 61 | } else if model_name.contains("mistral") || model_name.contains("mixtral") { [INFO] [stdout] | ____________________________________________________________________________________^ [INFO] [stdout] 62 | | 32768 [INFO] [stdout] 63 | | } else { [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_same_then_else [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/utils/tokenizer.rs:86:5 [INFO] [stdout] | [INFO] [stdout] 86 | (content.len() + 3) / 4 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `content.len().div_ceil(4)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 40s [INFO] running `Command { std: "docker" "inspect" "a87cafc1a594df4848b9cb8eac8f255284cd787698a80f1532c58e90e1003335", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "a87cafc1a594df4848b9cb8eac8f255284cd787698a80f1532c58e90e1003335", kill_on_drop: false }` [INFO] [stdout] a87cafc1a594df4848b9cb8eac8f255284cd787698a80f1532c58e90e1003335