Claude-skill-registry coding-guidelines

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, 命名规范, 代码风格, 格式化, 最佳实践, 代码审查, 怎么命名

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/coding-guidelines" ~/.claude/skills/majiayu000-claude-skill-registry-coding-guidelines && rm -rf "$T"
manifest: skills/data/coding-guidelines/SKILL.md
source content

Rust Coding Guidelines (50 Core Rules)

Naming (Rust-Specific)

RuleGuideline
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

RuleGuideline
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 abuseUse arrays for fixed sizes

Strings

RuleGuideline
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

RuleGuideline
Use
?
propagation
Not
try!()
macro
expect()
over
unwrap()
When value guaranteed
Assertions for invariants
assert!
at function entry

Memory

RuleGuideline
Meaningful lifetimes
'src
,
'ctx
not just
'a
try_borrow()
for RefCell
Avoid panic
Shadowing for transformation
let x = x.parse()?

Concurrency

RuleGuideline
Identify lock orderingPrevent deadlocks
Atomics for primitivesNot Mutex for bool/usize
Choose memory order carefullyRelaxed/Acquire/Release/SeqCst

Async

RuleGuideline
Sync for CPU-boundAsync is for I/O
Don't hold locks across awaitUse scoped guards

Macros

RuleGuideline
Avoid unless necessaryPrefer functions/generics
Follow Rust syntaxMacro input should look like Rust

Deprecated → Better

DeprecatedBetterSince
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 docs
Lint: #![warn(clippy::all)]

Claude knows Rust conventions well. These are the non-obvious Rust-specific rules.