mcpField
C
coding-guidelines

coding-guidelines

github.com/actionbookDevelopment1.6k4.0k installsUpdated 9w ago
Repository

About coding-guidelines

A skill presenting 50 Rust-specific coding guidelines, covering naming, types, strings, errors, memory, concurrency, async code, and macros. It highlights conventions that may be less obvious than standard Rust rules.

Key features

  1. 01Covers 50 Rust coding rules
  2. 02Guidance on naming and data types
  3. 03Rules for strings and error handling
  4. 04Memory, concurrency, and async advice
  5. 05Deprecated patterns and replacements

Use cases

  1. 01Checking Rust naming and conversion conventions
  2. 02Reviewing Rust error-handling choices
  3. 03Auditing async code and lock usage

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/actionbook/rust-skills --skill coding-guidelines

After installing, type/coding-guidelinesin Claude Code to confirm it loaded.

Bundled filesclippy-lints/_index.mdindex/rules-index.md

Details

From the project README

Rust Coding Guidelines (50 Core Rules)

Naming (Rust-Specific)

RuleGuideline
No get_ prefixfn name() not fn get_name()
Iterator conventioniter() / iter_mut() / into_iter()
Conversion namingas_ (cheap &), to_ (expensive), into_ (ownership)
Static var prefixG_CONFIG for static, no prefix for const

Data Types

RuleGuideline
Use newtypesstruct Email(String) for domain semantics
Prefer slice patternsif let [first, .., last] = slice
Pre-allocateVec::with_capacity(), String::with_capacity()
Avoid Vec abuseUse arrays for fixed sizes

Strings

RuleGuideline
Prefer bytess.bytes() over s.chars() when ASCII
Use Cow<str>When might modify borrowed data
Use format!Over string concatenation with +
Avoid nested iterationcontains() on string is O(n*m)

Error Handling

RuleGuideline
Use ? propagationNot try!() macro
expect() over unwrap()When value guaranteed
Assertions for invariantsassert! at function entry

Memory

RuleGuideline
Meaningful lifetimes'src, 'ctx not just 'a
try_borrow() for RefCellAvoid panic
Shadowing for transformationlet 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::OnceLock1.70
once_cell::Lazystd::sync::LazyLock1.80
std::sync::mpsccrossbeam::channel-
std::sync::Mutexparking_lot::Mutex-
failure/error-chainthiserror/anyhow-
try!()? operator2018

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.

Comments

Markdown supported