[INFO] cloning repository https://github.com/ashishtyagi10/axiom [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ashishtyagi10/axiom" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fashishtyagi10%2Faxiom", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fashishtyagi10%2Faxiom'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 3acbb8e487b9095806aff26a31b81ddd1edfba7d [INFO] linting ashishtyagi10/axiom against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fashishtyagi10%2Faxiom" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/ashishtyagi10/axiom [INFO] finished tweaking git repo https://github.com/ashishtyagi10/axiom [INFO] tweaked toml for git repo https://github.com/ashishtyagi10/axiom written to /workspace/builds/worker-6-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/ashishtyagi10/axiom 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/ashishtyagi10/axiom 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] Downloading crates ... [INFO] [stderr] Downloaded pulldown-cmark-escape v0.10.1 [INFO] [stderr] Downloaded zmij v1.0.11 [INFO] [stderr] Downloaded pulldown-cmark v0.10.3 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] b7d6e9d14bcf0bff780b9b438b8f487364b3f104cda78eef7cd5f522f5691970 [INFO] running `Command { std: "docker" "start" "-a" "b7d6e9d14bcf0bff780b9b438b8f487364b3f104cda78eef7cd5f522f5691970", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "b7d6e9d14bcf0bff780b9b438b8f487364b3f104cda78eef7cd5f522f5691970", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b7d6e9d14bcf0bff780b9b438b8f487364b3f104cda78eef7cd5f522f5691970", kill_on_drop: false }` [INFO] [stdout] b7d6e9d14bcf0bff780b9b438b8f487364b3f104cda78eef7cd5f522f5691970 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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] dc125c4dabe98fe2bdc6b6265c42168a4d1cec28fc152da83481e39ff0f213b6 [INFO] running `Command { std: "docker" "start" "-a" "dc125c4dabe98fe2bdc6b6265c42168a4d1cec28fc152da83481e39ff0f213b6", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.179 [INFO] [stderr] Compiling find-msvc-tools v0.1.6 [INFO] [stderr] Compiling syn v2.0.113 [INFO] [stderr] Compiling zmij v1.0.11 [INFO] [stderr] Checking regex-syntax v0.8.8 [INFO] [stderr] Compiling serde_json v1.0.148 [INFO] [stderr] Checking indexmap v2.12.1 [INFO] [stderr] Checking aho-corasick v1.1.4 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Checking webpki-roots v1.0.5 [INFO] [stderr] Checking http v1.4.0 [INFO] [stderr] Compiling vte_generate_state_changes v0.1.2 [INFO] [stderr] Checking shell-words v1.1.1 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Checking serde_bytes v0.11.19 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Checking webpki-roots v0.26.11 [INFO] [stderr] Compiling cc v1.2.51 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling mime_guess v2.0.5 [INFO] [stderr] Checking pxfm v0.1.27 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking hashbrown v0.15.5 [INFO] [stderr] Checking vte v0.11.1 [INFO] [stderr] Checking time v0.3.44 [INFO] [stderr] Checking png v0.18.0 [INFO] [stderr] Checking quick-xml v0.38.4 [INFO] [stderr] Checking bytemuck v1.24.0 [INFO] [stderr] Checking http-body v1.0.1 [INFO] [stderr] Checking x11rb-protocol v0.13.2 [INFO] [stderr] Compiling pulldown-cmark v0.10.3 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Checking compact_str v0.8.1 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Checking unicode-truncate v1.1.0 [INFO] [stderr] Checking yaml-rust v0.4.5 [INFO] [stderr] Checking getopts v0.2.24 [INFO] [stderr] Checking serde_path_to_error v0.1.20 [INFO] [stderr] Checking vt100 v0.15.2 [INFO] [stderr] Checking http-range-header v0.4.2 [INFO] [stderr] Checking cassowary v0.3.0 [INFO] [stderr] Checking pulldown-cmark-escape v0.10.1 [INFO] [stderr] Compiling nix v0.30.1 [INFO] [stderr] Checking regex-automata v0.4.13 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling onig_sys v69.9.1 [INFO] [stderr] Checking errno v0.3.14 [INFO] [stderr] Checking parking_lot_core v0.9.12 [INFO] [stderr] Checking mio v1.1.1 [INFO] [stderr] Checking getrandom v0.2.16 [INFO] [stderr] Checking socket2 v0.6.1 [INFO] [stderr] Checking serial-core v0.4.0 [INFO] [stderr] Checking ioctl-rs v0.1.6 [INFO] [stderr] Checking termios v0.2.2 [INFO] [stderr] Checking getrandom v0.3.4 [INFO] [stderr] Checking inotify-sys v0.1.5 [INFO] [stderr] Checking signal-hook-registry v1.4.8 [INFO] [stderr] Checking serial-unix v0.4.0 [INFO] [stderr] Checking mio v0.8.11 [INFO] [stderr] Checking inotify v0.9.6 [INFO] [stderr] Checking nix v0.25.1 [INFO] [stderr] Checking serial v0.4.0 [INFO] [stderr] Checking parking_lot v0.12.5 [INFO] [stderr] Checking dirs-sys v0.4.1 [INFO] [stderr] Checking filetime v0.2.26 [INFO] [stderr] Checking uuid v1.19.0 [INFO] [stderr] Checking rand_core v0.6.4 [INFO] [stderr] Checking signal-hook v0.3.18 [INFO] [stderr] Checking signal-hook-mio v0.2.5 [INFO] [stderr] Checking dirs v5.0.1 [INFO] [stderr] Checking open v5.3.3 [INFO] [stderr] Checking notify v6.1.1 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Checking rand_chacha v0.3.1 [INFO] [stderr] Checking moxcms v0.7.11 [INFO] [stderr] Checking rand v0.8.5 [INFO] [stderr] Checking ctrlc v3.5.1 [INFO] [stderr] Checking gethostname v1.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] Compiling zerovec-derive v0.11.2 [INFO] [stderr] Compiling serde_derive v1.0.228 [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 thiserror-impl v1.0.69 [INFO] [stderr] Compiling thiserror-impl v2.0.17 [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 regex v1.12.2 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Checking tokio v1.49.0 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Checking x11rb v0.13.2 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking matchers v0.2.0 [INFO] [stderr] Compiling axum-macros v0.4.2 [INFO] [stderr] Checking tracing-subscriber v0.3.22 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking thiserror v2.0.17 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking zerovec v0.11.5 [INFO] [stderr] Checking zerotrie v0.2.3 [INFO] [stderr] Checking filedescriptor v0.8.3 [INFO] [stderr] Checking tungstenite v0.24.0 [INFO] [stderr] Checking portable-pty v0.8.1 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Checking rustls-webpki v0.103.8 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking onig v6.5.1 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking ratatui v0.29.0 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking serde_spanned v0.6.9 [INFO] [stderr] Checking toml_datetime v0.6.11 [INFO] [stderr] Checking bincode v1.3.3 [INFO] [stderr] Checking plist v1.8.0 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking image v0.25.9 [INFO] [stderr] Checking toml_edit v0.22.27 [INFO] [stderr] Checking syntect v5.3.0 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking axum-core v0.4.5 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking arboard v3.6.1 [INFO] [stderr] Checking toml v0.8.23 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking tokio-tungstenite v0.24.0 [INFO] [stderr] Checking tower v0.5.2 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking ureq v2.12.1 [INFO] [stderr] Checking hyper-util v0.1.19 [INFO] [stderr] Checking axiom-core v0.1.0 (/opt/rustwide/workdir/crates/axiom-core) [INFO] [stderr] Checking axum v0.7.9 [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/axiom-core/src/workspace/manager.rs:319:13 [INFO] [stdout] | [INFO] [stdout] 319 | let mut config = self.global_config.clone(); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> crates/axiom-core/src/workspace/manager.rs:319:13 [INFO] [stdout] | [INFO] [stdout] 319 | let mut config = self.global_config.clone(); [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `id2` [INFO] [stdout] --> crates/axiom-core/src/workspace/storage.rs:289:13 [INFO] [stdout] | [INFO] [stdout] 289 | let id2 = ws2.id; [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_id2` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_code_block` is never read [INFO] [stdout] --> crates/axiom-core/src/agents/conductor.rs:346:21 [INFO] [stdout] | [INFO] [stdout] 346 | in_code_block = false; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `EventBus` is never constructed [INFO] [stdout] --> crates/axiom-core/src/events.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | pub struct EventBus { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `sender`, `recv_timeout`, `try_recv`, and `drain` are never used [INFO] [stdout] --> crates/axiom-core/src/events.rs:114:12 [INFO] [stdout] | [INFO] [stdout] 112 | impl EventBus { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 113 | /// Create a new event bus with specified capacity [INFO] [stdout] 114 | pub fn new(capacity: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 120 | pub fn sender(&self) -> Sender { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 125 | pub fn recv_timeout(&self, timeout: Duration) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 130 | pub fn try_recv(&self) -> Option { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 135 | pub fn drain(&self, max: usize) -> Vec { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `status` is never read [INFO] [stdout] --> crates/axiom-core/src/llm/ollama.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct OllamaProvider { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 23 | status: RwLock, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_code_block` is never read [INFO] [stdout] --> crates/axiom-core/src/agents/conductor.rs:346:21 [INFO] [stdout] | [INFO] [stdout] 346 | in_code_block = false; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `recv_timeout` and `drain` are never used [INFO] [stdout] --> crates/axiom-core/src/events.rs:125:12 [INFO] [stdout] | [INFO] [stdout] 112 | impl EventBus { [INFO] [stdout] | ------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 125 | pub fn recv_timeout(&self, timeout: Duration) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 135 | pub fn drain(&self, max: usize) -> Vec { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `status` is never read [INFO] [stdout] --> crates/axiom-core/src/llm/ollama.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct OllamaProvider { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 23 | status: RwLock, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> crates/axiom-core/src/types.rs:211:1 [INFO] [stdout] | [INFO] [stdout] 211 | / impl Default for OutputContext { [INFO] [stdout] 212 | | fn default() -> Self { [INFO] [stdout] 213 | | Self::Empty [INFO] [stdout] 214 | | } [INFO] [stdout] 215 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 200 + #[derive(Default)] [INFO] [stdout] 201 | pub enum OutputContext { [INFO] [stdout] 202 | /// Viewing a file from the file tree [INFO] [stdout] ... [INFO] [stdout] 208 | /// Empty state (no context selected) [INFO] [stdout] 209 ~ #[default] [INFO] [stdout] 210 ~ Empty, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> crates/axiom-core/src/types.rs:211:1 [INFO] [stdout] | [INFO] [stdout] 211 | / impl Default for OutputContext { [INFO] [stdout] 212 | | fn default() -> Self { [INFO] [stdout] 213 | | Self::Empty [INFO] [stdout] 214 | | } [INFO] [stdout] 215 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 200 + #[derive(Default)] [INFO] [stdout] 201 | pub enum OutputContext { [INFO] [stdout] 202 | /// Viewing a file from the file tree [INFO] [stdout] ... [INFO] [stdout] 208 | /// Empty state (no context selected) [INFO] [stdout] 209 ~ #[default] [INFO] [stdout] 210 ~ Empty, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> crates/axiom-core/src/config/loader.rs:104:18 [INFO] [stdout] | [INFO] [stdout] 104 | .or_insert_with(ProviderConfig::default); [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 `or_insert_with` to construct default value [INFO] [stdout] --> crates/axiom-core/src/config/loader.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> crates/axiom-core/src/config/loader.rs:133:18 [INFO] [stdout] | [INFO] [stdout] 133 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> crates/axiom-core/src/config/loader.rs:146:18 [INFO] [stdout] | [INFO] [stdout] 146 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> crates/axiom-core/src/config/loader.rs:104:18 [INFO] [stdout] | [INFO] [stdout] 104 | .or_insert_with(ProviderConfig::default); [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 `or_insert_with` to construct default value [INFO] [stdout] --> crates/axiom-core/src/config/loader.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> crates/axiom-core/src/config/loader.rs:133:18 [INFO] [stdout] | [INFO] [stdout] 133 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> crates/axiom-core/src/config/loader.rs:146:18 [INFO] [stdout] | [INFO] [stdout] 146 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> crates/axiom-core/src/llm/claude.rs:168:29 [INFO] [stdout] | [INFO] [stdout] 168 | / ... if !text.is_empty() { [INFO] [stdout] 169 | | ... if event_tx.send(Event::LlmChunk(text.to_string())).is_err() { [INFO] [stdout] 170 | | ... break; [INFO] [stdout] 171 | | ... } [INFO] [stdout] 172 | | ... } [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] 168 ~ if !text.is_empty() [INFO] [stdout] 169 ~ && event_tx.send(Event::LlmChunk(text.to_string())).is_err() { [INFO] [stdout] 170 | break; [INFO] [stdout] 171 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> crates/axiom-core/src/llm/gemini.rs:195:37 [INFO] [stdout] | [INFO] [stdout] 195 | / ... if !text.is_empty() { [INFO] [stdout] 196 | | ... if event_tx.send(Event::LlmChunk(text.to_string())).is_err() [INFO] [stdout] 197 | | ... { [INFO] [stdout] 198 | | ... return Ok(()); [INFO] [stdout] 199 | | ... } [INFO] [stdout] 200 | | ... } [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] 195 ~ if !text.is_empty() [INFO] [stdout] 196 ~ && event_tx.send(Event::LlmChunk(text.to_string())).is_err() [INFO] [stdout] 197 | { [INFO] [stdout] 198 | return Ok(()); [INFO] [stdout] 199 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> crates/axiom-core/src/llm/claude.rs:168:29 [INFO] [stdout] | [INFO] [stdout] 168 | / ... if !text.is_empty() { [INFO] [stdout] 169 | | ... if event_tx.send(Event::LlmChunk(text.to_string())).is_err() { [INFO] [stdout] 170 | | ... break; [INFO] [stdout] 171 | | ... } [INFO] [stdout] 172 | | ... } [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] 168 ~ if !text.is_empty() [INFO] [stdout] 169 ~ && event_tx.send(Event::LlmChunk(text.to_string())).is_err() { [INFO] [stdout] 170 | break; [INFO] [stdout] 171 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> crates/axiom-core/src/llm/gemini.rs:195:37 [INFO] [stdout] | [INFO] [stdout] 195 | / ... if !text.is_empty() { [INFO] [stdout] 196 | | ... if event_tx.send(Event::LlmChunk(text.to_string())).is_err() [INFO] [stdout] 197 | | ... { [INFO] [stdout] 198 | | ... return Ok(()); [INFO] [stdout] 199 | | ... } [INFO] [stdout] 200 | | ... } [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] 195 ~ if !text.is_empty() [INFO] [stdout] 196 ~ && event_tx.send(Event::LlmChunk(text.to_string())).is_err() [INFO] [stdout] 197 | { [INFO] [stdout] 198 | return Ok(()); [INFO] [stdout] 199 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> crates/axiom-core/src/llm/message.rs:165:58 [INFO] [stdout] | [INFO] [stdout] 165 | pub fn build_prompt_with_context(user_text: &str, files: &[(String, String, Option<(usize, usize)>)]) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> crates/axiom-core/src/llm/ollama.rs:187:17 [INFO] [stdout] | [INFO] [stdout] 187 | / if !content.is_empty() { [INFO] [stdout] 188 | | if event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 189 | | break; [INFO] [stdout] 190 | | } [INFO] [stdout] 191 | | } [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] 187 ~ if !content.is_empty() [INFO] [stdout] 188 ~ && event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 189 | break; [INFO] [stdout] 190 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> crates/axiom-core/src/llm/message.rs:165:58 [INFO] [stdout] | [INFO] [stdout] 165 | pub fn build_prompt_with_context(user_text: &str, files: &[(String, String, Option<(usize, usize)>)]) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> crates/axiom-core/src/llm/openai.rs:160:29 [INFO] [stdout] | [INFO] [stdout] 160 | / ... if !content.is_empty() { [INFO] [stdout] 161 | | ... if event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 162 | | ... break; [INFO] [stdout] 163 | | ... } [INFO] [stdout] 164 | | ... } [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] 160 ~ if !content.is_empty() [INFO] [stdout] 161 ~ && event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 162 | break; [INFO] [stdout] 163 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> crates/axiom-core/src/llm/ollama.rs:187:17 [INFO] [stdout] | [INFO] [stdout] 187 | / if !content.is_empty() { [INFO] [stdout] 188 | | if event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 189 | | break; [INFO] [stdout] 190 | | } [INFO] [stdout] 191 | | } [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] 187 ~ if !content.is_empty() [INFO] [stdout] 188 ~ && event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 189 | break; [INFO] [stdout] 190 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> crates/axiom-core/src/llm/openai.rs:160:29 [INFO] [stdout] | [INFO] [stdout] 160 | / ... if !content.is_empty() { [INFO] [stdout] 161 | | ... if event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 162 | | ... break; [INFO] [stdout] 163 | | ... } [INFO] [stdout] 164 | | ... } [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] 160 ~ if !content.is_empty() [INFO] [stdout] 161 ~ && event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 162 | break; [INFO] [stdout] 163 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> crates/axiom-core/src/workspace/storage.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 86 | workspaces.sort_by(|a, b| b.last_accessed.cmp(&a.last_accessed)); [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] 86 - workspaces.sort_by(|a, b| b.last_accessed.cmp(&a.last_accessed)); [INFO] [stdout] 86 + workspaces.sort_by_key(|b| std::cmp::Reverse(b.last_accessed)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> crates/axiom-core/src/workspace/storage.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 86 | workspaces.sort_by(|a, b| b.last_accessed.cmp(&a.last_accessed)); [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] 86 - workspaces.sort_by(|a, b| b.last_accessed.cmp(&a.last_accessed)); [INFO] [stdout] 86 + workspaces.sort_by_key(|b| std::cmp::Reverse(b.last_accessed)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-core/src/workspace/storage.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 200 | if config_path.extension().map_or(false, |e| e == "toml") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 200 - if config_path.extension().map_or(false, |e| e == "toml") { [INFO] [stdout] 200 + if config_path.extension().is_some_and(|e| e == "toml") { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-core/src/workspace/storage.rs:229:26 [INFO] [stdout] | [INFO] [stdout] 229 | let content = if config_path.extension().map_or(false, |e| e == "toml") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 229 - let content = if config_path.extension().map_or(false, |e| e == "toml") { [INFO] [stdout] 229 + let content = if config_path.extension().is_some_and(|e| e == "toml") { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-core/src/workspace/storage.rs:200:12 [INFO] [stdout] | [INFO] [stdout] 200 | if config_path.extension().map_or(false, |e| e == "toml") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 200 - if config_path.extension().map_or(false, |e| e == "toml") { [INFO] [stdout] 200 + if config_path.extension().is_some_and(|e| e == "toml") { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-core/src/workspace/storage.rs:229:26 [INFO] [stdout] | [INFO] [stdout] 229 | let content = if config_path.extension().map_or(false, |e| e == "toml") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 229 - let content = if config_path.extension().map_or(false, |e| e == "toml") { [INFO] [stdout] 229 + let content = if config_path.extension().is_some_and(|e| e == "toml") { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> crates/axiom-core/src/workspace/types.rs:73:1 [INFO] [stdout] | [INFO] [stdout] 73 | / impl Default for WorkspaceType { [INFO] [stdout] 74 | | fn default() -> Self { [INFO] [stdout] 75 | | Self::Local [INFO] [stdout] 76 | | } [INFO] [stdout] 77 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 53 + #[derive(Default)] [INFO] [stdout] 54 | pub enum WorkspaceType { [INFO] [stdout] 55 | /// Local filesystem workspace [INFO] [stdout] 56 ~ #[default] [INFO] [stdout] 57 ~ Local, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> crates/axiom-core/src/workspace/types.rs:73:1 [INFO] [stdout] | [INFO] [stdout] 73 | / impl Default for WorkspaceType { [INFO] [stdout] 74 | | fn default() -> Self { [INFO] [stdout] 75 | | Self::Local [INFO] [stdout] 76 | | } [INFO] [stdout] 77 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 53 + #[derive(Default)] [INFO] [stdout] 54 | pub enum WorkspaceType { [INFO] [stdout] 55 | /// Local filesystem workspace [INFO] [stdout] 56 ~ #[default] [INFO] [stdout] 57 ~ Local, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> crates/axiom-core/src/orchestration/developer.rs:67:37 [INFO] [stdout] | [INFO] [stdout] 67 | .filter_map(|op| parse_operation(op)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `parse_operation` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> crates/axiom-core/src/orchestration/developer.rs:67:37 [INFO] [stdout] | [INFO] [stdout] 67 | .filter_map(|op| parse_operation(op)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `parse_operation` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> crates/axiom-core/src/orchestration/service.rs:300:24 [INFO] [stdout] | [INFO] [stdout] 300 | .send_json(&serde_json::json!({ "contents": contents })) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `serde_json::json!({ "contents": contents })` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> crates/axiom-core/src/orchestration/service.rs:347:24 [INFO] [stdout] | [INFO] [stdout] 347 | .send_json(&serde_json::json!({ [INFO] [stdout] | ________________________^ [INFO] [stdout] 348 | | "model": model, [INFO] [stdout] 349 | | "messages": api_messages, [INFO] [stdout] 350 | | "stream": false [INFO] [stdout] 351 | | })) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 347 ~ .send_json(serde_json::json!({ [INFO] [stdout] 348 + "model": model, [INFO] [stdout] 349 + "messages": api_messages, [INFO] [stdout] 350 + "stream": false [INFO] [stdout] 351 ~ })) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> crates/axiom-core/src/orchestration/service.rs:300:24 [INFO] [stdout] | [INFO] [stdout] 300 | .send_json(&serde_json::json!({ "contents": contents })) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `serde_json::json!({ "contents": contents })` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> crates/axiom-core/src/orchestration/service.rs:347:24 [INFO] [stdout] | [INFO] [stdout] 347 | .send_json(&serde_json::json!({ [INFO] [stdout] | ________________________^ [INFO] [stdout] 348 | | "model": model, [INFO] [stdout] 349 | | "messages": api_messages, [INFO] [stdout] 350 | | "stream": false [INFO] [stdout] 351 | | })) [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 347 ~ .send_json(serde_json::json!({ [INFO] [stdout] 348 + "model": model, [INFO] [stdout] 349 + "messages": api_messages, [INFO] [stdout] 350 + "stream": false [INFO] [stdout] 351 ~ })) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> crates/axiom-core/src/ralph/state.rs:484:12 [INFO] [stdout] | [INFO] [stdout] 484 | if !fs::metadata(&state_file).await.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(&state_file).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> crates/axiom-core/src/ralph/state.rs:484:12 [INFO] [stdout] | [INFO] [stdout] 484 | if !fs::metadata(&state_file).await.is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `fs::metadata(&state_file).await.is_err()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:129:17 [INFO] [stdout] | [INFO] [stdout] 129 | / for line in reader.lines() { [INFO] [stdout] 130 | | if let Ok(line) = line { [INFO] [stdout] 131 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 132 | | id: agent_id, [INFO] [stdout] ... | [INFO] [stdout] 136 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:130:21 [INFO] [stdout] | [INFO] [stdout] 130 | / if let Ok(line) = line { [INFO] [stdout] 131 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 132 | | id: agent_id, [INFO] [stdout] 133 | | chunk: format!("{}\n", line), [INFO] [stdout] 134 | | }); [INFO] [stdout] 135 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 129 ~ for line in reader.lines().flatten() { [INFO] [stdout] 130 + let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 131 + id: agent_id, [INFO] [stdout] 132 + chunk: format!("{}\n", line), [INFO] [stdout] 133 + }); [INFO] [stdout] 134 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:142:17 [INFO] [stdout] | [INFO] [stdout] 142 | / for line in reader.lines() { [INFO] [stdout] 143 | | if let Ok(line) = line { [INFO] [stdout] 144 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 145 | | id: agent_id, [INFO] [stdout] ... | [INFO] [stdout] 149 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:143:21 [INFO] [stdout] | [INFO] [stdout] 143 | / if let Ok(line) = line { [INFO] [stdout] 144 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 145 | | id: agent_id, [INFO] [stdout] 146 | | chunk: format!("{}\n", line), [INFO] [stdout] 147 | | }); [INFO] [stdout] 148 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 142 ~ for line in reader.lines().flatten() { [INFO] [stdout] 143 + let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 144 + id: agent_id, [INFO] [stdout] 145 + chunk: format!("{}\n", line), [INFO] [stdout] 146 + }); [INFO] [stdout] 147 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:172:10 [INFO] [stdout] | [INFO] [stdout] 172 | cwd: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 172 - cwd: &PathBuf, [INFO] [stdout] 172 + cwd: &Path, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:302:10 [INFO] [stdout] | [INFO] [stdout] 302 | cwd: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 302 ~ cwd: &Path, [INFO] [stdout] 303 | event_tx: &Sender, [INFO] [stdout] ... [INFO] [stdout] 354 | let dir_path = if path.is_empty() { [INFO] [stdout] 355 ~ cwd.to_path_buf() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:129:17 [INFO] [stdout] | [INFO] [stdout] 129 | / for line in reader.lines() { [INFO] [stdout] 130 | | if let Ok(line) = line { [INFO] [stdout] 131 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 132 | | id: agent_id, [INFO] [stdout] ... | [INFO] [stdout] 136 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:130:21 [INFO] [stdout] | [INFO] [stdout] 130 | / if let Ok(line) = line { [INFO] [stdout] 131 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 132 | | id: agent_id, [INFO] [stdout] 133 | | chunk: format!("{}\n", line), [INFO] [stdout] 134 | | }); [INFO] [stdout] 135 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 129 ~ for line in reader.lines().flatten() { [INFO] [stdout] 130 + let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 131 + id: agent_id, [INFO] [stdout] 132 + chunk: format!("{}\n", line), [INFO] [stdout] 133 + }); [INFO] [stdout] 134 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:142:17 [INFO] [stdout] | [INFO] [stdout] 142 | / for line in reader.lines() { [INFO] [stdout] 143 | | if let Ok(line) = line { [INFO] [stdout] 144 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 145 | | id: agent_id, [INFO] [stdout] ... | [INFO] [stdout] 149 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:143:21 [INFO] [stdout] | [INFO] [stdout] 143 | / if let Ok(line) = line { [INFO] [stdout] 144 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 145 | | id: agent_id, [INFO] [stdout] 146 | | chunk: format!("{}\n", line), [INFO] [stdout] 147 | | }); [INFO] [stdout] 148 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 142 ~ for line in reader.lines().flatten() { [INFO] [stdout] 143 + let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 144 + id: agent_id, [INFO] [stdout] 145 + chunk: format!("{}\n", line), [INFO] [stdout] 146 + }); [INFO] [stdout] 147 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:172:10 [INFO] [stdout] | [INFO] [stdout] 172 | cwd: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 172 - cwd: &PathBuf, [INFO] [stdout] 172 + cwd: &Path, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> crates/axiom-core/src/agents/executor.rs:302:10 [INFO] [stdout] | [INFO] [stdout] 302 | cwd: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 302 ~ cwd: &Path, [INFO] [stdout] 303 | event_tx: &Sender, [INFO] [stdout] ... [INFO] [stdout] 354 | let dir_path = if path.is_empty() { [INFO] [stdout] 355 ~ cwd.to_path_buf() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-core/src/service.rs:360:36 [INFO] [stdout] | [INFO] [stdout] 360 | let is_directory = metadata.as_ref().map_or(false, |m| m.is_dir()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 360 - let is_directory = metadata.as_ref().map_or(false, |m| m.is_dir()); [INFO] [stdout] 360 + let is_directory = metadata.as_ref().is_some_and(|m| m.is_dir()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-core/src/service.rs:360:36 [INFO] [stdout] | [INFO] [stdout] 360 | let is_directory = metadata.as_ref().map_or(false, |m| m.is_dir()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 360 - let is_directory = metadata.as_ref().map_or(false, |m| m.is_dir()); [INFO] [stdout] 360 + let is_directory = metadata.as_ref().is_some_and(|m| m.is_dir()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> crates/axiom-core/src/service.rs:757:63 [INFO] [stdout] | [INFO] [stdout] 757 | if exec.cancel_token().is_cancelled() { [INFO] [stdout] | _______________________________________________________________^ [INFO] [stdout] 758 | | false [INFO] [stdout] 759 | | } else if !exec.state().should_continue() { [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> crates/axiom-core/src/service.rs:759:67 [INFO] [stdout] | [INFO] [stdout] 759 | } else if !exec.state().should_continue() { [INFO] [stdout] | ___________________________________________________________________^ [INFO] [stdout] 760 | | false [INFO] [stdout] 761 | | } 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] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-core/src/service.rs:874:9 [INFO] [stdout] | [INFO] [stdout] 874 | / executor [INFO] [stdout] 875 | | .as_ref() [INFO] [stdout] 876 | | .map_or(false, |e| e.state().status.is_active()) [INFO] [stdout] | |____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 876 - .map_or(false, |e| e.state().status.is_active()) [INFO] [stdout] 876 + .is_some_and(|e| e.state().status.is_active()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` has identical blocks [INFO] [stdout] --> crates/axiom-core/src/service.rs:757:63 [INFO] [stdout] | [INFO] [stdout] 757 | if exec.cancel_token().is_cancelled() { [INFO] [stdout] | _______________________________________________________________^ [INFO] [stdout] 758 | | false [INFO] [stdout] 759 | | } else if !exec.state().should_continue() { [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] note: same as this [INFO] [stdout] --> crates/axiom-core/src/service.rs:759:67 [INFO] [stdout] | [INFO] [stdout] 759 | } else if !exec.state().should_continue() { [INFO] [stdout] | ___________________________________________________________________^ [INFO] [stdout] 760 | | false [INFO] [stdout] 761 | | } 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] = note: `#[warn(clippy::if_same_then_else)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-core/src/service.rs:874:9 [INFO] [stdout] | [INFO] [stdout] 874 | / executor [INFO] [stdout] 875 | | .as_ref() [INFO] [stdout] 876 | | .map_or(false, |e| e.state().status.is_active()) [INFO] [stdout] | |____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 876 - .map_or(false, |e| e.state().status.is_active()) [INFO] [stdout] 876 + .is_some_and(|e| e.state().status.is_active()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking axiom-server v0.1.0 (/opt/rustwide/workdir/crates/axiom-server) [INFO] [stderr] Checking axiom-tui v0.1.0 (/opt/rustwide/workdir/crates/axiom-tui) [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/axiom-core/examples/test_workspace.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AgentId` and `AgentType` [INFO] [stdout] --> crates/axiom-tui/src/panels/agents.rs:6:18 [INFO] [stdout] | [INFO] [stdout] 6 | use axiom_core::{AgentId, AgentStatus, AgentType, AgentView, AxiomService, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AgentId` and `AgentType` [INFO] [stdout] --> crates/axiom-tui/src/panels/agents.rs:6:18 [INFO] [stdout] | [INFO] [stdout] 6 | use axiom_core::{AgentId, AgentStatus, AgentType, AgentView, AxiomService, Result}; [INFO] [stdout] | ^^^^^^^ ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AgentView` and `TerminalScreen` [INFO] [stdout] --> crates/axiom-tui/src/panels/output.rs:6:18 [INFO] [stdout] | [INFO] [stdout] 6 | use axiom_core::{AgentView, AxiomService, Result, TerminalScreen}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Span` [INFO] [stdout] --> crates/axiom-tui/src/panels/output.rs:11:18 [INFO] [stdout] | [INFO] [stdout] 11 | text::{Line, Span}, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/axiom-tui/src/panels/output.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AgentView` and `TerminalScreen` [INFO] [stdout] --> crates/axiom-tui/src/panels/output.rs:6:18 [INFO] [stdout] | [INFO] [stdout] 6 | use axiom_core::{AgentView, AxiomService, Result, TerminalScreen}; [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Span` [INFO] [stdout] --> crates/axiom-tui/src/panels/output.rs:11:18 [INFO] [stdout] | [INFO] [stdout] 11 | text::{Line, Span}, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::path::PathBuf` [INFO] [stdout] --> crates/axiom-tui/src/panels/output.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 15 | use std::path::PathBuf; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `dest_url` [INFO] [stdout] --> crates/axiom-tui/src/ui/markdown.rs:472:25 [INFO] [stdout] | [INFO] [stdout] 472 | Tag::Link { dest_url, .. } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `dest_url: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `dest_url` [INFO] [stdout] --> crates/axiom-tui/src/ui/markdown.rs:472:25 [INFO] [stdout] | [INFO] [stdout] 472 | Tag::Link { dest_url, .. } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `dest_url: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> crates/axiom-tui/src/app.rs:78:25 [INFO] [stdout] | [INFO] [stdout] 78 | / if self.handle_key(key)? { [INFO] [stdout] 79 | | break; // Quit requested [INFO] [stdout] 80 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 77 ~ CrosstermEvent::Key(key) [INFO] [stdout] 78 ~ if self.handle_key(key)? => { [INFO] [stdout] 79 | break; // Quit requested [INFO] [stdout] 80 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> crates/axiom-tui/src/app.rs:78:25 [INFO] [stdout] | [INFO] [stdout] 78 | / if self.handle_key(key)? { [INFO] [stdout] 79 | | break; // Quit requested [INFO] [stdout] 80 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 77 ~ CrosstermEvent::Key(key) [INFO] [stdout] 78 ~ if self.handle_key(key)? => { [INFO] [stdout] 79 | break; // Quit requested [INFO] [stdout] 80 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> crates/axiom-tui/src/app.rs:322:17 [INFO] [stdout] | [INFO] [stdout] 322 | / if status.is_terminal() { [INFO] [stdout] 323 | | if let Some(agent) = self.service.agents().iter().find(|a| a.id == id) { [INFO] [stdout] 324 | | self.state.info(format!("Completed: {}", agent.name)); [INFO] [stdout] 325 | | } [INFO] [stdout] 326 | | } [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] 321 ~ Notification::AgentStatusChanged { id, status } [INFO] [stdout] 322 ~ if status.is_terminal() => { [INFO] [stdout] 323 | if let Some(agent) = self.service.agents().iter().find(|a| a.id == id) { [INFO] [stdout] 324 | self.state.info(format!("Completed: {}", agent.name)); [INFO] [stdout] 325 | } [INFO] [stdout] 326 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> crates/axiom-tui/src/app.rs:322:17 [INFO] [stdout] | [INFO] [stdout] 322 | / if status.is_terminal() { [INFO] [stdout] 323 | | if let Some(agent) = self.service.agents().iter().find(|a| a.id == id) { [INFO] [stdout] 324 | | self.state.info(format!("Completed: {}", agent.name)); [INFO] [stdout] 325 | | } [INFO] [stdout] 326 | | } [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] 321 ~ Notification::AgentStatusChanged { id, status } [INFO] [stdout] 322 ~ if status.is_terminal() => { [INFO] [stdout] 323 | if let Some(agent) = self.service.agents().iter().find(|a| a.id == id) { [INFO] [stdout] 324 | self.state.info(format!("Completed: {}", agent.name)); [INFO] [stdout] 325 | } [INFO] [stdout] 326 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-tui/src/app.rs:416:16 [INFO] [stdout] | [INFO] [stdout] 416 | || self.service.ralph_state().map_or(false, |s| { [INFO] [stdout] | ________________^ [INFO] [stdout] 417 | | s.status == axiom_core::RalphStatus::Complete [INFO] [stdout] 418 | | || s.status == axiom_core::RalphStatus::Error [INFO] [stdout] 419 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 416 - || self.service.ralph_state().map_or(false, |s| { [INFO] [stdout] 416 + || self.service.ralph_state().is_some_and(|s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-tui/src/app.rs:416:16 [INFO] [stdout] | [INFO] [stdout] 416 | || self.service.ralph_state().map_or(false, |s| { [INFO] [stdout] | ________________^ [INFO] [stdout] 417 | | s.status == axiom_core::RalphStatus::Complete [INFO] [stdout] 418 | | || s.status == axiom_core::RalphStatus::Error [INFO] [stdout] 419 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 416 - || self.service.ralph_state().map_or(false, |s| { [INFO] [stdout] 416 + || self.service.ralph_state().is_some_and(|s| { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:64:26 [INFO] [stdout] | [INFO] [stdout] 64 | command: text[1..].to_string(), [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:61:23 [INFO] [stdout] | [INFO] [stdout] 61 | let command = if text.starts_with('!') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 61 ~ let command = if let Some() = text.strip_prefix('!') { [INFO] [stdout] 62 | // Shell command [INFO] [stdout] 63 | Command::ExecuteShell { [INFO] [stdout] 64 ~ command: .to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:91:40 [INFO] [stdout] | [INFO] [stdout] 91 | let parts: Vec<&str> = text[1..].splitn(2, ' ').collect(); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:66:16 [INFO] [stdout] | [INFO] [stdout] 66 | } else if text.starts_with('#') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 66 ~ } else if let Some() = text.strip_prefix('#') { [INFO] [stdout] 67 | // Check for Ralph Loop commands first [INFO] [stdout] ... [INFO] [stdout] 90 | // CLI agent invocation [INFO] [stdout] 91 ~ let parts: Vec<&str> = .splitn(2, ' ').collect(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:74:28 [INFO] [stdout] | [INFO] [stdout] 74 | let task = text[7..].trim().to_string(); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:72:20 [INFO] [stdout] | [INFO] [stdout] 72 | } else if text.starts_with("#ralph ") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 72 ~ } else if let Some() = text.strip_prefix("#ralph ") { [INFO] [stdout] 73 | // Start Ralph Loop with the task description [INFO] [stdout] 74 ~ let task = .trim().to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:84:32 [INFO] [stdout] | [INFO] [stdout] 84 | let feedback = text[16..].trim().to_string(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:82:20 [INFO] [stdout] | [INFO] [stdout] 82 | } else if text.starts_with("#ralph-feedback ") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 82 ~ } else if let Some() = text.strip_prefix("#ralph-feedback ") { [INFO] [stdout] 83 | // Update Ralph Loop feedback [INFO] [stdout] 84 ~ let feedback = .trim().to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:64:26 [INFO] [stdout] | [INFO] [stdout] 64 | command: text[1..].to_string(), [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:61:23 [INFO] [stdout] | [INFO] [stdout] 61 | let command = if text.starts_with('!') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 61 ~ let command = if let Some() = text.strip_prefix('!') { [INFO] [stdout] 62 | // Shell command [INFO] [stdout] 63 | Command::ExecuteShell { [INFO] [stdout] 64 ~ command: .to_string(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:91:40 [INFO] [stdout] | [INFO] [stdout] 91 | let parts: Vec<&str> = text[1..].splitn(2, ' ').collect(); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:66:16 [INFO] [stdout] | [INFO] [stdout] 66 | } else if text.starts_with('#') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 66 ~ } else if let Some() = text.strip_prefix('#') { [INFO] [stdout] 67 | // Check for Ralph Loop commands first [INFO] [stdout] ... [INFO] [stdout] 90 | // CLI agent invocation [INFO] [stdout] 91 ~ let parts: Vec<&str> = .splitn(2, ' ').collect(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:74:28 [INFO] [stdout] | [INFO] [stdout] 74 | let task = text[7..].trim().to_string(); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:72:20 [INFO] [stdout] | [INFO] [stdout] 72 | } else if text.starts_with("#ralph ") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 72 ~ } else if let Some() = text.strip_prefix("#ralph ") { [INFO] [stdout] 73 | // Start Ralph Loop with the task description [INFO] [stdout] 74 ~ let task = .trim().to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:84:32 [INFO] [stdout] | [INFO] [stdout] 84 | let feedback = text[16..].trim().to_string(); [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> crates/axiom-tui/src/panels/input.rs:82:20 [INFO] [stdout] | [INFO] [stdout] 82 | } else if text.starts_with("#ralph-feedback ") { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 82 ~ } else if let Some() = text.strip_prefix("#ralph-feedback ") { [INFO] [stdout] 83 | // Update Ralph Loop feedback [INFO] [stdout] 84 ~ let feedback = .trim().to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `command` [INFO] [stdout] --> crates/axiom-server/src/routes/mod.rs:500:24 [INFO] [stdout] | [INFO] [stdout] 500 | Ok(command) => { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_command` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> crates/axiom-tui/src/ui/markdown.rs:416:17 [INFO] [stdout] | [INFO] [stdout] 416 | / if !self.lines.is_empty() && !self.current_line.is_empty() { [INFO] [stdout] 417 | | self.flush_line(); [INFO] [stdout] 418 | | } [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] 415 ~ Tag::Paragraph [INFO] [stdout] 416 ~ if !self.lines.is_empty() && !self.current_line.is_empty() => { [INFO] [stdout] 417 | self.flush_line(); [INFO] [stdout] 418 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `command` [INFO] [stdout] --> crates/axiom-server/src/routes/mod.rs:500:24 [INFO] [stdout] | [INFO] [stdout] 500 | Ok(command) => { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_command` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> crates/axiom-tui/src/ui/scroll.rs:77:53 [INFO] [stdout] | [INFO] [stdout] 77 | frame.buffer_mut().set_string(bar_x, y, &ch.to_string(), style); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `ch.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> crates/axiom-tui/src/ui/markdown.rs:416:17 [INFO] [stdout] | [INFO] [stdout] 416 | / if !self.lines.is_empty() && !self.current_line.is_empty() { [INFO] [stdout] 417 | | self.flush_line(); [INFO] [stdout] 418 | | } [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] 415 ~ Tag::Paragraph [INFO] [stdout] 416 ~ if !self.lines.is_empty() && !self.current_line.is_empty() => { [INFO] [stdout] 417 | self.flush_line(); [INFO] [stdout] 418 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> crates/axiom-tui/src/ui/scroll.rs:77:53 [INFO] [stdout] | [INFO] [stdout] 77 | frame.buffer_mut().set_string(bar_x, y, &ch.to_string(), style); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `ch.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> crates/axiom-tui/src/ui/settings.rs:424:27 [INFO] [stdout] | [INFO] [stdout] 424 | let modal_width = (area.width as f32 * 0.6).max(50.0).min(70.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.width as f32 * 0.6).clamp(50.0, 70.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> crates/axiom-tui/src/ui/settings.rs:425:28 [INFO] [stdout] | [INFO] [stdout] 425 | let modal_height = (area.height as f32 * 0.5).max(15.0).min(20.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.height as f32 * 0.5).clamp(15.0, 20.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `api_key`, `base_url`, `default_model`, and `enabled` are never read [INFO] [stdout] --> crates/axiom-server/src/routes/mod.rs:739:5 [INFO] [stdout] | [INFO] [stdout] 738 | pub struct UpdateProviderRequest { [INFO] [stdout] | --------------------- fields in this struct [INFO] [stdout] 739 | api_key: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 740 | base_url: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 741 | default_model: Option, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 742 | enabled: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `provider_id` and `model_id` are never read [INFO] [stdout] --> crates/axiom-server/src/routes/mod.rs:761:5 [INFO] [stdout] | [INFO] [stdout] 760 | pub struct UpdateMappingRequest { [INFO] [stdout] | -------------------- fields in this struct [INFO] [stdout] 761 | provider_id: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 762 | model_id: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> crates/axiom-tui/src/ui/settings.rs:424:27 [INFO] [stdout] | [INFO] [stdout] 424 | let modal_width = (area.width as f32 * 0.6).max(50.0).min(70.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.width as f32 * 0.6).clamp(50.0, 70.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> crates/axiom-tui/src/ui/settings.rs:425:28 [INFO] [stdout] | [INFO] [stdout] 425 | let modal_height = (area.height as f32 * 0.5).max(15.0).min(20.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.height as f32 * 0.5).clamp(15.0, 20.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `api_key`, `base_url`, `default_model`, and `enabled` are never read [INFO] [stdout] --> crates/axiom-server/src/routes/mod.rs:739:5 [INFO] [stdout] | [INFO] [stdout] 738 | pub struct UpdateProviderRequest { [INFO] [stdout] | --------------------- fields in this struct [INFO] [stdout] 739 | api_key: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 740 | base_url: Option, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 741 | default_model: Option, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 742 | enabled: Option, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `provider_id` and `model_id` are never read [INFO] [stdout] --> crates/axiom-server/src/routes/mod.rs:761:5 [INFO] [stdout] | [INFO] [stdout] 760 | pub struct UpdateMappingRequest { [INFO] [stdout] | -------------------- fields in this struct [INFO] [stdout] 761 | provider_id: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 762 | model_id: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-server/src/routes/mod.rs:225:32 [INFO] [stdout] | [INFO] [stdout] 225 | let is_directory = metadata.as_ref().map_or(false, |m| m.is_dir()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 225 - let is_directory = metadata.as_ref().map_or(false, |m| m.is_dir()); [INFO] [stdout] 225 + let is_directory = metadata.as_ref().is_some_and(|m| m.is_dir()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `map_or` can be simplified [INFO] [stdout] --> crates/axiom-server/src/routes/mod.rs:225:32 [INFO] [stdout] | [INFO] [stdout] 225 | let is_directory = metadata.as_ref().map_or(false, |m| m.is_dir()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or [INFO] [stdout] = note: `#[warn(clippy::unnecessary_map_or)]` on by default [INFO] [stdout] help: use `is_some_and` instead [INFO] [stdout] | [INFO] [stdout] 225 - let is_directory = metadata.as_ref().map_or(false, |m| m.is_dir()); [INFO] [stdout] 225 + let is_directory = metadata.as_ref().is_some_and(|m| m.is_dir()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking axiom v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `Color` [INFO] [stdout] --> src/panels/output/file_viewer.rs:9:13 [INFO] [stdout] | [INFO] [stdout] 9 | style::{Color, Style}, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `AgentType` [INFO] [stdout] --> src/panels/output/mod.rs:13:43 [INFO] [stdout] | [INFO] [stdout] 13 | use crate::agents::{Agent, AgentRegistry, AgentType, PtyAgentManager}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Color` [INFO] [stdout] --> src/ui/markdown.rs:8:13 [INFO] [stdout] | [INFO] [stdout] 8 | style::{Color, Modifier, Style}, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Color` [INFO] [stdout] --> src/panels/output/file_viewer.rs:9:13 [INFO] [stdout] | [INFO] [stdout] 9 | style::{Color, Style}, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `AgentType` [INFO] [stdout] --> src/panels/output/mod.rs:13:43 [INFO] [stdout] | [INFO] [stdout] 13 | use crate::agents::{Agent, AgentRegistry, AgentType, PtyAgentManager}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Color` [INFO] [stdout] --> src/ui/markdown.rs:8:13 [INFO] [stdout] | [INFO] [stdout] 8 | style::{Color, Modifier, Style}, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated associated constant `state::focus::PanelId::EDITOR`: Use OUTPUT instead [INFO] [stdout] --> src/panels/editor/mod.rs:819:18 [INFO] [stdout] | [INFO] [stdout] 819 | PanelId::EDITOR [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated associated constant `state::focus::PanelId::CHAT`: Use AGENTS instead [INFO] [stdout] --> src/panels/chat.rs:506:18 [INFO] [stdout] | [INFO] [stdout] 506 | PanelId::CHAT [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated associated constant `state::focus::PanelId::TERMINAL`: Use INPUT instead [INFO] [stdout] --> src/panels/terminal.rs:186:18 [INFO] [stdout] | [INFO] [stdout] 186 | PanelId::TERMINAL [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `task` [INFO] [stdout] --> src/agents/conductor.rs:145:5 [INFO] [stdout] | [INFO] [stdout] 145 | task: &str, [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_task` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_code_block` is never read [INFO] [stdout] --> src/agents/conductor.rs:347:21 [INFO] [stdout] | [INFO] [stdout] 347 | in_code_block = false; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated associated constant `state::focus::PanelId::EDITOR`: Use OUTPUT instead [INFO] [stdout] --> src/panels/editor/mod.rs:819:18 [INFO] [stdout] | [INFO] [stdout] 819 | PanelId::EDITOR [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated associated constant `state::focus::PanelId::CHAT`: Use AGENTS instead [INFO] [stdout] --> src/panels/chat.rs:506:18 [INFO] [stdout] | [INFO] [stdout] 506 | PanelId::CHAT [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated associated constant `state::focus::PanelId::TERMINAL`: Use INPUT instead [INFO] [stdout] --> src/panels/terminal.rs:186:18 [INFO] [stdout] | [INFO] [stdout] 186 | PanelId::TERMINAL [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> src/panels/input.rs:463:47 [INFO] [stdout] | [INFO] [stdout] 463 | fn handle_input(&mut self, event: &Event, state: &mut AppState) -> Result { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `cursor_char` [INFO] [stdout] --> src/panels/input.rs:646:17 [INFO] [stdout] | [INFO] [stdout] 646 | let cursor_char = if self.cursor < chars.len() { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cursor_char` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `area_width` [INFO] [stdout] --> src/panels/output/agent_viewer.rs:168:29 [INFO] [stdout] | [INFO] [stdout] 168 | fn render_output(&self, area_width: usize) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_area_width` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `agent_status` [INFO] [stdout] --> src/panels/output/mod.rs:336:29 [INFO] [stdout] | [INFO] [stdout] 336 | let agent_status = agent.status.clone(); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_agent_status` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `task` [INFO] [stdout] --> src/agents/conductor.rs:145:5 [INFO] [stdout] | [INFO] [stdout] 145 | task: &str, [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_task` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `in_code_block` is never read [INFO] [stdout] --> src/agents/conductor.rs:347:21 [INFO] [stdout] | [INFO] [stdout] 347 | in_code_block = false; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `dest_url` [INFO] [stdout] --> src/ui/markdown.rs:479:25 [INFO] [stdout] | [INFO] [stdout] 479 | Tag::Link { dest_url, .. } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `dest_url: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `rx` [INFO] [stdout] --> src/agents/executor.rs:475:18 [INFO] [stdout] | [INFO] [stdout] 475 | let (tx, rx) = crossbeam_channel::unbounded(); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_rx` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `visible_count` [INFO] [stdout] --> src/ui/workspace_selector.rs:743:13 [INFO] [stdout] | [INFO] [stdout] 743 | let visible_count = list_height as usize; [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_visible_count` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `total_items` [INFO] [stdout] --> src/ui/workspace_selector.rs:744:13 [INFO] [stdout] | [INFO] [stdout] 744 | let total_items = self.folder_entries.len() + 1; // +1 for "Select This Folder" [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_total_items` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `status` is never read [INFO] [stdout] --> src/llm/ollama.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct OllamaProvider { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 25 | status: RwLock, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `can_undo`, `can_redo`, and `clear` are never used [INFO] [stdout] --> src/panels/editor/undo.rs:70:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl UndoStack { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn can_undo(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 75 | pub fn can_redo(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 80 | pub fn clear(&mut self) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `parse_simple` is never used [INFO] [stdout] --> src/panels/input.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 53 | impl InputCommand { [INFO] [stdout] | ----------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 107 | pub fn parse_simple(input: &str) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_cli_agent` is never used [INFO] [stdout] --> src/panels/output/mod.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 73 | impl OutputPanel { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 103 | fn is_cli_agent(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `reload` and `line_count` are never used [INFO] [stdout] --> src/panels/output/file_viewer.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 37 | impl FileViewer { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn reload(&mut self) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 119 | pub fn line_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FileModification` is never constructed [INFO] [stdout] --> src/panels/chat.rs:21:12 [INFO] [stdout] | [INFO] [stdout] 21 | pub struct FileModification { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `parse_file_modifications` is never used [INFO] [stdout] --> src/panels/chat.rs:28:4 [INFO] [stdout] | [INFO] [stdout] 28 | fn parse_file_modifications(content: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_file_path` is never used [INFO] [stdout] --> src/panels/chat.rs:68:4 [INFO] [stdout] | [INFO] [stdout] 68 | fn extract_file_path(info_string: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `looks_like_file_path` is never used [INFO] [stdout] --> src/panels/chat.rs:91:4 [INFO] [stdout] | [INFO] [stdout] 91 | fn looks_like_file_path(s: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatMessage` is never constructed [INFO] [stdout] --> src/panels/chat.rs:102:12 [INFO] [stdout] | [INFO] [stdout] 102 | pub struct ChatMessage { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Role` is never used [INFO] [stdout] --> src/panels/chat.rs:109:10 [INFO] [stdout] | [INFO] [stdout] 109 | pub enum Role { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatPanel` is never constructed [INFO] [stdout] --> src/panels/chat.rs:116:12 [INFO] [stdout] | [INFO] [stdout] 116 | pub struct ChatPanel { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/panels/chat.rs:153:12 [INFO] [stdout] | [INFO] [stdout] 151 | impl ChatPanel { [INFO] [stdout] | -------------- associated items in this implementation [INFO] [stdout] 152 | /// Create new chat panel with the given LLM provider [INFO] [stdout] 153 | pub fn new(event_tx: Sender, llm: SharedProvider) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 173 | pub fn set_provider(&mut self, provider: SharedProvider) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 178 | pub fn provider_name(&self) -> &str { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 183 | pub fn provider_id(&self) -> &str { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 188 | fn scroll_to_bottom(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 193 | fn send_message(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 232 | pub fn append_chunk(&mut self, chunk: &str) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 239 | pub fn complete_response(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 263 | fn insert_char(&mut self, c: char) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 269 | fn backspace(&mut self) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 284 | fn handle_selection(&mut self, shift_held: bool) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 295 | fn get_selection_range(&self) -> Option<(usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 306 | fn get_selected_text(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 312 | fn delete_selection(&mut self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 323 | fn copy_selection(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 332 | fn cut_selection(&mut self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 343 | fn paste(&mut self) -> bool { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 355 | fn move_cursor_vertically(&mut self, delta: i32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 396 | fn format_history(&self, _width: u16) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 468 | fn input_height(&self, width: u16) -> u16 { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 489 | pub fn current_model(&self) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 494 | pub fn list_models(&self) -> std::result::Result, String> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 499 | pub fn set_model(&self, model: &str) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TerminalPanel` is never constructed [INFO] [stdout] --> src/panels/terminal.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct TerminalPanel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `process_output`, `get_screen_lines`, `scroll_to_bottom`, and `write_key` are never used [INFO] [stdout] --> src/panels/terminal.rs:48:12 [INFO] [stdout] | [INFO] [stdout] 42 | impl TerminalPanel { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 48 | pub fn new(event_tx: Sender, cwd: &Path) -> Result { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | pub fn process_output(&mut self, data: &[u8]) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | fn get_screen_lines(&self) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 124 | fn scroll_to_bottom(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 129 | fn write_key(&mut self, code: KeyCode, modifiers: KeyModifiers) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `vt100_color_to_ratatui` is never used [INFO] [stdout] --> src/panels/terminal.rs:367:4 [INFO] [stdout] | [INFO] [stdout] 367 | fn vt100_color_to_ratatui(color: vt100::Color) -> Color { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_dropdown` is never used [INFO] [stdout] --> src/ui/settings.rs:58:8 [INFO] [stdout] | [INFO] [stdout] 30 | impl SettingsRow { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 58 | fn is_dropdown(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/agents/executor.rs:129:17 [INFO] [stdout] | [INFO] [stdout] 129 | / for line in reader.lines() { [INFO] [stdout] 130 | | if let Ok(line) = line { [INFO] [stdout] 131 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 132 | | id: agent_id, [INFO] [stdout] ... | [INFO] [stdout] 136 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/agents/executor.rs:130:21 [INFO] [stdout] | [INFO] [stdout] 130 | / if let Ok(line) = line { [INFO] [stdout] 131 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 132 | | id: agent_id, [INFO] [stdout] 133 | | chunk: format!("{}\n", line), [INFO] [stdout] 134 | | }); [INFO] [stdout] 135 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 129 ~ for line in reader.lines().flatten() { [INFO] [stdout] 130 + let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 131 + id: agent_id, [INFO] [stdout] 132 + chunk: format!("{}\n", line), [INFO] [stdout] 133 + }); [INFO] [stdout] 134 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/agents/executor.rs:142:17 [INFO] [stdout] | [INFO] [stdout] 142 | / for line in reader.lines() { [INFO] [stdout] 143 | | if let Ok(line) = line { [INFO] [stdout] 144 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 145 | | id: agent_id, [INFO] [stdout] ... | [INFO] [stdout] 149 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/agents/executor.rs:143:21 [INFO] [stdout] | [INFO] [stdout] 143 | / if let Ok(line) = line { [INFO] [stdout] 144 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 145 | | id: agent_id, [INFO] [stdout] 146 | | chunk: format!("{}\n", line), [INFO] [stdout] 147 | | }); [INFO] [stdout] 148 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 142 ~ for line in reader.lines().flatten() { [INFO] [stdout] 143 + let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 144 + id: agent_id, [INFO] [stdout] 145 + chunk: format!("{}\n", line), [INFO] [stdout] 146 + }); [INFO] [stdout] 147 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/agents/executor.rs:172:10 [INFO] [stdout] | [INFO] [stdout] 172 | cwd: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 172 - cwd: &PathBuf, [INFO] [stdout] 172 + cwd: &Path, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/agents/executor.rs:302:10 [INFO] [stdout] | [INFO] [stdout] 302 | cwd: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 302 ~ cwd: &Path, [INFO] [stdout] 303 | event_tx: &Sender, [INFO] [stdout] ... [INFO] [stdout] 354 | let dir_path = if path.is_empty() { [INFO] [stdout] 355 ~ cwd.to_path_buf() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/config/loader.rs:104:18 [INFO] [stdout] | [INFO] [stdout] 104 | .or_insert_with(ProviderConfig::default); [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 `or_insert_with` to construct default value [INFO] [stdout] --> src/config/loader.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/config/loader.rs:133:18 [INFO] [stdout] | [INFO] [stdout] 133 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/config/loader.rs:146:18 [INFO] [stdout] | [INFO] [stdout] 146 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/config/writer.rs:72:22 [INFO] [stdout] | [INFO] [stdout] 72 | output.push_str(&format!( [INFO] [stdout] | ______________________^ [INFO] [stdout] 73 | | "# Default provider: claude, gemini, ollama, openai\n" [INFO] [stdout] 74 | | )); [INFO] [stdout] | |_____^ help: consider using `.to_string()`: `"# Default provider: claude, gemini, ollama, openai\n".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/llm/message.rs:167:58 [INFO] [stdout] | [INFO] [stdout] 167 | pub fn build_prompt_with_context(user_text: &str, files: &[(String, String, Option<(usize, usize)>)]) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/llm/message.rs:181:5 [INFO] [stdout] | [INFO] [stdout] 181 | prompt.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `prompt.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: this `if` statement can be collapsed [INFO] [stdout] --> src/llm/ollama.rs:196:17 [INFO] [stdout] | [INFO] [stdout] 196 | / if !content.is_empty() { [INFO] [stdout] 197 | | if event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 198 | | break; // Channel closed [INFO] [stdout] 199 | | } [INFO] [stdout] 200 | | } [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] 196 ~ if !content.is_empty() [INFO] [stdout] 197 ~ && event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 198 | break; // Channel closed [INFO] [stdout] 199 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/llm/claude.rs:173:29 [INFO] [stdout] | [INFO] [stdout] 173 | / ... if !text.is_empty() { [INFO] [stdout] 174 | | ... if event_tx.send(Event::LlmChunk(text.to_string())).is_err() { [INFO] [stdout] 175 | | ... break; [INFO] [stdout] 176 | | ... } [INFO] [stdout] 177 | | ... } [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] 173 ~ if !text.is_empty() [INFO] [stdout] 174 ~ && event_tx.send(Event::LlmChunk(text.to_string())).is_err() { [INFO] [stdout] 175 | break; [INFO] [stdout] 176 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/llm/gemini.rs:195:37 [INFO] [stdout] | [INFO] [stdout] 195 | / ... if !text.is_empty() { [INFO] [stdout] 196 | | ... if event_tx.send(Event::LlmChunk(text.to_string())).is_err() [INFO] [stdout] 197 | | ... { [INFO] [stdout] 198 | | ... return Ok(()); [INFO] [stdout] 199 | | ... } [INFO] [stdout] 200 | | ... } [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] 195 ~ if !text.is_empty() [INFO] [stdout] 196 ~ && event_tx.send(Event::LlmChunk(text.to_string())).is_err() [INFO] [stdout] 197 | { [INFO] [stdout] 198 | return Ok(()); [INFO] [stdout] 199 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/panels/editor/mod.rs:239:22 [INFO] [stdout] | [INFO] [stdout] 239 | .map_err(|e| crate::core::AxiomError::Io(e))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `crate::core::AxiomError::Io` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `state` [INFO] [stdout] --> src/panels/input.rs:463:47 [INFO] [stdout] | [INFO] [stdout] 463 | fn handle_input(&mut self, event: &Event, state: &mut AppState) -> Result { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/panels/editor/mod.rs:1340:9 [INFO] [stdout] | [INFO] [stdout] 1340 | / if focused { [INFO] [stdout] 1341 | | if tab.cursor.0 >= scroll_y && tab.cursor.0 < scroll_y + visible_height { [INFO] [stdout] 1342 | | let cursor_x = content_area.x + gutter_width as u16 + tab.cursor.1 as u16; [INFO] [stdout] 1343 | | let cursor_y = content_area.y + (tab.cursor.0 - scroll_y) as u16; [INFO] [stdout] ... | [INFO] [stdout] 1351 | | } [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] 1340 ~ if focused [INFO] [stdout] 1341 ~ && tab.cursor.0 >= scroll_y && tab.cursor.0 < scroll_y + visible_height { [INFO] [stdout] 1342 | let cursor_x = content_area.x + gutter_width as u16 + tab.cursor.1 as u16; [INFO] [stdout] ... [INFO] [stdout] 1349 | } [INFO] [stdout] 1350 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `cursor_char` [INFO] [stdout] --> src/panels/input.rs:646:17 [INFO] [stdout] | [INFO] [stdout] 646 | let cursor_char = if self.cursor < chars.len() { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cursor_char` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `area_width` [INFO] [stdout] --> src/panels/output/agent_viewer.rs:168:29 [INFO] [stdout] | [INFO] [stdout] 168 | fn render_output(&self, area_width: usize) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_area_width` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/panels/input.rs:78:24 [INFO] [stdout] | [INFO] [stdout] 78 | let rest = &trimmed[1..]; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/panels/input.rs:77:9 [INFO] [stdout] | [INFO] [stdout] 77 | if trimmed.starts_with('#') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 77 ~ if let Some(rest) = trimmed.strip_prefix('#') { [INFO] [stdout] 78 ~ // Split at first space: #agent prompt [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `agent_status` [INFO] [stdout] --> src/panels/output/mod.rs:336:29 [INFO] [stdout] | [INFO] [stdout] 336 | let agent_status = agent.status.clone(); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_agent_status` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/panels/input.rs:346:9 [INFO] [stdout] | [INFO] [stdout] 346 | / match self.history_index { [INFO] [stdout] 347 | | Some(idx) => { [INFO] [stdout] 348 | | if idx < self.history.len() - 1 { [INFO] [stdout] 349 | | self.history_index = Some(idx + 1); [INFO] [stdout] ... | [INFO] [stdout] 357 | | None => {} [INFO] [stdout] 358 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 346 ~ if let Some(idx) = self.history_index { [INFO] [stdout] 347 + if idx < self.history.len() - 1 { [INFO] [stdout] 348 + self.history_index = Some(idx + 1); [INFO] [stdout] 349 + self.input = self.history[idx + 1].clone(); [INFO] [stdout] 350 + } else { [INFO] [stdout] 351 + // Back to saved input [INFO] [stdout] 352 + self.history_index = None; [INFO] [stdout] 353 + self.input = self.saved_input.clone(); [INFO] [stdout] 354 + } [INFO] [stdout] 355 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual checked division [INFO] [stdout] --> src/panels/output/agent_viewer.rs:221:30 [INFO] [stdout] | [INFO] [stdout] 221 | let pct = if total_lines == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ check performed here [INFO] [stdout] ... [INFO] [stdout] 224 | (visible_end * 100) / total_lines [INFO] [stdout] | --------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] = note: `#[warn(clippy::manual_checked_ops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual arithmetic check found [INFO] [stdout] --> src/panels/chat.rs:722:26 [INFO] [stdout] | [INFO] [stdout] 722 | let max_scroll = if history_len > visible_height { [INFO] [stdout] | __________________________^ [INFO] [stdout] 723 | | history_len - visible_height [INFO] [stdout] 724 | | } else { [INFO] [stdout] 725 | | 0 [INFO] [stdout] 726 | | }; [INFO] [stdout] | |_________^ help: replace it with: `history_len.saturating_sub(visible_height)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/panels/chat.rs:782:25 [INFO] [stdout] | [INFO] [stdout] 782 | (line.len() + inner_width - 1) / inner_width [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `line.len().div_ceil(inner_width)` [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: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/panels/terminal.rs:330:42 [INFO] [stdout] | [INFO] [stdout] 330 | let cursor_x = inner.x + cursor.1 as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `cursor.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/panels/terminal.rs:331:42 [INFO] [stdout] | [INFO] [stdout] 331 | let cursor_y = inner.y + cursor.0 as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `cursor.0` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `dest_url` [INFO] [stdout] --> src/ui/markdown.rs:479:25 [INFO] [stdout] | [INFO] [stdout] 479 | Tag::Link { dest_url, .. } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `dest_url: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/state/context.rs:43:1 [INFO] [stdout] | [INFO] [stdout] 43 | / impl Default for OutputContext { [INFO] [stdout] 44 | | fn default() -> Self { [INFO] [stdout] 45 | | Self::Empty [INFO] [stdout] 46 | | } [INFO] [stdout] 47 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 32 + #[derive(Default)] [INFO] [stdout] 33 | pub enum OutputContext { [INFO] [stdout] 34 | /// Viewing a file from the file tree [INFO] [stdout] ... [INFO] [stdout] 40 | /// Empty state (no context selected) [INFO] [stdout] 41 ~ #[default] [INFO] [stdout] 42 ~ Empty, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/ui/markdown.rs:423:17 [INFO] [stdout] | [INFO] [stdout] 423 | / if !self.lines.is_empty() && !self.current_line.is_empty() { [INFO] [stdout] 424 | | self.flush_line(); [INFO] [stdout] 425 | | } [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] 422 ~ Tag::Paragraph [INFO] [stdout] 423 ~ if !self.lines.is_empty() && !self.current_line.is_empty() => { [INFO] [stdout] 424 | self.flush_line(); [INFO] [stdout] 425 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ui/scroll.rs:79:53 [INFO] [stdout] | [INFO] [stdout] 79 | frame.buffer_mut().set_string(bar_x, y, &ch.to_string(), style); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `ch.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `visible_count` [INFO] [stdout] --> src/ui/workspace_selector.rs:743:13 [INFO] [stdout] | [INFO] [stdout] 743 | let visible_count = list_height as usize; [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_visible_count` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `total_items` [INFO] [stdout] --> src/ui/workspace_selector.rs:744:13 [INFO] [stdout] | [INFO] [stdout] 744 | let total_items = self.folder_entries.len() + 1; // +1 for "Select This Folder" [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_total_items` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `status` is never read [INFO] [stdout] --> src/llm/ollama.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct OllamaProvider { [INFO] [stdout] | -------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 25 | status: RwLock, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `clear` is never used [INFO] [stdout] --> src/panels/editor/undo.rs:80:12 [INFO] [stdout] | [INFO] [stdout] 35 | impl UndoStack { [INFO] [stdout] | -------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 80 | pub fn clear(&mut self) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_cli_agent` is never used [INFO] [stdout] --> src/panels/output/mod.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 73 | impl OutputPanel { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 103 | fn is_cli_agent(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `reload` and `line_count` are never used [INFO] [stdout] --> src/panels/output/file_viewer.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 37 | impl FileViewer { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn reload(&mut self) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 119 | pub fn line_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatMessage` is never constructed [INFO] [stdout] --> src/panels/chat.rs:102:12 [INFO] [stdout] | [INFO] [stdout] 102 | pub struct ChatMessage { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Role` is never used [INFO] [stdout] --> src/panels/chat.rs:109:10 [INFO] [stdout] | [INFO] [stdout] 109 | pub enum Role { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChatPanel` is never constructed [INFO] [stdout] --> src/panels/chat.rs:116:12 [INFO] [stdout] | [INFO] [stdout] 116 | pub struct ChatPanel { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/panels/chat.rs:153:12 [INFO] [stdout] | [INFO] [stdout] 151 | impl ChatPanel { [INFO] [stdout] | -------------- associated items in this implementation [INFO] [stdout] 152 | /// Create new chat panel with the given LLM provider [INFO] [stdout] 153 | pub fn new(event_tx: Sender, llm: SharedProvider) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 173 | pub fn set_provider(&mut self, provider: SharedProvider) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 178 | pub fn provider_name(&self) -> &str { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 183 | pub fn provider_id(&self) -> &str { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 188 | fn scroll_to_bottom(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 193 | fn send_message(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 232 | pub fn append_chunk(&mut self, chunk: &str) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 239 | pub fn complete_response(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 263 | fn insert_char(&mut self, c: char) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 269 | fn backspace(&mut self) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 284 | fn handle_selection(&mut self, shift_held: bool) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 295 | fn get_selection_range(&self) -> Option<(usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 306 | fn get_selected_text(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 312 | fn delete_selection(&mut self) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 323 | fn copy_selection(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 332 | fn cut_selection(&mut self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 343 | fn paste(&mut self) -> bool { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 355 | fn move_cursor_vertically(&mut self, delta: i32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 396 | fn format_history(&self, _width: u16) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 468 | fn input_height(&self, width: u16) -> u16 { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 489 | pub fn current_model(&self) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 494 | pub fn list_models(&self) -> std::result::Result, String> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 499 | pub fn set_model(&self, model: &str) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TerminalPanel` is never constructed [INFO] [stdout] --> src/panels/terminal.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 25 | pub struct TerminalPanel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `process_output`, `get_screen_lines`, `scroll_to_bottom`, and `write_key` are never used [INFO] [stdout] --> src/panels/terminal.rs:48:12 [INFO] [stdout] | [INFO] [stdout] 42 | impl TerminalPanel { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 48 | pub fn new(event_tx: Sender, cwd: &Path) -> Result { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 66 | pub fn process_output(&mut self, data: &[u8]) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | fn get_screen_lines(&self) -> Vec> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 124 | fn scroll_to_bottom(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 129 | fn write_key(&mut self, code: KeyCode, modifiers: KeyModifiers) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `vt100_color_to_ratatui` is never used [INFO] [stdout] --> src/panels/terminal.rs:367:4 [INFO] [stdout] | [INFO] [stdout] 367 | fn vt100_color_to_ratatui(color: vt100::Color) -> Color { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_dropdown` is never used [INFO] [stdout] --> src/ui/settings.rs:58:8 [INFO] [stdout] | [INFO] [stdout] 30 | impl SettingsRow { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 58 | fn is_dropdown(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/ui/settings.rs:475:27 [INFO] [stdout] | [INFO] [stdout] 475 | let modal_width = (area.width as f32 * 0.6).max(50.0).min(70.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.width as f32 * 0.6).clamp(50.0, 70.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/ui/settings.rs:476:28 [INFO] [stdout] | [INFO] [stdout] 476 | let modal_height = (area.height as f32 * 0.5).max(15.0).min(20.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.height as f32 * 0.5).clamp(15.0, 20.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `from_str` can be confused for the standard trait method `std::str::FromStr::from_str` [INFO] [stdout] --> src/ui/theme.rs:97:5 [INFO] [stdout] | [INFO] [stdout] 97 | / pub fn from_str(s: &str) -> Self { [INFO] [stdout] 98 | | match s.to_lowercase().as_str() { [INFO] [stdout] 99 | | "light" => ThemeVariant::Light, [INFO] [stdout] 100 | | "system" => ThemeVariant::System, [INFO] [stdout] ... | [INFO] [stdout] 103 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: consider implementing the trait `std::str::FromStr` or choosing a less ambiguous method name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stdout] = note: `#[warn(clippy::should_implement_trait)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/ui/workspace_selector.rs:371:13 [INFO] [stdout] | [INFO] [stdout] 371 | dirs.sort_by(|a, b| a.file_name().cmp(&b.file_name())); [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] 371 - dirs.sort_by(|a, b| a.file_name().cmp(&b.file_name())); [INFO] [stdout] 371 + dirs.sort_by_key(|a| a.file_name()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/agents/executor.rs:129:17 [INFO] [stdout] | [INFO] [stdout] 129 | / for line in reader.lines() { [INFO] [stdout] 130 | | if let Ok(line) = line { [INFO] [stdout] 131 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 132 | | id: agent_id, [INFO] [stdout] ... | [INFO] [stdout] 136 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/agents/executor.rs:130:21 [INFO] [stdout] | [INFO] [stdout] 130 | / if let Ok(line) = line { [INFO] [stdout] 131 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 132 | | id: agent_id, [INFO] [stdout] 133 | | chunk: format!("{}\n", line), [INFO] [stdout] 134 | | }); [INFO] [stdout] 135 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 129 ~ for line in reader.lines().flatten() { [INFO] [stdout] 130 + let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 131 + id: agent_id, [INFO] [stdout] 132 + chunk: format!("{}\n", line), [INFO] [stdout] 133 + }); [INFO] [stdout] 134 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/agents/executor.rs:142:17 [INFO] [stdout] | [INFO] [stdout] 142 | / for line in reader.lines() { [INFO] [stdout] 143 | | if let Ok(line) = line { [INFO] [stdout] 144 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 145 | | id: agent_id, [INFO] [stdout] ... | [INFO] [stdout] 149 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/agents/executor.rs:143:21 [INFO] [stdout] | [INFO] [stdout] 143 | / if let Ok(line) = line { [INFO] [stdout] 144 | | let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 145 | | id: agent_id, [INFO] [stdout] 146 | | chunk: format!("{}\n", line), [INFO] [stdout] 147 | | }); [INFO] [stdout] 148 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 142 ~ for line in reader.lines().flatten() { [INFO] [stdout] 143 + let _ = event_tx.send(Event::AgentOutput { [INFO] [stdout] 144 + id: agent_id, [INFO] [stdout] 145 + chunk: format!("{}\n", line), [INFO] [stdout] 146 + }); [INFO] [stdout] 147 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/ui/workspace_selector.rs:463:27 [INFO] [stdout] | [INFO] [stdout] 463 | let modal_width = (area.width as f32 * 0.7).max(50.0).min(80.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.width as f32 * 0.7).clamp(50.0, 80.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/ui/workspace_selector.rs:464:28 [INFO] [stdout] | [INFO] [stdout] 464 | let modal_height = (area.height as f32 * 0.6).max(15.0).min(25.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.height as f32 * 0.6).clamp(15.0, 25.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/agents/executor.rs:172:10 [INFO] [stdout] | [INFO] [stdout] 172 | cwd: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 172 - cwd: &PathBuf, [INFO] [stdout] 172 + cwd: &Path, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/agents/executor.rs:302:10 [INFO] [stdout] | [INFO] [stdout] 302 | cwd: &PathBuf, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 302 ~ cwd: &Path, [INFO] [stdout] 303 | event_tx: &Sender, [INFO] [stdout] ... [INFO] [stdout] 354 | let dir_path = if path.is_empty() { [INFO] [stdout] 355 ~ cwd.to_path_buf() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/config/loader.rs:104:18 [INFO] [stdout] | [INFO] [stdout] 104 | .or_insert_with(ProviderConfig::default); [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 `or_insert_with` to construct default value [INFO] [stdout] --> src/config/loader.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/config/loader.rs:133:18 [INFO] [stdout] | [INFO] [stdout] 133 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/config/loader.rs:146:18 [INFO] [stdout] | [INFO] [stdout] 146 | .or_insert_with(ProviderConfig::default); [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] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/config/writer.rs:72:22 [INFO] [stdout] | [INFO] [stdout] 72 | output.push_str(&format!( [INFO] [stdout] | ______________________^ [INFO] [stdout] 73 | | "# Default provider: claude, gemini, ollama, openai\n" [INFO] [stdout] 74 | | )); [INFO] [stdout] | |_____^ help: consider using `.to_string()`: `"# Default provider: claude, gemini, ollama, openai\n".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/llm/message.rs:167:58 [INFO] [stdout] | [INFO] [stdout] 167 | pub fn build_prompt_with_context(user_text: &str, files: &[(String, String, Option<(usize, usize)>)]) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `push_str()` using a single-character string literal [INFO] [stdout] --> src/llm/message.rs:181:5 [INFO] [stdout] | [INFO] [stdout] 181 | prompt.push_str("\n"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ help: consider using `push` with a character literal: `prompt.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: this `if` statement can be collapsed [INFO] [stdout] --> src/llm/ollama.rs:196:17 [INFO] [stdout] | [INFO] [stdout] 196 | / if !content.is_empty() { [INFO] [stdout] 197 | | if event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 198 | | break; // Channel closed [INFO] [stdout] 199 | | } [INFO] [stdout] 200 | | } [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] 196 ~ if !content.is_empty() [INFO] [stdout] 197 ~ && event_tx.send(Event::LlmChunk(content.to_string())).is_err() { [INFO] [stdout] 198 | break; // Channel closed [INFO] [stdout] 199 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/llm/claude.rs:173:29 [INFO] [stdout] | [INFO] [stdout] 173 | / ... if !text.is_empty() { [INFO] [stdout] 174 | | ... if event_tx.send(Event::LlmChunk(text.to_string())).is_err() { [INFO] [stdout] 175 | | ... break; [INFO] [stdout] 176 | | ... } [INFO] [stdout] 177 | | ... } [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] 173 ~ if !text.is_empty() [INFO] [stdout] 174 ~ && event_tx.send(Event::LlmChunk(text.to_string())).is_err() { [INFO] [stdout] 175 | break; [INFO] [stdout] 176 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/llm/gemini.rs:195:37 [INFO] [stdout] | [INFO] [stdout] 195 | / ... if !text.is_empty() { [INFO] [stdout] 196 | | ... if event_tx.send(Event::LlmChunk(text.to_string())).is_err() [INFO] [stdout] 197 | | ... { [INFO] [stdout] 198 | | ... return Ok(()); [INFO] [stdout] 199 | | ... } [INFO] [stdout] 200 | | ... } [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] 195 ~ if !text.is_empty() [INFO] [stdout] 196 ~ && event_tx.send(Event::LlmChunk(text.to_string())).is_err() [INFO] [stdout] 197 | { [INFO] [stdout] 198 | return Ok(()); [INFO] [stdout] 199 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `config` [INFO] [stdout] --> src/main.rs:1825:5 [INFO] [stdout] | [INFO] [stdout] 1825 | config: &AxiomConfig, [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `pty_manager` [INFO] [stdout] --> src/main.rs:1970:5 [INFO] [stdout] | [INFO] [stdout] 1970 | pty_manager: &Arc>, [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pty_manager` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_source_file` is never used [INFO] [stdout] --> src/main.rs:1775:4 [INFO] [stdout] | [INFO] [stdout] 1775 | fn is_source_file(path: &std::path::Path) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:177:9 [INFO] [stdout] | [INFO] [stdout] 177 | / return Err(axiom::core::AxiomError::Config( [INFO] [stdout] 178 | | "No supported terminal emulator found".into(), [INFO] [stdout] 179 | | )); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 177 ~ Err(axiom::core::AxiomError::Config( [INFO] [stdout] 178 + "No supported terminal emulator found".into(), [INFO] [stdout] 179 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/panels/editor/mod.rs:239:22 [INFO] [stdout] | [INFO] [stdout] 239 | .map_err(|e| crate::core::AxiomError::Io(e))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the tuple variant itself: `crate::core::AxiomError::Io` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/main.rs:606:1 [INFO] [stdout] | [INFO] [stdout] 606 | / fn handle_event( [INFO] [stdout] 607 | | event: &Event, [INFO] [stdout] 608 | | state: &mut AppState, [INFO] [stdout] 609 | | panels: &mut PanelRegistry, [INFO] [stdout] ... | [INFO] [stdout] 614 | | pty_manager: &Arc>, [INFO] [stdout] 615 | | ) -> Result { [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` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:1025:25 [INFO] [stdout] | [INFO] [stdout] 1025 | / if panels.settings.contains(x, y) { [INFO] [stdout] 1026 | | panels.settings.up(); [INFO] [stdout] 1027 | | } [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] 1024 ~ event::MouseEventKind::ScrollUp [INFO] [stdout] 1025 ~ if panels.settings.contains(x, y) => { [INFO] [stdout] 1026 | panels.settings.up(); [INFO] [stdout] 1027 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:1030:25 [INFO] [stdout] | [INFO] [stdout] 1030 | / if panels.settings.contains(x, y) { [INFO] [stdout] 1031 | | panels.settings.down(); [INFO] [stdout] 1032 | | } [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] 1029 ~ event::MouseEventKind::ScrollDown [INFO] [stdout] 1030 ~ if panels.settings.contains(x, y) => { [INFO] [stdout] 1031 | panels.settings.down(); [INFO] [stdout] 1032 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:1059:25 [INFO] [stdout] | [INFO] [stdout] 1059 | / if panels.model_selector.contains(x, y) { [INFO] [stdout] 1060 | | panels.model_selector.handle_scroll(false); [INFO] [stdout] 1061 | | } [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] 1058 ~ event::MouseEventKind::ScrollUp [INFO] [stdout] 1059 ~ if panels.model_selector.contains(x, y) => { [INFO] [stdout] 1060 | panels.model_selector.handle_scroll(false); [INFO] [stdout] 1061 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:1064:25 [INFO] [stdout] | [INFO] [stdout] 1064 | / if panels.model_selector.contains(x, y) { [INFO] [stdout] 1065 | | panels.model_selector.handle_scroll(true); [INFO] [stdout] 1066 | | } [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] 1063 ~ event::MouseEventKind::ScrollDown [INFO] [stdout] 1064 ~ if panels.model_selector.contains(x, y) => { [INFO] [stdout] 1065 | panels.model_selector.handle_scroll(true); [INFO] [stdout] 1066 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/panels/editor/mod.rs:1340:9 [INFO] [stdout] | [INFO] [stdout] 1340 | / if focused { [INFO] [stdout] 1341 | | if tab.cursor.0 >= scroll_y && tab.cursor.0 < scroll_y + visible_height { [INFO] [stdout] 1342 | | let cursor_x = content_area.x + gutter_width as u16 + tab.cursor.1 as u16; [INFO] [stdout] 1343 | | let cursor_y = content_area.y + (tab.cursor.0 - scroll_y) as u16; [INFO] [stdout] ... | [INFO] [stdout] 1351 | | } [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] 1340 ~ if focused [INFO] [stdout] 1341 ~ && tab.cursor.0 >= scroll_y && tab.cursor.0 < scroll_y + visible_height { [INFO] [stdout] 1342 | let cursor_x = content_area.x + gutter_width as u16 + tab.cursor.1 as u16; [INFO] [stdout] ... [INFO] [stdout] 1349 | } [INFO] [stdout] 1350 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/main.rs:1500:32 [INFO] [stdout] | [INFO] [stdout] 1500 | if let Ok(_) = state.switch_workspace(workspace.id) { [INFO] [stdout] | -------^^^^^--------------------------------------- help: try: `if state.switch_workspace(workspace.id).is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/main.rs:1579:32 [INFO] [stdout] | [INFO] [stdout] 1579 | if let Ok(_) = state.switch_workspace(workspace.id) { [INFO] [stdout] | -------^^^^^--------------------------------------- help: try: `if state.switch_workspace(workspace.id).is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `config` [INFO] [stdout] --> src/main.rs:1825:5 [INFO] [stdout] | [INFO] [stdout] 1825 | config: &AxiomConfig, [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `pty_manager` [INFO] [stdout] --> src/main.rs:1970:5 [INFO] [stdout] | [INFO] [stdout] 1970 | pty_manager: &Arc>, [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pty_manager` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_source_file` is never used [INFO] [stdout] --> src/main.rs:1775:4 [INFO] [stdout] | [INFO] [stdout] 1775 | fn is_source_file(path: &std::path::Path) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:177:9 [INFO] [stdout] | [INFO] [stdout] 177 | / return Err(axiom::core::AxiomError::Config( [INFO] [stdout] 178 | | "No supported terminal emulator found".into(), [INFO] [stdout] 179 | | )); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 177 ~ Err(axiom::core::AxiomError::Config( [INFO] [stdout] 178 + "No supported terminal emulator found".into(), [INFO] [stdout] 179 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/panels/input.rs:78:24 [INFO] [stdout] | [INFO] [stdout] 78 | let rest = &trimmed[1..]; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/panels/input.rs:77:9 [INFO] [stdout] | [INFO] [stdout] 77 | if trimmed.starts_with('#') { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_strip [INFO] [stdout] = note: `#[warn(clippy::manual_strip)]` on by default [INFO] [stdout] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 77 ~ if let Some(rest) = trimmed.strip_prefix('#') { [INFO] [stdout] 78 ~ // Split at first space: #agent prompt [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/panels/input.rs:346:9 [INFO] [stdout] | [INFO] [stdout] 346 | / match self.history_index { [INFO] [stdout] 347 | | Some(idx) => { [INFO] [stdout] 348 | | if idx < self.history.len() - 1 { [INFO] [stdout] 349 | | self.history_index = Some(idx + 1); [INFO] [stdout] ... | [INFO] [stdout] 357 | | None => {} [INFO] [stdout] 358 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 346 ~ if let Some(idx) = self.history_index { [INFO] [stdout] 347 + if idx < self.history.len() - 1 { [INFO] [stdout] 348 + self.history_index = Some(idx + 1); [INFO] [stdout] 349 + self.input = self.history[idx + 1].clone(); [INFO] [stdout] 350 + } else { [INFO] [stdout] 351 + // Back to saved input [INFO] [stdout] 352 + self.history_index = None; [INFO] [stdout] 353 + self.input = self.saved_input.clone(); [INFO] [stdout] 354 + } [INFO] [stdout] 355 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/main.rs:606:1 [INFO] [stdout] | [INFO] [stdout] 606 | / fn handle_event( [INFO] [stdout] 607 | | event: &Event, [INFO] [stdout] 608 | | state: &mut AppState, [INFO] [stdout] 609 | | panels: &mut PanelRegistry, [INFO] [stdout] ... | [INFO] [stdout] 614 | | pty_manager: &Arc>, [INFO] [stdout] 615 | | ) -> Result { [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: manual checked division [INFO] [stdout] --> src/panels/output/agent_viewer.rs:221:30 [INFO] [stdout] | [INFO] [stdout] 221 | let pct = if total_lines == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ check performed here [INFO] [stdout] ... [INFO] [stdout] 224 | (visible_end * 100) / total_lines [INFO] [stdout] | --------------------------------- division performed here [INFO] [stdout] | [INFO] [stdout] = help: consider using `checked_div` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_checked_ops [INFO] [stdout] = note: `#[warn(clippy::manual_checked_ops)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:1025:25 [INFO] [stdout] | [INFO] [stdout] 1025 | / if panels.settings.contains(x, y) { [INFO] [stdout] 1026 | | panels.settings.up(); [INFO] [stdout] 1027 | | } [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] 1024 ~ event::MouseEventKind::ScrollUp [INFO] [stdout] 1025 ~ if panels.settings.contains(x, y) => { [INFO] [stdout] 1026 | panels.settings.up(); [INFO] [stdout] 1027 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:1030:25 [INFO] [stdout] | [INFO] [stdout] 1030 | / if panels.settings.contains(x, y) { [INFO] [stdout] 1031 | | panels.settings.down(); [INFO] [stdout] 1032 | | } [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] 1029 ~ event::MouseEventKind::ScrollDown [INFO] [stdout] 1030 ~ if panels.settings.contains(x, y) => { [INFO] [stdout] 1031 | panels.settings.down(); [INFO] [stdout] 1032 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:1059:25 [INFO] [stdout] | [INFO] [stdout] 1059 | / if panels.model_selector.contains(x, y) { [INFO] [stdout] 1060 | | panels.model_selector.handle_scroll(false); [INFO] [stdout] 1061 | | } [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] 1058 ~ event::MouseEventKind::ScrollUp [INFO] [stdout] 1059 ~ if panels.model_selector.contains(x, y) => { [INFO] [stdout] 1060 | panels.model_selector.handle_scroll(false); [INFO] [stdout] 1061 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:1064:25 [INFO] [stdout] | [INFO] [stdout] 1064 | / if panels.model_selector.contains(x, y) { [INFO] [stdout] 1065 | | panels.model_selector.handle_scroll(true); [INFO] [stdout] 1066 | | } [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] 1063 ~ event::MouseEventKind::ScrollDown [INFO] [stdout] 1064 ~ if panels.model_selector.contains(x, y) => { [INFO] [stdout] 1065 | panels.model_selector.handle_scroll(true); [INFO] [stdout] 1066 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/main.rs:1500:32 [INFO] [stdout] | [INFO] [stdout] 1500 | if let Ok(_) = state.switch_workspace(workspace.id) { [INFO] [stdout] | -------^^^^^--------------------------------------- help: try: `if state.switch_workspace(workspace.id).is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/main.rs:1579:32 [INFO] [stdout] | [INFO] [stdout] 1579 | if let Ok(_) = state.switch_workspace(workspace.id) { [INFO] [stdout] | -------^^^^^--------------------------------------- help: try: `if state.switch_workspace(workspace.id).is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual arithmetic check found [INFO] [stdout] --> src/panels/chat.rs:722:26 [INFO] [stdout] | [INFO] [stdout] 722 | let max_scroll = if history_len > visible_height { [INFO] [stdout] | __________________________^ [INFO] [stdout] 723 | | history_len - visible_height [INFO] [stdout] 724 | | } else { [INFO] [stdout] 725 | | 0 [INFO] [stdout] 726 | | }; [INFO] [stdout] | |_________^ help: replace it with: `history_len.saturating_sub(visible_height)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub [INFO] [stdout] = note: `#[warn(clippy::implicit_saturating_sub)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manually reimplementing `div_ceil` [INFO] [stdout] --> src/panels/chat.rs:782:25 [INFO] [stdout] | [INFO] [stdout] 782 | (line.len() + inner_width - 1) / inner_width [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `line.len().div_ceil(inner_width)` [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: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/panels/terminal.rs:330:42 [INFO] [stdout] | [INFO] [stdout] 330 | let cursor_x = inner.x + cursor.1 as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `cursor.1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u16` -> `u16`) [INFO] [stdout] --> src/panels/terminal.rs:331:42 [INFO] [stdout] | [INFO] [stdout] 331 | let cursor_y = inner.y + cursor.0 as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: try: `cursor.0` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `MessageLevel` which implements the `Copy` trait [INFO] [stdout] --> src/state/app.rs:287:22 [INFO] [stdout] | [INFO] [stdout] 287 | let cloned = level.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `level` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/state/context.rs:43:1 [INFO] [stdout] | [INFO] [stdout] 43 | / impl Default for OutputContext { [INFO] [stdout] 44 | | fn default() -> Self { [INFO] [stdout] 45 | | Self::Empty [INFO] [stdout] 46 | | } [INFO] [stdout] 47 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 32 + #[derive(Default)] [INFO] [stdout] 33 | pub enum OutputContext { [INFO] [stdout] 34 | /// Viewing a file from the file tree [INFO] [stdout] ... [INFO] [stdout] 40 | /// Empty state (no context selected) [INFO] [stdout] 41 ~ #[default] [INFO] [stdout] 42 ~ Empty, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/ui/layout.rs:147:17 [INFO] [stdout] | [INFO] [stdout] 147 | assert!(file_tree_pct >= 15.0 && file_tree_pct <= 25.0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(15.0..=25.0).contains(&file_tree_pct)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `RangeInclusive::contains` implementation [INFO] [stdout] --> src/ui/layout.rs:151:17 [INFO] [stdout] | [INFO] [stdout] 151 | assert!(agents_pct >= 15.0 && agents_pct <= 25.0); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `(15.0..=25.0).contains(&agents_pct)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/ui/markdown.rs:423:17 [INFO] [stdout] | [INFO] [stdout] 423 | / if !self.lines.is_empty() && !self.current_line.is_empty() { [INFO] [stdout] 424 | | self.flush_line(); [INFO] [stdout] 425 | | } [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] 422 ~ Tag::Paragraph [INFO] [stdout] 423 ~ if !self.lines.is_empty() && !self.current_line.is_empty() => { [INFO] [stdout] 424 | self.flush_line(); [INFO] [stdout] 425 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/ui/scroll.rs:79:53 [INFO] [stdout] | [INFO] [stdout] 79 | frame.buffer_mut().set_string(bar_x, y, &ch.to_string(), style); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: change this to: `ch.to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/ui/settings.rs:475:27 [INFO] [stdout] | [INFO] [stdout] 475 | let modal_width = (area.width as f32 * 0.6).max(50.0).min(70.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.width as f32 * 0.6).clamp(50.0, 70.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] = note: `#[warn(clippy::manual_clamp)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/ui/settings.rs:476:28 [INFO] [stdout] | [INFO] [stdout] 476 | let modal_height = (area.height as f32 * 0.5).max(15.0).min(20.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.height as f32 * 0.5).clamp(15.0, 20.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `from_str` can be confused for the standard trait method `std::str::FromStr::from_str` [INFO] [stdout] --> src/ui/theme.rs:97:5 [INFO] [stdout] | [INFO] [stdout] 97 | / pub fn from_str(s: &str) -> Self { [INFO] [stdout] 98 | | match s.to_lowercase().as_str() { [INFO] [stdout] 99 | | "light" => ThemeVariant::Light, [INFO] [stdout] 100 | | "system" => ThemeVariant::System, [INFO] [stdout] ... | [INFO] [stdout] 103 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: consider implementing the trait `std::str::FromStr` or choosing a less ambiguous method name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stdout] = note: `#[warn(clippy::should_implement_trait)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_by_key` [INFO] [stdout] --> src/ui/workspace_selector.rs:371:13 [INFO] [stdout] | [INFO] [stdout] 371 | dirs.sort_by(|a, b| a.file_name().cmp(&b.file_name())); [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] 371 - dirs.sort_by(|a, b| a.file_name().cmp(&b.file_name())); [INFO] [stdout] 371 + dirs.sort_by_key(|a| a.file_name()); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/ui/workspace_selector.rs:463:27 [INFO] [stdout] | [INFO] [stdout] 463 | let modal_width = (area.width as f32 * 0.7).max(50.0).min(80.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.width as f32 * 0.7).clamp(50.0, 80.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: clamp-like pattern without using clamp function [INFO] [stdout] --> src/ui/workspace_selector.rs:464:28 [INFO] [stdout] | [INFO] [stdout] 464 | let modal_height = (area.height as f32 * 0.6).max(15.0).min(25.0) as u16; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with clamp: `(area.height as f32 * 0.6).clamp(15.0, 25.0)` [INFO] [stdout] | [INFO] [stdout] = note: clamp will panic if max < min, min.is_nan(), or max.is_nan() [INFO] [stdout] = note: clamp returns NaN if the input is NaN [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_clamp [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 01s [INFO] running `Command { std: "docker" "inspect" "dc125c4dabe98fe2bdc6b6265c42168a4d1cec28fc152da83481e39ff0f213b6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "dc125c4dabe98fe2bdc6b6265c42168a4d1cec28fc152da83481e39ff0f213b6", kill_on_drop: false }` [INFO] [stdout] dc125c4dabe98fe2bdc6b6265c42168a4d1cec28fc152da83481e39ff0f213b6