coding-guidelines
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 |
Comment Style
///for public item docs,//!for module/crate docs,//for inline comments.- No decorative separators. Never use Unicode box-drawing characters (
─,━,═,──) as comment dividers. This includes patterns like// ── Section ───────────────in any file (.rs,.toml,.sh, etc.). These are AI slop: invisible in diffs, meaningless to tooling, and a signal of low-quality generated code. Use a plain// Section nameor nothing.
Unicode Slop Prohibition
Never output these characters in code, comments, docs, or any file:
→(U+2192): use->in prose, or=>in match arms (which is already Rust syntax)—(U+2014, em dash): use--or restructure–(U+2013, en dash): use-•(U+2022): use-list markers…(U+2026): use...- Curly/smart quotes
""'': use straight"'
This applies to .rs, .toml, .md, .sh, .json, .yaml, and every other file type.
Quick Reference
Naming: snake_case (fn/var), CamelCase (type), SCREAMING_CASE (const)
Format: rustfmt (just use it)
Docs: /// for public items, //! for module docs
Lint: #![warn(clippy::all)]
Claude knows Rust conventions well. These are the non-obvious Rust-specific rules.
More from kaynetik/skills
tdd-red-green-refactor
>-
9practical-haskell
Guides efficient Haskell aligned with GHC practice -- laziness and strictness, purity, fusion, newtypes, pragmas, Core reading, and space-leak avoidance. Use when writing or reviewing Haskell, optimizing or profiling, debugging strictness or memory, or when the user mentions GHC, thunks, foldl vs foldl', list fusion, SPECIALIZE, or UNPACK.
7meta-cognition-parallel
EXPERIMENTAL: Three-layer parallel meta-cognition analysis. Triggers on: /meta-parallel, parallel analysis
7helm
Helm 3 chart development, scaffolding, templating, debugging, OCI registries, post-renderers, and production operations. Use when creating Helm charts, packaging Kubernetes applications, debugging Helm deployments, managing releases, working with chart dependencies, or when the user mentions Helm, helm install, helm upgrade, Chart.yaml, values.yaml, helm template, or OCI registry.
6tmux-mastery
Comprehensive tmux skill covering process management, session/window orchestration, and ricing (visual customization). Use when managing tmux sessions, running dev servers, setting up floating panes, configuring status bars, installing plugins via TPM, or when the user asks about tmux, tmux-sessionx, tmux-floax, catppuccin tmux theme, or making tmux look good.
6podmaster
End-to-end container expertise spanning OCI images, runtimes, and operations: image design, Dockerfile/Containerfile optimization, Docker Engine and Compose, Podman (rootless, pods, Quadlet), containerd and CRI, debugging, security hardening, and CI scanning. Use when building or reviewing container images, choosing Docker vs Podman, troubleshooting containers or pods, optimizing layers and cache, working with nerdctl/ctr, Kubernetes node runtimes, Containerfile, docker-compose, podman-compose, health checks, or when the user mentions containers, OCI, rootless, BuildKit, or image supply chain.
3