[INFO] cloning repository https://github.com/clickety-clacks/engram [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/clickety-clacks/engram" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclickety-clacks%2Fengram", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclickety-clacks%2Fengram'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] af90ae9150aee918b839c3e74c7102ccbb3c3669 [INFO] linting clickety-clacks/engram against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclickety-clacks%2Fengram" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/clickety-clacks/engram [INFO] finished tweaking git repo https://github.com/clickety-clacks/engram [INFO] tweaked toml for git repo https://github.com/clickety-clacks/engram written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/clickety-clacks/engram 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/clickety-clacks/engram 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] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded plain v0.2.3 [INFO] [stderr] Downloaded wasm-bindgen-macro v0.2.111 [INFO] [stderr] Downloaded wasm-bindgen-shared v0.2.111 [INFO] [stderr] Downloaded ctrlc v3.5.2 [INFO] [stderr] Downloaded redox_syscall v0.7.3 [INFO] [stderr] Downloaded filetime v0.2.27 [INFO] [stderr] Downloaded wasm-bindgen v0.2.111 [INFO] [stderr] Downloaded wasm-bindgen-macro-support v0.2.111 [INFO] [stderr] Downloaded js-sys v0.3.88 [INFO] [stderr] Downloaded nix v0.31.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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] e0720263f6b14f1fb3398a37be2d21b68485fc13b4f61604735b100074135700 [INFO] running `Command { std: "docker" "start" "-a" "e0720263f6b14f1fb3398a37be2d21b68485fc13b4f61604735b100074135700", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "e0720263f6b14f1fb3398a37be2d21b68485fc13b4f61604735b100074135700", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e0720263f6b14f1fb3398a37be2d21b68485fc13b4f61604735b100074135700", kill_on_drop: false }` [INFO] [stdout] e0720263f6b14f1fb3398a37be2d21b68485fc13b4f61604735b100074135700 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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] b15a64d76c14e27f576137c55928cfdfd686ebd6f134c07f11016b9a1f84ee01 [INFO] running `Command { std: "docker" "start" "-a" "b15a64d76c14e27f576137c55928cfdfd686ebd6f134c07f11016b9a1f84ee01", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.182 [INFO] [stderr] Compiling find-msvc-tools v0.1.9 [INFO] [stderr] Compiling proc-macro2 v1.0.106 [INFO] [stderr] Compiling unicode-ident v1.0.24 [INFO] [stderr] Compiling quote v1.0.44 [INFO] [stderr] Compiling zerocopy v0.8.39 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Checking bitflags v2.11.0 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling cfg_aliases v0.2.1 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Checking generic-array v0.14.7 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling zstd-safe v7.2.4 [INFO] [stderr] Checking anstyle-query v1.1.5 [INFO] [stderr] Compiling zmij v1.0.21 [INFO] [stderr] Compiling nix v0.31.2 [INFO] [stderr] Checking anstream v0.6.21 [INFO] [stderr] Checking hashbrown v0.16.1 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Checking clap_lex v1.0.0 [INFO] [stderr] Checking log v0.4.29 [INFO] [stderr] Checking itoa v1.0.17 [INFO] [stderr] Compiling getrandom v0.4.1 [INFO] [stderr] Checking iana-time-zone v0.1.65 [INFO] [stderr] Checking ryu v1.0.23 [INFO] [stderr] Checking memchr v2.8.0 [INFO] [stderr] Checking unsafe-libyaml v0.2.11 [INFO] [stderr] Checking crypto-common v0.1.7 [INFO] [stderr] Checking block-buffer v0.10.4 [INFO] [stderr] Compiling rustix v1.1.3 [INFO] [stderr] Checking clap_builder v4.5.60 [INFO] [stderr] Checking glob v0.3.3 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Checking indexmap v2.13.0 [INFO] [stderr] Checking crossbeam-channel v0.5.15 [INFO] [stderr] Checking sha2 v0.10.9 [INFO] [stderr] Checking chrono v0.4.43 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling jobserver v0.1.34 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Checking inotify-sys v0.1.5 [INFO] [stderr] Checking filetime v0.2.27 [INFO] [stderr] Checking mio v0.8.11 [INFO] [stderr] Checking inotify v0.9.6 [INFO] [stderr] Checking notify v6.1.1 [INFO] [stderr] Checking ctrlc v3.5.2 [INFO] [stderr] Compiling zstd-sys v2.0.16+zstd.1.5.7 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Checking tempfile v3.25.0 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling clap_derive v4.5.55 [INFO] [stderr] Checking hashbrown v0.14.5 [INFO] [stderr] Checking hashlink v0.9.1 [INFO] [stderr] Checking zstd v0.13.3 [INFO] [stderr] Checking clap v4.5.60 [INFO] [stderr] Checking serde_yaml v0.9.34+deprecated [INFO] [stderr] Checking rusqlite v0.32.1 [INFO] [stderr] Checking engram v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapter.rs:744:17 [INFO] [stdout] | [INFO] [stdout] 744 | / if matches!(nested, Value::String(_)) [INFO] [stdout] 745 | | && (lower.contains("folder") [INFO] [stdout] 746 | | || lower.contains("path") [INFO] [stdout] 747 | | || lower.contains("workspace") [INFO] [stdout] ... | [INFO] [stdout] 755 | | } [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] 748 ~ || lower.contains("uri")) [INFO] [stdout] 749 ~ && let Some(text) = nested.as_str() [INFO] [stdout] 750 | && let Some(path) = normalize_workspace_manifest_path(text) [INFO] [stdout] 751 | { [INFO] [stdout] 752 | out.push(path); [INFO] [stdout] 753 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1099:27 [INFO] [stdout] | [INFO] [stdout] 1099 | } else if !obj [INFO] [stdout] | ___________________________^ [INFO] [stdout] 1100 | | .get(field) [INFO] [stdout] 1101 | | .and_then(Value::as_str) [INFO] [stdout] 1102 | | .and_then(coverage_grade_from_str) [INFO] [stdout] 1103 | | .is_some() [INFO] [stdout] | |______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1099 ~ } else if obj [INFO] [stdout] 1100 + .get(field) [INFO] [stdout] 1101 + .and_then(Value::as_str) [INFO] [stdout] 1102 + .and_then(coverage_grade_from_str).is_none() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1120:16 [INFO] [stdout] | [INFO] [stdout] 1120 | if !obj.get("from_range").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `obj.get("from_range").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1132:16 [INFO] [stdout] | [INFO] [stdout] 1132 | if !obj.get("to_range").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `obj.get("to_range").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1146:16 [INFO] [stdout] | [INFO] [stdout] 1146 | if !obj.get("args").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `obj.get("args").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1168:16 [INFO] [stdout] | [INFO] [stdout] 1168 | if !obj.get("range").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `obj.get("range").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tape/adapters/cursor.rs:46:17 [INFO] [stdout] | [INFO] [stdout] 46 | / if row.get("subtype").and_then(Value::as_str) == Some("init") { [INFO] [stdout] 47 | | out.push(json!({ [INFO] [stdout] 48 | | "t": timestamp, [INFO] [stdout] 49 | | "k": "meta", [INFO] [stdout] ... | [INFO] [stdout] 56 | | emitted_meta = true; [INFO] [stdout] 57 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 45 ~ "system" [INFO] [stdout] 46 ~ if row.get("subtype").and_then(Value::as_str) == Some("init") => { [INFO] [stdout] 47 | out.push(json!({ [INFO] [stdout] ... [INFO] [stdout] 56 | emitted_meta = true; [INFO] [stdout] 57 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapters/gemini.rs:250:5 [INFO] [stdout] | [INFO] [stdout] 250 | / if stdout.is_empty() && stderr.is_empty() { [INFO] [stdout] 251 | | if let Some(display) = tool_call.get("resultDisplay").and_then(Value::as_str) { [INFO] [stdout] 252 | | stdout = display.to_string(); [INFO] [stdout] 253 | | } [INFO] [stdout] 254 | | } [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] 250 ~ if stdout.is_empty() && stderr.is_empty() [INFO] [stdout] 251 ~ && let Some(display) = tool_call.get("resultDisplay").and_then(Value::as_str) { [INFO] [stdout] 252 | stdout = display.to_string(); [INFO] [stdout] 253 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `let...else` may be rewritten with the `?` operator [INFO] [stdout] --> src/tape/adapters/openclaw.rs:405:5 [INFO] [stdout] | [INFO] [stdout] 405 | / let Some(obj) = args.as_object() else { [INFO] [stdout] 406 | | return None; [INFO] [stdout] 407 | | }; [INFO] [stdout] | |______^ help: replace it with: `let obj = args.as_object()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `let...else` may be rewritten with the `?` operator [INFO] [stdout] --> src/tape/adapters/openclaw.rs:416:5 [INFO] [stdout] | [INFO] [stdout] 416 | / let Some(obj) = args.as_object() else { [INFO] [stdout] 417 | | return None; [INFO] [stdout] 418 | | }; [INFO] [stdout] | |______^ help: replace it with: `let obj = args.as_object()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapters/opencode.rs:104:25 [INFO] [stdout] | [INFO] [stdout] 104 | / if tool.eq_ignore_ascii_case("read") { [INFO] [stdout] 105 | | if let Some(file) = tool_input [INFO] [stdout] 106 | | .get("filePath") [INFO] [stdout] 107 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 130 | | } [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] 104 ~ if tool.eq_ignore_ascii_case("read") [INFO] [stdout] 105 ~ && let Some(file) = tool_input [INFO] [stdout] 106 | .get("filePath") [INFO] [stdout] ... [INFO] [stdout] 128 | })); [INFO] [stdout] 129 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapters/opencode.rs:132:25 [INFO] [stdout] | [INFO] [stdout] 132 | / if tool.eq_ignore_ascii_case("edit") { [INFO] [stdout] 133 | | if let Some(file) = tool_input [INFO] [stdout] 134 | | .get("filePath") [INFO] [stdout] 135 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 147 | | } [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] 132 ~ if tool.eq_ignore_ascii_case("edit") [INFO] [stdout] 133 ~ && let Some(file) = tool_input [INFO] [stdout] 134 | .get("filePath") [INFO] [stdout] ... [INFO] [stdout] 145 | })); [INFO] [stdout] 146 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapters/opencode.rs:149:25 [INFO] [stdout] | [INFO] [stdout] 149 | / if tool.eq_ignore_ascii_case("write") { [INFO] [stdout] 150 | | if let Some(file) = tool_input [INFO] [stdout] 151 | | .get("filePath") [INFO] [stdout] 152 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 163 | | } [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] 149 ~ if tool.eq_ignore_ascii_case("write") [INFO] [stdout] 150 ~ && let Some(file) = tool_input [INFO] [stdout] 151 | .get("filePath") [INFO] [stdout] ... [INFO] [stdout] 161 | })); [INFO] [stdout] 162 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapter.rs:744:17 [INFO] [stdout] | [INFO] [stdout] 744 | / if matches!(nested, Value::String(_)) [INFO] [stdout] 745 | | && (lower.contains("folder") [INFO] [stdout] 746 | | || lower.contains("path") [INFO] [stdout] 747 | | || lower.contains("workspace") [INFO] [stdout] ... | [INFO] [stdout] 755 | | } [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] 748 ~ || lower.contains("uri")) [INFO] [stdout] 749 ~ && let Some(text) = nested.as_str() [INFO] [stdout] 750 | && let Some(path) = normalize_workspace_manifest_path(text) [INFO] [stdout] 751 | { [INFO] [stdout] 752 | out.push(path); [INFO] [stdout] 753 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1099:27 [INFO] [stdout] | [INFO] [stdout] 1099 | } else if !obj [INFO] [stdout] | ___________________________^ [INFO] [stdout] 1100 | | .get(field) [INFO] [stdout] 1101 | | .and_then(Value::as_str) [INFO] [stdout] 1102 | | .and_then(coverage_grade_from_str) [INFO] [stdout] 1103 | | .is_some() [INFO] [stdout] | |______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 1099 ~ } else if obj [INFO] [stdout] 1100 + .get(field) [INFO] [stdout] 1101 + .and_then(Value::as_str) [INFO] [stdout] 1102 + .and_then(coverage_grade_from_str).is_none() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1120:16 [INFO] [stdout] | [INFO] [stdout] 1120 | if !obj.get("from_range").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `obj.get("from_range").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1132:16 [INFO] [stdout] | [INFO] [stdout] 1132 | if !obj.get("to_range").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `obj.get("to_range").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1146:16 [INFO] [stdout] | [INFO] [stdout] 1146 | if !obj.get("args").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `obj.get("args").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/tape/adapter.rs:1168:16 [INFO] [stdout] | [INFO] [stdout] 1168 | if !obj.get("range").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `obj.get("range").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/tape/adapters/cursor.rs:46:17 [INFO] [stdout] | [INFO] [stdout] 46 | / if row.get("subtype").and_then(Value::as_str) == Some("init") { [INFO] [stdout] 47 | | out.push(json!({ [INFO] [stdout] 48 | | "t": timestamp, [INFO] [stdout] 49 | | "k": "meta", [INFO] [stdout] ... | [INFO] [stdout] 56 | | emitted_meta = true; [INFO] [stdout] 57 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 45 ~ "system" [INFO] [stdout] 46 ~ if row.get("subtype").and_then(Value::as_str) == Some("init") => { [INFO] [stdout] 47 | out.push(json!({ [INFO] [stdout] ... [INFO] [stdout] 56 | emitted_meta = true; [INFO] [stdout] 57 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapters/gemini.rs:250:5 [INFO] [stdout] | [INFO] [stdout] 250 | / if stdout.is_empty() && stderr.is_empty() { [INFO] [stdout] 251 | | if let Some(display) = tool_call.get("resultDisplay").and_then(Value::as_str) { [INFO] [stdout] 252 | | stdout = display.to_string(); [INFO] [stdout] 253 | | } [INFO] [stdout] 254 | | } [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] 250 ~ if stdout.is_empty() && stderr.is_empty() [INFO] [stdout] 251 ~ && let Some(display) = tool_call.get("resultDisplay").and_then(Value::as_str) { [INFO] [stdout] 252 | stdout = display.to_string(); [INFO] [stdout] 253 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `let...else` may be rewritten with the `?` operator [INFO] [stdout] --> src/tape/adapters/openclaw.rs:405:5 [INFO] [stdout] | [INFO] [stdout] 405 | / let Some(obj) = args.as_object() else { [INFO] [stdout] 406 | | return None; [INFO] [stdout] 407 | | }; [INFO] [stdout] | |______^ help: replace it with: `let obj = args.as_object()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `let...else` may be rewritten with the `?` operator [INFO] [stdout] --> src/tape/adapters/openclaw.rs:416:5 [INFO] [stdout] | [INFO] [stdout] 416 | / let Some(obj) = args.as_object() else { [INFO] [stdout] 417 | | return None; [INFO] [stdout] 418 | | }; [INFO] [stdout] | |______^ help: replace it with: `let obj = args.as_object()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapters/opencode.rs:104:25 [INFO] [stdout] | [INFO] [stdout] 104 | / if tool.eq_ignore_ascii_case("read") { [INFO] [stdout] 105 | | if let Some(file) = tool_input [INFO] [stdout] 106 | | .get("filePath") [INFO] [stdout] 107 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 130 | | } [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] 104 ~ if tool.eq_ignore_ascii_case("read") [INFO] [stdout] 105 ~ && let Some(file) = tool_input [INFO] [stdout] 106 | .get("filePath") [INFO] [stdout] ... [INFO] [stdout] 128 | })); [INFO] [stdout] 129 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapters/opencode.rs:132:25 [INFO] [stdout] | [INFO] [stdout] 132 | / if tool.eq_ignore_ascii_case("edit") { [INFO] [stdout] 133 | | if let Some(file) = tool_input [INFO] [stdout] 134 | | .get("filePath") [INFO] [stdout] 135 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 147 | | } [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] 132 ~ if tool.eq_ignore_ascii_case("edit") [INFO] [stdout] 133 ~ && let Some(file) = tool_input [INFO] [stdout] 134 | .get("filePath") [INFO] [stdout] ... [INFO] [stdout] 145 | })); [INFO] [stdout] 146 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/tape/adapters/opencode.rs:149:25 [INFO] [stdout] | [INFO] [stdout] 149 | / if tool.eq_ignore_ascii_case("write") { [INFO] [stdout] 150 | | if let Some(file) = tool_input [INFO] [stdout] 151 | | .get("filePath") [INFO] [stdout] 152 | | .and_then(Value::as_str) [INFO] [stdout] ... | [INFO] [stdout] 163 | | } [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] 149 ~ if tool.eq_ignore_ascii_case("write") [INFO] [stdout] 150 ~ && let Some(file) = tool_input [INFO] [stdout] 151 | .get("filePath") [INFO] [stdout] ... [INFO] [stdout] 161 | })); [INFO] [stdout] 162 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to one [INFO] [stdout] --> tests/dispatch_marker_e2e.rs:154:9 [INFO] [stdout] | [INFO] [stdout] 154 | / explain["dispatch_lineage"] [INFO] [stdout] 155 | | .as_array() [INFO] [stdout] 156 | | .expect("dispatch lineage") [INFO] [stdout] 157 | | .len() [INFO] [stdout] 158 | | >= 1 [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] help: using `!is_empty` is clearer and more explicit [INFO] [stdout] | [INFO] [stdout] 154 ~ !explain["dispatch_lineage"] [INFO] [stdout] 155 + .as_array() [INFO] [stdout] 156 + .expect("dispatch lineage").is_empty() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling `as_bytes` after slicing a string [INFO] [stdout] --> tests/ingest_e2e.rs:268:20 [INFO] [stdout] | [INFO] [stdout] 268 | .write_all(appended_line[split_at..].as_bytes()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&appended_line.as_bytes()[split_at..]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#sliced_string_as_bytes [INFO] [stdout] = note: `#[warn(clippy::sliced_string_as_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to one [INFO] [stdout] --> tests/cli_e2e.rs:105:13 [INFO] [stdout] | [INFO] [stdout] 105 | assert!(query_anchors.len() >= 1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!query_anchors.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::filter` [INFO] [stdout] --> src/main.rs:507:23 [INFO] [stdout] | [INFO] [stdout] 507 | let adapter = if let Some(adapter) = adapter_hint { [INFO] [stdout] | _______________________^ [INFO] [stdout] 508 | | if convert_with_adapter(adapter, ingest_input).is_ok() { [INFO] [stdout] 509 | | Some(adapter) [INFO] [stdout] 510 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 514 | | None [INFO] [stdout] 515 | | }; [INFO] [stdout] | |_________^ help: try: `adapter_hint.filter(|&adapter| convert_with_adapter(adapter, ingest_input).is_ok())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter [INFO] [stdout] = note: `#[warn(clippy::manual_filter)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/main.rs:1007:5 [INFO] [stdout] | [INFO] [stdout] 1007 | / if let Some(adapter) = preferred { [INFO] [stdout] 1008 | | if convert_with_adapter(adapter, input).is_ok() { [INFO] [stdout] 1009 | | return Some(adapter); [INFO] [stdout] 1010 | | } [INFO] [stdout] 1011 | | } [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] 1007 ~ if let Some(adapter) = preferred [INFO] [stdout] 1008 ~ && convert_with_adapter(adapter, input).is_ok() { [INFO] [stdout] 1009 | return Some(adapter); [INFO] [stdout] 1010 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Iterator::find` [INFO] [stdout] --> src/main.rs:1013:5 [INFO] [stdout] | [INFO] [stdout] 1013 | / for adapter in [ [INFO] [stdout] 1014 | | AdapterId::CodexCli, [INFO] [stdout] 1015 | | AdapterId::ClaudeCode, [INFO] [stdout] 1016 | | AdapterId::OpenCode, [INFO] [stdout] ... | [INFO] [stdout] 1025 | | None [INFO] [stdout] | |________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] = note: `#[warn(clippy::manual_find)]` on by default [INFO] [stdout] help: replace with an iterator [INFO] [stdout] | [INFO] [stdout] 1013 ~ [ [INFO] [stdout] 1014 + AdapterId::CodexCli, [INFO] [stdout] 1015 + AdapterId::ClaudeCode, [INFO] [stdout] 1016 + AdapterId::OpenCode, [INFO] [stdout] 1017 + AdapterId::Cursor, [INFO] [stdout] 1018 + AdapterId::GeminiCli, [INFO] [stdout] 1019 + AdapterId::OpenClaw, [INFO] [stdout] 1020 + ].into_iter().find(|&adapter| convert_with_adapter(adapter, input).is_ok()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::filter` [INFO] [stdout] --> src/main.rs:507:23 [INFO] [stdout] | [INFO] [stdout] 507 | let adapter = if let Some(adapter) = adapter_hint { [INFO] [stdout] | _______________________^ [INFO] [stdout] 508 | | if convert_with_adapter(adapter, ingest_input).is_ok() { [INFO] [stdout] 509 | | Some(adapter) [INFO] [stdout] 510 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 514 | | None [INFO] [stdout] 515 | | }; [INFO] [stdout] | |_________^ help: try: `adapter_hint.filter(|&adapter| convert_with_adapter(adapter, ingest_input).is_ok())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_filter [INFO] [stdout] = note: `#[warn(clippy::manual_filter)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:1453:38 [INFO] [stdout] | [INFO] [stdout] 1453 | let tape_path = tape_path_for_id(&paths, &args.tape_id); [INFO] [stdout] | ^^^^^^ help: change this to: `paths` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:1553:46 [INFO] [stdout] | [INFO] [stdout] 1553 | let mut sessions = build_session_windows(&paths, touches)?; [INFO] [stdout] | ^^^^^^ help: change this to: `paths` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/main.rs:1007:5 [INFO] [stdout] | [INFO] [stdout] 1007 | / if let Some(adapter) = preferred { [INFO] [stdout] 1008 | | if convert_with_adapter(adapter, input).is_ok() { [INFO] [stdout] 1009 | | return Some(adapter); [INFO] [stdout] 1010 | | } [INFO] [stdout] 1011 | | } [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] 1007 ~ if let Some(adapter) = preferred [INFO] [stdout] 1008 ~ && convert_with_adapter(adapter, input).is_ok() { [INFO] [stdout] 1009 | return Some(adapter); [INFO] [stdout] 1010 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Iterator::find` [INFO] [stdout] --> src/main.rs:1013:5 [INFO] [stdout] | [INFO] [stdout] 1013 | / for adapter in [ [INFO] [stdout] 1014 | | AdapterId::CodexCli, [INFO] [stdout] 1015 | | AdapterId::ClaudeCode, [INFO] [stdout] 1016 | | AdapterId::OpenCode, [INFO] [stdout] ... | [INFO] [stdout] 1025 | | None [INFO] [stdout] | |________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_find [INFO] [stdout] = note: `#[warn(clippy::manual_find)]` on by default [INFO] [stdout] help: replace with an iterator [INFO] [stdout] | [INFO] [stdout] 1013 ~ [ [INFO] [stdout] 1014 + AdapterId::CodexCli, [INFO] [stdout] 1015 + AdapterId::ClaudeCode, [INFO] [stdout] 1016 + AdapterId::OpenCode, [INFO] [stdout] 1017 + AdapterId::Cursor, [INFO] [stdout] 1018 + AdapterId::GeminiCli, [INFO] [stdout] 1019 + AdapterId::OpenClaw, [INFO] [stdout] 1020 + ].into_iter().find(|&adapter| convert_with_adapter(adapter, input).is_ok()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/main.rs:2242:28 [INFO] [stdout] | [INFO] [stdout] 2242 | fn extract_message_objects<'a>(row: &'a Value) -> Vec<&'a Value> { [INFO] [stdout] | ^^ ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 2242 - fn extract_message_objects<'a>(row: &'a Value) -> Vec<&'a Value> { [INFO] [stdout] 2242 + fn extract_message_objects(row: &Value) -> Vec<&Value> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:1453:38 [INFO] [stdout] | [INFO] [stdout] 1453 | let tape_path = tape_path_for_id(&paths, &args.tape_id); [INFO] [stdout] | ^^^^^^ help: change this to: `paths` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:1553:46 [INFO] [stdout] | [INFO] [stdout] 1553 | let mut sessions = build_session_windows(&paths, touches)?; [INFO] [stdout] | ^^^^^^ help: change this to: `paths` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the following explicit lifetimes could be elided: 'a [INFO] [stdout] --> src/main.rs:2242:28 [INFO] [stdout] | [INFO] [stdout] 2242 | fn extract_message_objects<'a>(row: &'a Value) -> Vec<&'a Value> { [INFO] [stdout] | ^^ ^^ ^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stdout] = note: `#[warn(clippy::needless_lifetimes)]` on by default [INFO] [stdout] help: elide the lifetimes [INFO] [stdout] | [INFO] [stdout] 2242 - fn extract_message_objects<'a>(row: &'a Value) -> Vec<&'a Value> { [INFO] [stdout] 2242 + fn extract_message_objects(row: &Value) -> Vec<&Value> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 31.20s [INFO] running `Command { std: "docker" "inspect" "b15a64d76c14e27f576137c55928cfdfd686ebd6f134c07f11016b9a1f84ee01", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b15a64d76c14e27f576137c55928cfdfd686ebd6f134c07f11016b9a1f84ee01", kill_on_drop: false }` [INFO] [stdout] b15a64d76c14e27f576137c55928cfdfd686ebd6f134c07f11016b9a1f84ee01