agentsclimarketplace

Rust quality

Skill dawidpereira/rust-skills/skills/rust-quality

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.From its SKILL.md

Install
npx -y skills add dawidpereira/rust-skills --skill rust-quality

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

7.2 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it

Rust Quality

Core Question

Is this tested, linted, and organized for the next developer?

Quick Decisions

SituationAction
New projectApply default Cargo.toml settings below
Adding a featureWrite tests first — see rust-tests for unit/integration strategy
Reviewing codeCheck anti-patterns index
Setting up CIcargo fmt --check && cargo clippy -- -D warnings && cargo test
Organizing modulesFeature-based, flat for small projects
BenchmarkingUse criterion, never Instant::now()
Mocking dependenciesExtract traits, use mockall
Property testingUse proptest for roundtrip/invariant checks
Workspace setupInherit 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 = 3

For 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 = true

Clippy 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.rs

Medium 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.rs

Large projects: workspace

my-project/
├── Cargo.toml            # [workspace] with shared lints/deps
├── crates/
│   ├── core/
│   ├── api/
│   └── cli/
└── tests/

Visibility rules

ScopeKeywordUse for
Public APIpubTypes and functions users need
Crate-internalpub(crate)Shared implementation details
Parent-onlypub(super)Sibling submodule helpers
Private(default)Everything else

Key patterns

  • Keep main.rs thin, logic in lib.rs for testability.
  • Organize by feature (user/, order/), not by type (models/, services/).
  • Use pub use re-exports in mod.rs to create clean public APIs.
  • Create a prelude module for commonly used types in libraries.
  • Put multiple binaries in src/bin/.
  • Use mod.rs for complex modules, adjacent files for simple ones.

Usage Scenarios

Scenario 1: Setting up a new Rust project

  1. Apply default Cargo.toml settings (edition, lints, profiles).
  2. Create src/lib.rs with module declarations and src/main.rs as thin entry point.
  3. Add rustfmt.toml with edition = "2024" and max_width = 100.
  4. Set up CI: cargo fmt --check && cargo clippy -- -D warnings && cargo test.
  5. Structure tests: #[cfg(test)] mod tests in each file, tests/ for integration.

Scenario 2: Reviewing Rust code for quality

  1. Check the anti-patterns index for common issues.
  2. Verify all public items have documentation.
  3. Confirm tests follow arrange/act/assert with descriptive names.
  4. Look for .unwrap() in non-test code (use ? or .expect() with context).
  5. Ensure dependencies are behind traits for testability.
  6. Run cargo clippy -- -D warnings and fix all warnings.

Scenario 3: Adding tests to existing code

  1. Decide test boundaries: see rust-tests → Quick Decisions for unit vs integration.
  2. Property tests: proptest! for roundtrip, idempotence, and invariant properties.
  3. Mocking: extract dependencies into traits, use mockall for mock generation.
  4. Benchmarks: criterion in benches/, with black_box to prevent optimization.
  5. Async tests: #[tokio::test] for async functions.

Reference Index

ReferenceCovers
references/testing.mdProptest, mockall, criterion, tokio::test, RAII fixtures, doctests. For unit/integration test strategy and organization, see rust-tests
references/linting.mdClippy lint levels, pedantic config, workspace lints, missing_docs, unsafe docs, cargo fmt in CI
references/project.mdlib/main split, feature modules, visibility, re-exports, prelude, workspaces, dependency inheritance
references/anti-patterns.md15 common anti-patterns with bad/good examples and "when acceptable" guidance

Cross-References

  • Error handling patterns: see the rust-errors skill for thiserror, anyhow, Result<T, E>, and error context chains.
  • API design and naming conventions: see the rust-api skill for builder pattern, newtype, From/Into, sealed traits, #[non_exhaustive], and naming (references/naming.md).
  • Unit & integration testing strategy: see the rust-tests skill for test boundaries, module organization, test builders, error path testing, and integration test isolation.
  • Performance optimization: see the rust-perf skill for profiling, memory layout, SIMD, and release profile tuning.
  • Async patterns: see the rust-async skill for tokio runtime, channels, cancellation, and structured concurrency.
  • Logging and observability: see the rust-tracing skill for tracing setup, structured logging, #[instrument], RUST_LOG, and OpenTelemetry integration.

What ships with it: 4 files

24.5 KB alongside SKILL.md

references/

Keep looking

Skills are one crate of 326,758. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.