rust-quality
Skill0 starsChanged 8 months agoMITView on GitHub
Rust code quality — linting, project structure, anti-patterns, and advanced testing tools. Use when configuring clippy lints, organizing modules and workspaces, reviewing code for common Rust anti-patterns like excessive cloning or unwrap abuse, or setting up proptest, mockall, or criterion. Also use when setting up a new Rust project's Cargo.toml with recommended lint and profile settings. For unit and integration test strategy, see rust-tests.
In this repository16 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- rust-apiSkill
- rust-architectureSkill
- rust-asyncSkill
- rust-ci-deploySkill
- rust-databaseSkill
- rust-dddSkill
- rust-errorsSkill
- rust-macrosSkill
- rust-ownershipSkill
- rust-perfSkill
- rust-serdeSkill
- rust-testsSkill
- rust-tracingSkill
- rust-typesSkill
- rust-unsafeSkill
The file
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 3 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 183
Keep main.rs thin, logic in lib.rs for testability.
- Very specific: line 185
Use pub use re-exports in mod.rs to create clean public APIs.
- Very specific: line 186
Create a prelude module for commonly used types in libraries.
- Very specific: line 187
Put multiple binaries in src/bin/.
- Very specific: line 188
Use mod.rs for complex modules, adjacent files for simple ones.
- Very specific: line 195
Create src/lib.rs with module declarations and src/main.rs as thin entry point.
- Very specific: line 196
Add rustfmt.toml with edition = "2024" and max_width = 100.
- Distinctive: line 202
Check the anti-patterns index for common issues.
- Distinctive: line 203
Verify all public items have documentation.
- Very specific: line 205
Look for .unwrap() in non-test code (use ?
- Distinctive: line 206
Ensure dependencies are behind traits for testability.
- Very specific: line 207
Run cargo clippy -- -D warnings and fix all warnings.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Rust Quality
Core Question
Is this tested, linted, and organized for the next developer?
Quick Decisions
| Situation | Action |
| New project | Apply default Cargo.toml settings below |
| Adding a feature | Write tests first — see rust-tests for unit/integration strategy |
| Reviewing code | Check anti-patterns index |
| Setting up CI | cargo fmt --check && cargo clippy -- -D warnings && cargo test |
| Organizing modules | Feature-based, flat for small projects |
| Benchmarking | Use criterion, never Instant::now() |
| Mocking dependencies | Extract traits, use mockall |
| Property testing | Use proptest for roundtrip/invariant checks |
| Workspace setup | Inherit lints and deps from workspace root |
Default Cargo.toml Settings
Apply these settings to every new Rust project:
[package]
edition = "2024"
rust-version = "1.85"
[lints.clippy]
correctness = "deny"
suspicious = "warn"
style = "warn"
complexity = "warn"
perf = "warn"
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
panic = "abort"
strip = true
[profile.dev.package."*"]
opt-level = 3For workspaces, define lints at the root and inherit:
# workspace Cargo.toml
[workspace.lints.clippy]
correctness = "deny"
suspicious = "warn"
style = "warn"
complexity = "warn"
perf = "warn"
# member Cargo.toml
[lints]
workspace = trueClippy Lint Levels
Deny: correctness
Hard errors for code that is outright wrong. Catches infinite iterators, NaN comparisons, impossible conditions, and invalid regex. Never allow these.
[lints.clippy]
correctness = "deny"Warn: suspicious, style, complexity, perf
Soft warnings for likely bugs, non-idiomatic patterns, unnecessary complexity, and performance anti-patterns.
[lints.clippy]
suspicious = "warn"
style = "warn"
complexity = "warn"
perf = "warn"Selective: pedantic
Enable pedantic as a baseline, then disable noisy lints:
[lints.clippy]
pedantic = "warn"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
must_use_candidate = "allow"
too_many_lines = "allow"Additional recommended lints
[lints.clippy]
undocumented_unsafe_blocks = "warn"
[lints.rust]
missing_docs = "warn"For published crates, add cargo = "warn" to catch missing metadata and wildcard
dependencies.
Project Structure Quick Reference
Small projects (< 10 files): flat
src/
├── main.rs
├── lib.rs
├── config.rs
├── database.rs
└── error.rsMedium projects (10-20 files): feature-based modules
src/
├── main.rs # Thin entry point
├── lib.rs # Re-exports, module declarations
├── user/
│ ├── mod.rs
│ ├── model.rs
│ ├── repository.rs
│ └── service.rs
├── order/
│ ├── mod.rs
│ ├── model.rs
│ └── service.rs
└── shared/
├── mod.rs
├── error.rs
└── database.rsLarge projects: workspace
my-project/
├── Cargo.toml # [workspace] with shared lints/deps
├── crates/
│ ├── core/
│ ├── api/
│ └── cli/
└── tests/Visibility rules
| Scope | Keyword | Use for |
| Public API | pub | Types and functions users need |
| Crate-internal | pub(crate) | Shared implementation details |
| Parent-only | pub(super) | Sibling submodule helpers |
| Private | (default) | Everything else |
Key patterns
- Keep
main.rsthin, logic inlib.rsfor testability. - Organize by feature (user/, order/), not by type (models/, services/).
- Use
pub usere-exports inmod.rsto create clean public APIs. - Create a
preludemodule for commonly used types in libraries. - Put multiple binaries in
src/bin/. - Use
mod.rsfor complex modules, adjacent files for simple ones.
Usage Scenarios
Scenario 1: Setting up a new Rust project
- Apply default Cargo.toml settings (edition, lints, profiles).
- Create
src/lib.rswith module declarations andsrc/main.rsas thin entry point. - Add
rustfmt.tomlwithedition = "2024"andmax_width = 100. - Set up CI:
cargo fmt --check && cargo clippy -- -D warnings && cargo test. - Structure tests:
#[cfg(test)] mod testsin each file,tests/for integration.
Scenario 2: Reviewing Rust code for quality
- Check the anti-patterns index for common issues.
- Verify all public items have documentation.
- Confirm tests follow arrange/act/assert with descriptive names.
- Look for
.unwrap()in non-test code (use?or.expect()with context). - Ensure dependencies are behind traits for testability.
- Run
cargo clippy -- -D warningsand fix all warnings.
Scenario 3: Adding tests to existing code
- Decide test boundaries: see rust-tests → Quick Decisions for unit vs integration.
- Property tests:
proptest!for roundtrip, idempotence, and invariant properties. - Mocking: extract dependencies into traits, use
mockallfor mock generation. - Benchmarks:
criterioninbenches/, withblack_boxto prevent optimization. - Async tests:
#[tokio::test]for async functions.
Reference Index
| Reference | Covers |
| references/testing.md | Proptest, mockall, criterion, tokio::test, RAII fixtures, doctests. For unit/integration test strategy and organization, see rust-tests |
| references/linting.md | Clippy lint levels, pedantic config, workspace lints, missing_docs, unsafe docs, cargo fmt in CI |
| references/project.md | lib/main split, feature modules, visibility, re-exports, prelude, workspaces, dependency inheritance |
| references/anti-patterns.md | 15 common anti-patterns with bad/good examples and "when acceptable" guidance |
Cross-References
- Error handling patterns: see the
rust-errorsskill forthiserror,anyhow,Result<T, E>, and error context chains. - API design and naming conventions: see the
rust-apiskill for builder pattern, newtype,From/Into, sealed traits,#[non_exhaustive], and naming (references/naming.md). - Unit & integration testing strategy: see the
rust-testsskill for test boundaries, module organization, test builders, error path testing, and integration test isolation. - Performance optimization: see the
rust-perfskill for profiling, memory layout, SIMD, and release profile tuning. - Async patterns: see the
rust-asyncskill for tokio runtime, channels, cancellation, and structured concurrency. - Logging and observability: see the
rust-tracingskill for tracing setup, structured logging,#[instrument], RUST_LOG, and OpenTelemetry integration.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

