[INFO] fetching crate octo-cli 0.1.0... [INFO] linting octo-cli-0.1.0 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate octo-cli 0.1.0 into /workspace/builds/worker-1-tc1/source [INFO] started tweaking crates.io crate octo-cli 0.1.0 [INFO] finished tweaking crates.io crate octo-cli 0.1.0 [INFO] tweaked toml for crates.io crate octo-cli 0.1.0 written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate octo-cli 0.1.0 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 crates.io crate octo-cli 0.1.0 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded octo-tools v0.1.0 [INFO] [stderr] Downloaded octo-core v0.1.0 [INFO] [stderr] Downloaded octo-agent v0.1.0 [INFO] [stderr] Downloaded octo-providers v0.1.0 [INFO] [stderr] Downloaded octo-storage v0.1.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 2f5cf2001f535e3be235c983f3395a84bd67766fa18fa57fa5101f95e8188dbf [INFO] running `Command { std: "docker" "start" "-a" "2f5cf2001f535e3be235c983f3395a84bd67766fa18fa57fa5101f95e8188dbf", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "2f5cf2001f535e3be235c983f3395a84bd67766fa18fa57fa5101f95e8188dbf", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2f5cf2001f535e3be235c983f3395a84bd67766fa18fa57fa5101f95e8188dbf", kill_on_drop: false }` [INFO] [stdout] 2f5cf2001f535e3be235c983f3395a84bd67766fa18fa57fa5101f95e8188dbf [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] c2e019319853bf27603444f55813f68c1953a0d4959d3b691c65ab021705376c [INFO] running `Command { std: "docker" "start" "-a" "c2e019319853bf27603444f55813f68c1953a0d4959d3b691c65ab021705376c", kill_on_drop: false }` [INFO] [stderr] Compiling syn v2.0.115 [INFO] [stderr] Compiling libc v0.2.181 [INFO] [stderr] Compiling cc v1.2.55 [INFO] [stderr] Compiling stable_deref_trait v1.2.1 [INFO] [stderr] Compiling litemap v0.8.1 [INFO] [stderr] Compiling writeable v0.6.2 [INFO] [stderr] Compiling futures-core v0.3.31 [INFO] [stderr] Compiling typenum v1.19.0 [INFO] [stderr] Compiling icu_normalizer_data v2.1.1 [INFO] [stderr] Checking serde_json v1.0.149 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling icu_properties_data v2.1.2 [INFO] [stderr] Compiling futures-sink v0.3.31 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling percent-encoding v2.3.2 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling pin-utils v0.1.0 [INFO] [stderr] Compiling allocator-api2 v0.2.21 [INFO] [stderr] Compiling slab v0.4.12 [INFO] [stderr] Compiling foldhash v0.1.5 [INFO] [stderr] Compiling futures-task v0.3.31 [INFO] [stderr] Compiling futures-io v0.3.31 [INFO] [stderr] Compiling form_urlencoded v1.2.2 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling crc-catalog v2.4.0 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling iana-time-zone v0.1.65 [INFO] [stderr] Compiling parking v2.2.1 [INFO] [stderr] Compiling spin v0.9.8 [INFO] [stderr] Compiling crc v3.4.0 [INFO] [stderr] Compiling ryu v1.0.23 [INFO] [stderr] Compiling base64 v0.22.1 [INFO] [stderr] Compiling hashbrown v0.15.5 [INFO] [stderr] Compiling flume v0.11.1 [INFO] [stderr] Checking concurrent-queue v2.5.0 [INFO] [stderr] Compiling futures-channel v0.3.31 [INFO] [stderr] Compiling crossbeam-queue v0.3.12 [INFO] [stderr] Checking http-body-util v0.1.3 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Compiling event-listener v5.4.1 [INFO] [stderr] Checking regex-automata v0.4.14 [INFO] [stderr] Checking hashlink v0.10.0 [INFO] [stderr] Compiling hex v0.4.3 [INFO] [stderr] Compiling dotenvy v0.15.7 [INFO] [stderr] Compiling crypto-common v0.1.7 [INFO] [stderr] Compiling block-buffer v0.10.4 [INFO] [stderr] Compiling chrono v0.4.43 [INFO] [stderr] Compiling atoi v2.0.0 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Checking rustix v0.38.44 [INFO] [stderr] Checking compact_str v0.8.1 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling socket2 v0.6.2 [INFO] [stderr] Compiling mio v1.1.1 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Checking eventsource-stream v0.2.3 [INFO] [stderr] Checking errno v0.3.14 [INFO] [stderr] Checking signal-hook-registry v1.4.8 [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Checking dirs-sys v0.5.0 [INFO] [stderr] Checking getrandom v0.3.4 [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Compiling native-tls v0.2.14 [INFO] [stderr] Checking uuid v1.20.0 [INFO] [stderr] Checking dirs v6.0.0 [INFO] [stderr] Checking signal-hook v0.3.18 [INFO] [stderr] Checking futures-intrusive v0.5.0 [INFO] [stderr] Checking clap_builder v4.5.58 [INFO] [stderr] Checking signal-hook-mio v0.2.5 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Checking matchers v0.2.0 [INFO] [stderr] Checking regex v1.12.3 [INFO] [stderr] Compiling futures-executor v0.3.31 [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 displaydoc v0.2.5 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling async-stream-impl v0.3.6 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Checking async-stream v0.3.6 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking thiserror v2.0.18 [INFO] [stderr] Checking tracing-subscriber v0.3.22 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking yoke v0.8.1 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Checking tinystr v0.8.2 [INFO] [stderr] Checking potential_utf v0.1.4 [INFO] [stderr] Checking icu_collections v2.1.1 [INFO] [stderr] Checking icu_locale_core v2.1.1 [INFO] [stderr] Checking clap v4.5.58 [INFO] [stderr] Checking serde v1.0.228 [INFO] [stderr] Checking icu_provider v2.1.1 [INFO] [stderr] Checking icu_properties v2.1.2 [INFO] [stderr] Checking icu_normalizer v2.1.1 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking tokio-native-tls v0.3.1 [INFO] [stderr] Checking itertools v0.13.0 [INFO] [stderr] Checking tokio-util v0.7.18 [INFO] [stderr] Checking tower v0.5.3 [INFO] [stderr] Checking idna_adapter v1.2.1 [INFO] [stderr] Checking idna v1.1.0 [INFO] [stderr] Checking tower-http v0.6.8 [INFO] [stderr] Checking h2 v0.4.13 [INFO] [stderr] Checking octo-core v0.1.0 [INFO] [stderr] Checking url v2.5.8 [INFO] [stderr] Checking unicode-truncate v1.1.0 [INFO] [stderr] Checking ratatui v0.29.0 [INFO] [stderr] Checking sqlx-core v0.8.6 [INFO] [stderr] Checking octo-agent v0.1.0 [INFO] [stderr] Checking tui-textarea v0.7.0 [INFO] [stderr] Checking sqlx-sqlite v0.8.6 [INFO] [stderr] Checking hyper v1.8.1 [INFO] [stderr] Checking hyper-util v0.1.20 [INFO] [stderr] Compiling sqlx-macros-core v0.8.6 [INFO] [stderr] Checking hyper-tls v0.6.0 [INFO] [stderr] Checking reqwest v0.12.28 [INFO] [stderr] Compiling sqlx-macros v0.8.6 [INFO] [stderr] Checking reqwest-eventsource v0.6.0 [INFO] [stderr] Checking octo-tools v0.1.0 [INFO] [stderr] Checking octo-providers v0.1.0 [INFO] [stderr] Checking sqlx v0.8.6 [INFO] [stderr] Checking octo-storage v0.1.0 [INFO] [stderr] Checking octo-cli v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output.rs:32:17 [INFO] [stdout] | [INFO] [stdout] 32 | / if !quiet { [INFO] [stdout] 33 | | eprint!("\x1b[90mThinking...\x1b[0m"); [INFO] [stdout] 34 | | io::stderr().flush().ok(); [INFO] [stdout] 35 | | } [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] 31 ~ AgentEvent::Started { .. } [INFO] [stdout] 32 ~ if !quiet => { [INFO] [stdout] 33 | eprint!("\x1b[90mThinking...\x1b[0m"); [INFO] [stdout] 34 | io::stderr().flush().ok(); [INFO] [stdout] 35 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output.rs:48:17 [INFO] [stdout] | [INFO] [stdout] 48 | / if !quiet { [INFO] [stdout] 49 | | eprint!("\x1b[3;90m{text}\x1b[0m"); [INFO] [stdout] 50 | | io::stderr().flush().ok(); [INFO] [stdout] 51 | | } [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] 47 ~ AgentEvent::ThinkingDelta { text } [INFO] [stdout] 48 ~ if !quiet => { [INFO] [stdout] 49 | eprint!("\x1b[3;90m{text}\x1b[0m"); [INFO] [stdout] 50 | io::stderr().flush().ok(); [INFO] [stdout] 51 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output.rs:76:17 [INFO] [stdout] | [INFO] [stdout] 76 | / if !quiet { [INFO] [stdout] 77 | | let input = usage.input_tokens; [INFO] [stdout] 78 | | let output = usage.output_tokens; [INFO] [stdout] 79 | | let total = input + output; [INFO] [stdout] ... | [INFO] [stdout] 103 | | } [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] 75 ~ AgentEvent::Complete { usage, .. } [INFO] [stdout] 76 ~ if !quiet => { [INFO] [stdout] 77 | let input = usage.input_tokens; [INFO] [stdout] ... [INFO] [stdout] 102 | } [INFO] [stdout] 103 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output.rs:32:17 [INFO] [stdout] | [INFO] [stdout] 32 | / if !quiet { [INFO] [stdout] 33 | | eprint!("\x1b[90mThinking...\x1b[0m"); [INFO] [stdout] 34 | | io::stderr().flush().ok(); [INFO] [stdout] 35 | | } [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] 31 ~ AgentEvent::Started { .. } [INFO] [stdout] 32 ~ if !quiet => { [INFO] [stdout] 33 | eprint!("\x1b[90mThinking...\x1b[0m"); [INFO] [stdout] 34 | io::stderr().flush().ok(); [INFO] [stdout] 35 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output.rs:48:17 [INFO] [stdout] | [INFO] [stdout] 48 | / if !quiet { [INFO] [stdout] 49 | | eprint!("\x1b[3;90m{text}\x1b[0m"); [INFO] [stdout] 50 | | io::stderr().flush().ok(); [INFO] [stdout] 51 | | } [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] 47 ~ AgentEvent::ThinkingDelta { text } [INFO] [stdout] 48 ~ if !quiet => { [INFO] [stdout] 49 | eprint!("\x1b[3;90m{text}\x1b[0m"); [INFO] [stdout] 50 | io::stderr().flush().ok(); [INFO] [stdout] 51 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output.rs:76:17 [INFO] [stdout] | [INFO] [stdout] 76 | / if !quiet { [INFO] [stdout] 77 | | let input = usage.input_tokens; [INFO] [stdout] 78 | | let output = usage.output_tokens; [INFO] [stdout] 79 | | let total = input + output; [INFO] [stdout] ... | [INFO] [stdout] 103 | | } [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] 75 ~ AgentEvent::Complete { usage, .. } [INFO] [stdout] 76 ~ if !quiet => { [INFO] [stdout] 77 | let input = usage.input_tokens; [INFO] [stdout] ... [INFO] [stdout] 102 | } [INFO] [stdout] 103 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/setup.rs:74:21 [INFO] [stdout] | [INFO] [stdout] 74 | / if state.selected_field == 1 || !state.api_key.is_empty() { [INFO] [stdout] 75 | | // Validate [INFO] [stdout] 76 | | let key = state.api_key.trim().to_string(); [INFO] [stdout] 77 | | if key.is_empty() { [INFO] [stdout] ... | [INFO] [stdout] 87 | | } [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] 73 ~ (KeyCode::Enter, _) [INFO] [stdout] 74 ~ if (state.selected_field == 1 || !state.api_key.is_empty()) => { [INFO] [stdout] 75 | // Validate [INFO] [stdout] ... [INFO] [stdout] 86 | } [INFO] [stdout] 87 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/setup.rs:96:21 [INFO] [stdout] | [INFO] [stdout] 96 | / if state.cursor > 0 { [INFO] [stdout] 97 | | let prev = state.api_key[..state.cursor] [INFO] [stdout] 98 | | .chars() [INFO] [stdout] 99 | | .last() [INFO] [stdout] ... | [INFO] [stdout] 104 | | state.error_message = None; [INFO] [stdout] 105 | | } [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] 95 ~ (KeyCode::Backspace, _) if state.selected_field == 0 [INFO] [stdout] 96 ~ && state.cursor > 0 => { [INFO] [stdout] 97 | let prev = state.api_key[..state.cursor] [INFO] [stdout] ... [INFO] [stdout] 104 | state.error_message = None; [INFO] [stdout] 105 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/setup.rs:108:21 [INFO] [stdout] | [INFO] [stdout] 108 | / if state.cursor > 0 { [INFO] [stdout] 109 | | let prev = state.api_key[..state.cursor] [INFO] [stdout] 110 | | .chars() [INFO] [stdout] 111 | | .last() [INFO] [stdout] ... | [INFO] [stdout] 114 | | state.cursor -= prev; [INFO] [stdout] 115 | | } [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] 107 ~ (KeyCode::Left, _) if state.selected_field == 0 [INFO] [stdout] 108 ~ && state.cursor > 0 => { [INFO] [stdout] 109 | let prev = state.api_key[..state.cursor] [INFO] [stdout] ... [INFO] [stdout] 114 | state.cursor -= prev; [INFO] [stdout] 115 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/setup.rs:118:21 [INFO] [stdout] | [INFO] [stdout] 118 | / if state.cursor < state.api_key.len() { [INFO] [stdout] 119 | | let next = state.api_key[state.cursor..] [INFO] [stdout] 120 | | .chars() [INFO] [stdout] 121 | | .next() [INFO] [stdout] ... | [INFO] [stdout] 124 | | state.cursor += next; [INFO] [stdout] 125 | | } [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] 117 ~ (KeyCode::Right, _) if state.selected_field == 0 [INFO] [stdout] 118 ~ && state.cursor < state.api_key.len() => { [INFO] [stdout] 119 | let next = state.api_key[state.cursor..] [INFO] [stdout] ... [INFO] [stdout] 124 | state.cursor += next; [INFO] [stdout] 125 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/setup.rs:74:21 [INFO] [stdout] | [INFO] [stdout] 74 | / if state.selected_field == 1 || !state.api_key.is_empty() { [INFO] [stdout] 75 | | // Validate [INFO] [stdout] 76 | | let key = state.api_key.trim().to_string(); [INFO] [stdout] 77 | | if key.is_empty() { [INFO] [stdout] ... | [INFO] [stdout] 87 | | } [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] 73 ~ (KeyCode::Enter, _) [INFO] [stdout] 74 ~ if (state.selected_field == 1 || !state.api_key.is_empty()) => { [INFO] [stdout] 75 | // Validate [INFO] [stdout] ... [INFO] [stdout] 86 | } [INFO] [stdout] 87 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/setup.rs:96:21 [INFO] [stdout] | [INFO] [stdout] 96 | / if state.cursor > 0 { [INFO] [stdout] 97 | | let prev = state.api_key[..state.cursor] [INFO] [stdout] 98 | | .chars() [INFO] [stdout] 99 | | .last() [INFO] [stdout] ... | [INFO] [stdout] 104 | | state.error_message = None; [INFO] [stdout] 105 | | } [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] 95 ~ (KeyCode::Backspace, _) if state.selected_field == 0 [INFO] [stdout] 96 ~ && state.cursor > 0 => { [INFO] [stdout] 97 | let prev = state.api_key[..state.cursor] [INFO] [stdout] ... [INFO] [stdout] 104 | state.error_message = None; [INFO] [stdout] 105 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/setup.rs:108:21 [INFO] [stdout] | [INFO] [stdout] 108 | / if state.cursor > 0 { [INFO] [stdout] 109 | | let prev = state.api_key[..state.cursor] [INFO] [stdout] 110 | | .chars() [INFO] [stdout] 111 | | .last() [INFO] [stdout] ... | [INFO] [stdout] 114 | | state.cursor -= prev; [INFO] [stdout] 115 | | } [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] 107 ~ (KeyCode::Left, _) if state.selected_field == 0 [INFO] [stdout] 108 ~ && state.cursor > 0 => { [INFO] [stdout] 109 | let prev = state.api_key[..state.cursor] [INFO] [stdout] ... [INFO] [stdout] 114 | state.cursor -= prev; [INFO] [stdout] 115 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/setup.rs:118:21 [INFO] [stdout] | [INFO] [stdout] 118 | / if state.cursor < state.api_key.len() { [INFO] [stdout] 119 | | let next = state.api_key[state.cursor..] [INFO] [stdout] 120 | | .chars() [INFO] [stdout] 121 | | .next() [INFO] [stdout] ... | [INFO] [stdout] 124 | | state.cursor += next; [INFO] [stdout] 125 | | } [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] 117 ~ (KeyCode::Right, _) if state.selected_field == 0 [INFO] [stdout] 118 ~ && state.cursor < state.api_key.len() => { [INFO] [stdout] 119 | let next = state.api_key[state.cursor..] [INFO] [stdout] ... [INFO] [stdout] 124 | state.cursor += next; [INFO] [stdout] 125 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/tui/markdown.rs:64:39 [INFO] [stdout] | [INFO] [stdout] 64 | format!("{indent}{}", &trimmed[4..]), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/tui/markdown.rs:62:9 [INFO] [stdout] | [INFO] [stdout] 62 | 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] 62 ~ if let Some() = trimmed.strip_prefix("### ") { [INFO] [stdout] 63 | lines.push(Line::from(Span::styled( [INFO] [stdout] 64 ~ format!("{indent}{}", ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/tui/markdown.rs:73:39 [INFO] [stdout] | [INFO] [stdout] 73 | format!("{indent}{}", &trimmed[3..]), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/tui/markdown.rs:71:9 [INFO] [stdout] | [INFO] [stdout] 71 | 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] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 71 ~ if let Some() = trimmed.strip_prefix("## ") { [INFO] [stdout] 72 | lines.push(Line::from(Span::styled( [INFO] [stdout] 73 ~ format!("{indent}{}", ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/tui/markdown.rs:82:39 [INFO] [stdout] | [INFO] [stdout] 82 | format!("{indent}{}", &trimmed[2..]), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/tui/markdown.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | 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] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 80 ~ if let Some() = trimmed.strip_prefix("# ") { [INFO] [stdout] 81 | lines.push(Line::from(Span::styled( [INFO] [stdout] 82 ~ format!("{indent}{}", ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/tui/markdown.rs:64:39 [INFO] [stdout] | [INFO] [stdout] 64 | format!("{indent}{}", &trimmed[4..]), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/tui/markdown.rs:62:9 [INFO] [stdout] | [INFO] [stdout] 62 | 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] 62 ~ if let Some() = trimmed.strip_prefix("### ") { [INFO] [stdout] 63 | lines.push(Line::from(Span::styled( [INFO] [stdout] 64 ~ format!("{indent}{}", ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/tui/markdown.rs:73:39 [INFO] [stdout] | [INFO] [stdout] 73 | format!("{indent}{}", &trimmed[3..]), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/tui/markdown.rs:71:9 [INFO] [stdout] | [INFO] [stdout] 71 | 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] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 71 ~ if let Some() = trimmed.strip_prefix("## ") { [INFO] [stdout] 72 | lines.push(Line::from(Span::styled( [INFO] [stdout] 73 ~ format!("{indent}{}", ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: stripping a prefix manually [INFO] [stdout] --> src/tui/markdown.rs:82:39 [INFO] [stdout] | [INFO] [stdout] 82 | format!("{indent}{}", &trimmed[2..]), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: the prefix was tested here [INFO] [stdout] --> src/tui/markdown.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | 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] help: try using the `strip_prefix` method [INFO] [stdout] | [INFO] [stdout] 80 ~ if let Some() = trimmed.strip_prefix("# ") { [INFO] [stdout] 81 | lines.push(Line::from(Span::styled( [INFO] [stdout] 82 ~ format!("{indent}{}", ), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/mod.rs:424:13 [INFO] [stdout] | [INFO] [stdout] 424 | / if !app.input.trim().is_empty() { [INFO] [stdout] 425 | | let input = app.input.trim().to_string(); [INFO] [stdout] 426 | | app.input.clear(); [INFO] [stdout] 427 | | app.input_cursor = 0; [INFO] [stdout] ... | [INFO] [stdout] 433 | | } [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] 423 ~ (KeyCode::Enter, KeyModifiers::NONE) if !app.is_streaming [INFO] [stdout] 424 ~ && !app.input.trim().is_empty() => { [INFO] [stdout] 425 | let input = app.input.trim().to_string(); [INFO] [stdout] ... [INFO] [stdout] 432 | } [INFO] [stdout] 433 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tui/mod.rs:424:13 [INFO] [stdout] | [INFO] [stdout] 424 | / if !app.input.trim().is_empty() { [INFO] [stdout] 425 | | let input = app.input.trim().to_string(); [INFO] [stdout] 426 | | app.input.clear(); [INFO] [stdout] 427 | | app.input_cursor = 0; [INFO] [stdout] ... | [INFO] [stdout] 433 | | } [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] 423 ~ (KeyCode::Enter, KeyModifiers::NONE) if !app.is_streaming [INFO] [stdout] 424 ~ && !app.input.trim().is_empty() => { [INFO] [stdout] 425 | let input = app.input.trim().to_string(); [INFO] [stdout] ... [INFO] [stdout] 432 | } [INFO] [stdout] 433 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/main.rs:114:5 [INFO] [stdout] | [INFO] [stdout] 114 | / if cli.prompt.is_some() || cli.repl || cli.tui { [INFO] [stdout] 115 | | if !config.has_any_api_key() { [INFO] [stdout] 116 | | if cli.prompt.is_some() { [INFO] [stdout] 117 | | anyhow::bail!( [INFO] [stdout] ... | [INFO] [stdout] 135 | | } [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] 114 ~ if (cli.prompt.is_some() || cli.repl || cli.tui) { [INFO] [stdout] 115 ~ && !config.has_any_api_key() { [INFO] [stdout] 116 | if cli.prompt.is_some() { [INFO] [stdout] ... [INFO] [stdout] 133 | } [INFO] [stdout] 134 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/main.rs:114:5 [INFO] [stdout] | [INFO] [stdout] 114 | / if cli.prompt.is_some() || cli.repl || cli.tui { [INFO] [stdout] 115 | | if !config.has_any_api_key() { [INFO] [stdout] 116 | | if cli.prompt.is_some() { [INFO] [stdout] 117 | | anyhow::bail!( [INFO] [stdout] ... | [INFO] [stdout] 135 | | } [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] 114 ~ if (cli.prompt.is_some() || cli.repl || cli.tui) { [INFO] [stdout] 115 ~ && !config.has_any_api_key() { [INFO] [stdout] 116 | if cli.prompt.is_some() { [INFO] [stdout] ... [INFO] [stdout] 133 | } [INFO] [stdout] 134 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 05s [INFO] running `Command { std: "docker" "inspect" "c2e019319853bf27603444f55813f68c1953a0d4959d3b691c65ab021705376c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c2e019319853bf27603444f55813f68c1953a0d4959d3b691c65ab021705376c", kill_on_drop: false }` [INFO] [stdout] c2e019319853bf27603444f55813f68c1953a0d4959d3b691c65ab021705376c