From 22163ae7cb18bae76f6bcf4c25176c80e5551ec3 Mon Sep 17 00:00:00 2001 From: Postil Maintainer Date: Mon, 24 Aug 2026 00:03:19 +0000 Subject: [PATCH] Satisfy clippy 1.98 Rust 1.98 promotes three lints that fail the warning-free build. ModelError carried a Usage inline, and Usage's provider cost decimals put the whole error over the size bound clippy enforces for Err variants that most provider-facing results return; the usage moves behind a Box, keeping every public signature and accessor unchanged. The two single-element range vectors build through an explicit one-element iterator, which states the intent the lint exists to question. The hex pair walk uses the stabilized as_chunks. --- src/diff.rs | 5 +++-- src/llm.rs | 47 +++++++++++++++++++++------------------- src/repository_search.rs | 2 +- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/diff.rs b/src/diff.rs index d5bcaed..e63c097 100644 --- a/src/diff.rs +++ b/src/diff.rs @@ -771,7 +771,7 @@ impl DiffIndex { if count > 0 { self.ranges.insert( crate::envelope::CHANGE_METADATA_PATH.to_string(), - vec![1..=count], + std::iter::once(1..=count).collect(), ); } } @@ -7909,9 +7909,10 @@ diff --git a/two.rs b/two.rs index.add_rendered_evidence(&batch); assert!(index.rendered_evidence.is_empty()); + let full_metadata_range: Vec<_> = std::iter::once(1..=100_000).collect(); assert_eq!( index.rendered_exact_ranges.get("src/generated.ts"), - Some(&vec![1..=100_000]) + Some(&full_metadata_range) ); assert!(DiffIndex::selected_exact_line( &index.rendered_exact_ranges, diff --git a/src/llm.rs b/src/llm.rs index 7e0c184..a85b126 100644 --- a/src/llm.rs +++ b/src/llm.rs @@ -142,7 +142,10 @@ pub struct Answer { #[derive(Debug)] pub struct ModelError { error: anyhow::Error, - usage: Usage, + // Boxed to keep the whole error within clippy's `result_large_err` bound: + // `Usage` carries provider cost decimals and dominates the struct size, + // and this error is the `Err` variant of most provider-facing results. + usage: Box, model_usage: Vec, model_incidents: Vec, usage_accounting_complete: bool, @@ -210,7 +213,7 @@ impl ModelError { fn new(error: anyhow::Error, usage: Usage, usage_accounting_complete: bool) -> Self { Self { error, - usage, + usage: Box::new(usage), model_usage: Vec::new(), model_incidents: Vec::new(), usage_accounting_complete, @@ -218,7 +221,7 @@ impl ModelError { } pub fn usage(&self) -> Usage { - self.usage + *self.usage } pub fn model_usage(&self) -> &[ModelUsage] { @@ -2268,7 +2271,7 @@ impl LlmClient { Err(error) => { let incident = error.incident(ModelIncidentPhase::Planner); accounting_complete &= error.usage_accounting_complete; - add_usage(&mut aggregate_usage, error.usage); + add_usage(&mut aggregate_usage, *error.usage); aggregate_incidents.extend(error.model_incidents.clone()); aggregate_model_usage.extend(error.model_usage); aggregate_incidents.push(incident); @@ -2838,8 +2841,8 @@ impl LlmClient { failed_incidents.push(e.incident(ModelIncidentPhase::Review)); usage_accounting_complete &= e.usage_accounting_complete; failed_model_usage.extend(e.model_usage.clone()); - add_usage(&mut failed_usage, e.usage); - e.usage = failed_usage; + add_usage(&mut failed_usage, *e.usage); + *e.usage = failed_usage; last_err = Some(e); } Err(e) => { @@ -2957,8 +2960,8 @@ impl LlmClient { failed_model_usage.extend(e.model_usage.clone()); let elapsed = elapsed_text(started_at.elapsed()); if e.is_deadline_exceeded() { - add_usage(&mut failed_usage, e.usage); - e.usage = failed_usage; + add_usage(&mut failed_usage, *e.usage); + *e.usage = failed_usage; eprintln!( "postil: model {model_log} stopped after {elapsed}: {e}; cascade fallback is disabled after deadline exhaustion" ); @@ -2988,8 +2991,8 @@ impl LlmClient { safe_model_error_category(&e) ); } - add_usage(&mut failed_usage, e.usage); - e.usage = failed_usage; + add_usage(&mut failed_usage, *e.usage); + *e.usage = failed_usage; last_err = Some(e); } } @@ -3157,8 +3160,8 @@ impl LlmClient { failed_model_usage.extend(e.model_usage.clone()); let elapsed = elapsed_text(started_at.elapsed()); if e.is_deadline_exceeded() { - add_usage(&mut failed_usage, e.usage); - e.usage = failed_usage; + add_usage(&mut failed_usage, *e.usage); + *e.usage = failed_usage; eprintln!( "postil: scorer {model_log} stopped after {elapsed}: {e}; scorer fallback is disabled after deadline exhaustion" ); @@ -3186,8 +3189,8 @@ impl LlmClient { safe_model_error_category(&e) ); } - add_usage(&mut failed_usage, e.usage); - e.usage = failed_usage; + add_usage(&mut failed_usage, *e.usage); + *e.usage = failed_usage; last_err = Some(e); } } @@ -3320,8 +3323,8 @@ impl LlmClient { failed_model_usage.extend(error.model_usage.clone()); let elapsed = elapsed_text(started_at.elapsed()); if error.is_deadline_exceeded() { - add_usage(&mut failed_usage, error.usage); - error.usage = failed_usage; + add_usage(&mut failed_usage, *error.usage); + *error.usage = failed_usage; error.model_usage = failed_model_usage; error.model_incidents = failed_incidents; return Err(error); @@ -3338,8 +3341,8 @@ impl LlmClient { safe_model_error_category(&error) ); } - add_usage(&mut failed_usage, error.usage); - error.usage = failed_usage; + add_usage(&mut failed_usage, *error.usage); + *error.usage = failed_usage; last_err = Some(error); } } @@ -3413,8 +3416,8 @@ impl LlmClient { failed_model_usage.extend(error.model_usage.clone()); let elapsed = elapsed_text(started_at.elapsed()); if error.is_deadline_exceeded() { - add_usage(&mut failed_usage, error.usage); - error.usage = failed_usage; + add_usage(&mut failed_usage, *error.usage); + *error.usage = failed_usage; error.model_usage = failed_model_usage; error.model_incidents = failed_incidents; error.usage_accounting_complete = usage_accounting_complete; @@ -3432,8 +3435,8 @@ impl LlmClient { safe_model_error_category(&error) ); } - add_usage(&mut failed_usage, error.usage); - error.usage = failed_usage; + add_usage(&mut failed_usage, *error.usage); + *error.usage = failed_usage; last_err = Some(error); } } diff --git a/src/repository_search.rs b/src/repository_search.rs index e7fb72b..6a44d2d 100644 --- a/src/repository_search.rs +++ b/src/repository_search.rs @@ -1598,7 +1598,7 @@ fn decode_hex_into(value: &str, output: &mut [u8]) -> Option<()> { if value.len() != output.len().checked_mul(2)? { return None; } - for (index, pair) in value.as_bytes().chunks_exact(2).enumerate() { + for (index, pair) in value.as_bytes().as_chunks::<2>().0.iter().enumerate() { output[index] = hex_nibble(pair[0])?.checked_mul(16)? + hex_nibble(pair[1])?; } Some(())