Target
$ARGUMENTS
Audit Rust code quality. Report issues in organized format, then offer to fix.
Audit Categories
1. Clippy Violations
- •All clippy warnings must be addressed, not silenced
- •Use
#[expect(...)]with comment if truly necessary, never bare#[allow(...)] - •Check for missing workspace lint config in Cargo.toml
2. Borrowing & Cloning
Red flags:
- •
.clone()inside loops - use.cloned()or.copied()on iterator - •
.clone()on large types (Vec<T>,HashMap<K,V>) - •Clone when borrow would work -
fn process(s: String)vsfn process(s: &str) - •
&Vec<T>instead of&[T] - •
&Stringinstead of&str - •Cloning reference args when caller should pass ownership
Prefer:
- •Borrow over clone
- •
&stroverStringin params - •
&[T]over&Vec<T>in params - •
impl AsRef<T>for flexible APIs
3. Option/Result Handling
Red flags:
- •
.unwrap()or.expect()in non-test code - •
matchfor simple Ok/Err -> Some/None conversions (use.ok(),.ok_or()) - •Manual match that could be
let Ok(x) = expr else { return } - •
if let Some(x) = ... { x } else { default }instead of.unwrap_or()
Prefer:
- •
?for error propagation - •
let Ok(x) = expr else { return Err(...) }for early returns - •
.ok_or_else()/.map_or_else()when allocation needed - •
thiserrorfor library errors,anyhowonly for binaries
4. Iterator Patterns
Red flags:
- •Collecting just to iterate again -
.collect::<Vec<_>>()thenfor x in vec - •Manual loops that could be
.filter().map().collect() - •
.fold()for simple sums (use.sum()) - •Missing
.iter()vs.into_iter()awareness (prefer.iter()forCopytypes)
Prefer:
- •Pass iterators directly when possible
- •Lazy evaluation - don't collect until needed
- •
.enumerate()over manual index tracking
5. Error Handling
Red flags:
- •
panic!in library code (useResult) - •
Box<dyn Error>in library APIs (usethiserror) - •Missing
# Errorsdoc section on fallible functions - •
anyhowin library code
Prefer:
- •
thiserrorwith descriptive error variants - •Error hierarchies with
#[from]for wrapping - •
?over verbose match chains - •
inspect_err()for logging
6. Performance Anti-patterns
Red flags:
- •Unnecessary heap allocation (
Boxwhen stack works) - •
#[inline]without benchmark proof - •Large stack allocations (arrays > 64KB)
- •
Box<dyn Trait>whenimpl Traitworks - •Early allocation in
or,map_or,unwrap_or(use_elsevariants)
Prefer:
- •
impl Trait(static dispatch) overdyn Traitwhen possible - •
Cow<'_, str>for maybe-owned data - •Benchmark before optimizing
7. Comments & Documentation
Red flags:
- •Comments explaining "what" not "why"
- •
// TODOwithout issue link - •Stale/misleading comments
- •Missing
///docs on public items - •Missing
# Examples,# Errors,# Panicssections
Prefer:
- •Let code speak - extract functions over comments
- •Link to ADRs/issues for context
- •Doc tests as living examples
8. Type System
Red flags:
- •Runtime state checks that could be compile-time (type state pattern)
- •
Option<T>fields for required builder params - •Missing
#[non_exhaustive]on public enums - •
dyn TraitwithoutSend + Syncin async contexts
Prefer:
- •Type state pattern for state machines
- •Compile-time guarantees over runtime checks
- •
PhantomDatafor zero-cost type markers
9. Rust Slop (AI/verbose cruft)
Red flags:
- •Defensive code for impossible cases
- •Over-engineered abstractions for one-time use
- •Verbose intermediate variables adding nothing
- •Interfaces with single implementations
- •Factory patterns for simple construction
Output Format
code
# Rust Quality Audit: [path] ## Critical (must fix) - [file:line] Category: Description ## Warnings (should fix) - [file:line] Category: Description ## Suggestions (consider) - [file:line] Category: Description ## Summary - X critical, Y warnings, Z suggestions - Key patterns to address: ...
After reporting, ask: "Fix issues? (all / critical only / skip)"