About rust-review
rust-review is a code-audit skill for reviewers working with Rust projects, covering safety, correctness, and idiomatic patterns. It loads review modules according to scope and requires evidence logging and verification of findings.
Key features
- 01Ownership and error-handling checks
- 02Concurrency pattern review
- 03Unsafe and FFI safety audits
- 04Dependency vulnerability checks
- 05Numeric conversion and memory-safety checks
- 06Evidence logging and finding verification
Use cases
- 01Reviewing Rust code changes
- 02Auditing unsafe blocks and FFI boundaries
- 03Checking async and synchronous concurrency
- 04Reviewing Cargo dependency security
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ athola/ claude-night-market --skill rust-reviewAfter installing, type/rust-reviewin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
modules/async-slop.mdbuiltin-preference.mdcargo-dependencies.mdcfg-test-misuse.mdcoercion-params.mdcollection-types.mdconcurrency-patterns.mdconversion-traits.mdduplicate-validators.mderror-handling.mderror-messages.mdfloat-equality.mdidiomatic-elision.mditerator-and-allocation-slop.mdmatch-wildcard.mdmem-forget-audit.mdmodel-specific-tells.mdmutable-static-audit.mdnative-type-modeling.mdnumeric-cast-safety.mdownership-analysis.mdrepr-packed-audit.mdsilent-returns.mdsql-injection.mdtest-slop.mdtransmute-audit.mdunsafe-audit.mdDetails
From the project READMERust Review Workflow
Expert-level Rust code audits with focus on safety, correctness, and idiomatic patterns.
Quick Start
/rust-review
Verification: Run the command with --help flag to verify availability.
When To Use
- Reviewing Rust code changes
- Auditing unsafe blocks
- Analyzing concurrency patterns
- Dependency security review
- Performance optimization review
When NOT To Use
- General code review without Rust - use unified-review
- Performance profiling - use parseltongue:python-performance pattern
Required TodoWrite Items
rust-review:ownership-analysisrust-review:error-handlingrust-review:concurrencyrust-review:unsafe-auditrust-review:cargo-depsrust-review:native-modelingrust-review:idiomatic-elisionrust-review:coercion-paramsrust-review:conversion-traitsrust-review:numeric-cast-safetyrust-review:mutable-static-auditrust-review:match-wildcardrust-review:transmute-auditrust-review:float-equalityrust-review:mem-forget-auditrust-review:repr-packed-auditrust-review:evidence-logrust-review:findings-verified
Progressive Loading
Load modules as needed based on review scope:
Quick Review (ownership and errors):
- See
modules/ownership-analysis.mdfor borrowing and lifetime analysis - See
modules/error-handling.mdfor Result/Option patterns
Concurrency Focus:
- See
modules/concurrency-patterns.mdfor async and sync primitives
Safety Audit:
- See
modules/unsafe-audit.mdfor unsafe block documentation - See
modules/mutable-static-audit.mdforstatic mutglobals and their thread-safe replacements - See
modules/numeric-cast-safety.mdfor truncating and precision-losingascasts - See
modules/match-wildcard.mdfor catch-all arms that defeat enum exhaustiveness - See
modules/transmute-audit.mdformem::transmute/transmute_copycalls that reinterpret bytes with no layout check - See
modules/repr-packed-audit.mdfor#[repr(packed)]layouts whose field borrows become unaligned references
Correctness Audit:
- See
modules/float-equality.mdfor==/!=against float literals - See
modules/mem-forget-audit.mdformem::forgetleaks and no-opdrop(&x)reference drops
Dependency Review:
- See
modules/cargo-dependencies.mdfor vulnerability scanning
Idiomatic Patterns:
- See
modules/builtin-preference.mdfor conversion traits and builtin preference - See
modules/native-type-modeling.mdfor enums-over-primitives, newtype, type-state, and derived ordering - See
modules/idiomatic-elision.mdfor lifetime elision, expression-oriented returns, and explicit-> ()unit returns - See
modules/coercion-params.mdfor&String/&Vec<T>/&PathBufparameters that defeat deref coercion (prefer&str/&[T]/&Path) - See
modules/conversion-traits.mdforimpl Intothat should beimpl From, and discardedtry_into().unwrap()conversion errors
Core Workflow
- Ownership Analysis: Check borrowing, lifetimes, clone patterns
- Error Handling: Verify Result/Option usage, propagation
- Concurrency: Review async patterns, sync primitives
- Unsafe Audit: Document invariants, FFI contracts
- Dependencies: Scan for vulnerabilities, updates
- Evidence Log: Record commands and findings
Rust Quality Checklist
Safety
- All unsafe blocks documented with SAFETY comments
- FFI boundaries properly wrapped
- Memory safety invariants maintained
- No
static mutglobals; shared state usesOnceLock/LazyLock, atomics, or aMutex/RwLock - No
mem::transmute/transmute_copy; bytes converted withfrom_le_bytes/from_bits/bytemuckor pointers with.cast() -
#[repr(packed)]fields copied out before borrowing (no unaligned references) - No
mem::forgetleaks (useManuallyDrop/scope) and no no-opdrop(&x)reference drops -
mlock/munlockcalls: RLIMIT verified, page-aligned, ENOMEM handled
Correctness
- Error handling complete
- Concurrency patterns sound
- Lossy
ascasts (length truncation,as u8/i8,as f32) replaced withTryFrom/From - Enum matches exhaustive; no
_ => unreachable!()/panic!/{}catch-alls - Floats compared with a tolerance, not exact
==/!=against a float literal - Tests cover critical paths
Performance
- No unnecessary allocations
- Borrowing preferred over cloning
- Async properly non-blocking
Idioms
- Standard traits implemented
- Conversion traits preferred over helper functions
- Stringly-typed values and boolean flags modeled as enums
- Domain invariants encoded with newtypes (private field + validating constructor) or type-state where warranted
- Comparison/ordering traits derived, not hand-written
- Lifetimes elided where elision rules apply;
'_in paths - Trailing
returndropped in favor of the tail expression - Explicit
-> ()unit returns dropped (default is elided) - Parameters take
&str/&[T]/&Path, not&String/&Vec<T>/&PathBuf(deref coercion accepts both, so the slice is more general) - Conversions implement
From/TryFrom, notInto/TryInto; a fallible conversion's error is propagated, notunwrap()ped - Error types well-designed
- Documentation complete
Output Format
## Summary
Rust audit findings
## Ownership Analysis
[borrowing and lifetime issues]
## Error Handling
[error patterns and issues]
## Concurrency
[async and sync patterns]
## Unsafe Audit
### [U1] file:line
- Invariants: [documented]
- Anchor: `verbatim source text at file:line`
- Risk: [assessment]
- Recommendation: [action]
## Native Type Modeling
[stringly-typed comparisons, boolean blindness, newtype/type-state notes]
## Idiomatic Elision
[needless lifetimes, trailing returns, explicit `-> ()` unit returns]
## Coercion Params
[`&String`/`&Vec<T>`/`&PathBuf` params that should be borrowed slices]
## Conversion Traits
[`impl Into` over `impl From`; discarded `try_into().unwrap()` errors]
## Numeric Cast Safety
[length-truncating, byte-narrowing, and f32 precision-losing `as` casts]
## Mutable Static Audit
[`static mut` globals and their thread-safe replacements]
## Match Wildcard
[catch-all `_ =>` arms that defeat enum exhaustiveness]
## Transmute Audit
[`mem::transmute`/`transmute_copy` calls and their typed replacements]
## Float Equality
[exact `==`/`!=` comparisons against float literals]
## Mem Forget Audit
[`mem::forget` leaks and no-op `drop(&x)` reference drops]
## Repr Packed Audit
[`#[repr(packed)]` layouts whose field borrows become unaligned]
## Dependencies
[cargo audit results]
## Recommendation
Approve / Approve with actions / Block
Verification: Run the command with --help flag to verify availability.
Verify Findings Are Grounded (rust-review:findings-verified)
Write findings to .review/findings.json, run the citation verifier
(Skill(imbue:review-core) Step 5), and drop or label UNVERIFIED any
the verifier rejects.
Exit Criteria
- All unsafe blocks audited
- Concurrency patterns verified
- Dependencies scanned
- Evidence logged
- Action items assigned
- Every reported finding carries a
Location+ verbatimAnchorconfirmed bycitation_verifier.py(exit0), or unverified findings were dropped or labeledUNVERIFIED