npx skills add https://github.com/zhanghandong/rust-skills --skill coding-guidelinesHow Coding Guidelines fits into a Paperclip company.
Coding Guidelines drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.
Pre-configured AI company — 18 agents, 18 skills, one-time purchase.
SKILL.md95 linesExpandCollapse
---name: coding-guidelinesdescription: "Use when asking about Rust code style or best practices. Keywords: naming, formatting, comment, clippy, rustfmt, lint, code style, best practice, P.NAM, G.FMT, code review, naming convention, variable naming, function naming, type naming, 命名规范, 代码风格, 格式化, 最佳实践, 代码审查, 怎么命名"source: https://rust-coding-guidelines.github.io/rust-coding-guidelines-zh/user-invocable: false--- # Rust Coding Guidelines (50 Core Rules) ## Naming (Rust-Specific) | Rule | Guideline ||------|-----------|| No `get_` prefix | `fn name()` not `fn get_name()` || Iterator convention | `iter()` / `iter_mut()` / `into_iter()` || Conversion naming | `as_` (cheap &), `to_` (expensive), `into_` (ownership) || Static var prefix | `G_CONFIG` for `static`, no prefix for `const` | ## Data Types | Rule | Guideline ||------|-----------|| Use newtypes | `struct Email(String)` for domain semantics || Prefer slice patterns | `if let [first, .., last] = slice` || Pre-allocate | `Vec::with_capacity()`, `String::with_capacity()` || Avoid Vec abuse | Use arrays for fixed sizes | ## Strings | Rule | Guideline ||------|-----------|| Prefer bytes | `s.bytes()` over `s.chars()` when ASCII || Use `Cow<str>` | When might modify borrowed data || Use `format!` | Over string concatenation with `+` || Avoid nested iteration | `contains()` on string is O(n*m) | ## Error Handling | Rule | Guideline ||------|-----------|| Use `?` propagation | Not `try!()` macro || `expect()` over `unwrap()` | When value guaranteed || Assertions for invariants | `assert!` at function entry | ## Memory | Rule | Guideline ||------|-----------|| Meaningful lifetimes | `'src`, `'ctx` not just `'a` || `try_borrow()` for RefCell | Avoid panic || Shadowing for transformation | `let x = x.parse()?` | ## Concurrency | Rule | Guideline ||------|-----------|| Identify lock ordering | Prevent deadlocks || Atomics for primitives | Not Mutex for bool/usize || Choose memory order carefully | Relaxed/Acquire/Release/SeqCst | ## Async | Rule | Guideline ||------|-----------|| Sync for CPU-bound | Async is for I/O || Don't hold locks across await | Use scoped guards | ## Macros | Rule | Guideline ||------|-----------|| Avoid unless necessary | Prefer functions/generics || Follow Rust syntax | Macro input should look like Rust | ## Deprecated → Better | Deprecated | Better | Since ||------------|--------|-------|| `lazy_static!` | `std::sync::OnceLock` | 1.70 || `once_cell::Lazy` | `std::sync::LazyLock` | 1.80 || `std::sync::mpsc` | `crossbeam::channel` | - || `std::sync::Mutex` | `parking_lot::Mutex` | - || `failure`/`error-chain` | `thiserror`/`anyhow` | - || `try!()` | `?` operator | 2018 | ## Quick Reference ```Naming: snake_case (fn/var), CamelCase (type), SCREAMING_CASE (const)Format: rustfmt (just use it)Docs: /// for public items, //! for module docsLint: #![warn(clippy::all)]``` Claude knows Rust conventions well. These are the non-obvious Rust-specific rules.M01 Ownership
The m01-ownership skill diagnoses and resolves Rust ownership, borrowing, and lifetime errors by guiding developers to understand data ownership requirements ra
M02 Resource
m02-resource guides developers through selecting appropriate smart pointers and resource management patterns in Rust by asking design questions rather than pres
M03 Mutability
The m03-mutability skill diagnoses and resolves Rust mutability errors (E0596, E0499, E0502) by guiding developers to understand whether mutation is architectur