70d97023cf70d3d4109bfd7c99f26cf0e47081fa
Rust Patterns
Prescriptive patterns for writing idiomatic Rust, extracted from the standard library source at rust-lang/rust.
Source
All patterns are extracted from the library/ directory (the standard
library implementation) at commit
f53b654
(325,000 commits, 8,021 contributors).
Pattern Files
| File | Patterns | Lines | Key Topics |
|---|---|---|---|
| error-handling.md | 10 | 702 | Result, ?, Error trait, From, panic! |
| traits.md | 10 | 699 | Small traits, derive, From/Into, Iterator, Deref |
| ownership.md | 10 | 677 | Borrowing, Clone/Copy, Cow, Arc, Drop, lifetimes |
| documentation.md | 10 | 723 | Doc comments, # Safety, # Examples, doc tests |
| concurrency.md | 10 | 723 | Send/Sync, Mutex, atomics, channels, scoped threads |
| testing.md | 10 | 664 | cfg(test), assert_eq!, should_panic, property tests |
| unsafe-patterns.md | 10 | 624 | // SAFETY:, unsafe fn, MaybeUninit, FFI |
| api-design.md | 10 | 596 | Naming, #[non_exhaustive], newtype, typestate |
| module-organization.md | 10 | 514 | File structure, pub use, prelude, workspaces |
| macros.md | 10 | 519 | macro_rules!, derive, attribute macros, hygiene |
Total: 100 patterns across 10 files + 20 smells across 2 files = 7,439 lines.
Discovery Data (from library/)
| Category | Metric | Count |
|---|---|---|
| Error Handling | ? operator usages |
4,702 |
| Error Handling | Result<> types |
4,059 |
| Error Handling | From<> impls |
508 |
| Traits | Public traits | 241 |
| Traits | Trait implementations | 4,387 |
| Traits | Iterator impls | 895 |
| Ownership | &mut references |
7,909 |
| Ownership | Rc/Arc usages | 798 |
| Ownership | Cow<> usages | 197 |
| Documentation | Doc comments (///) | 133,741 |
| Documentation | # Examples sections | 3,912 |
| Documentation | # Safety sections | 2,864 |
| Concurrency | Atomic types | 783 |
| Concurrency | Send/Sync markers | 274 |
| Testing | #[test] functions | 4,136 |
| Testing | Assert macros | 16,728 |
| Unsafe | Unsafe blocks | 31,244 |
| Unsafe | // SAFETY: comments | 2,463 |
| API Design | pub fn | 18,430 |
| API Design | pub(crate) | 919 |
| Macros | macro_rules! | 607 |
| Macros | #[derive(...)] | 1,116 |
Smell Files
| File | Entries | Lines | Key Topics |
|---|---|---|---|
| smells/anti-patterns.md | 10 | 490 | unwrap in libs, String errors, unsafe without SAFETY, clone escape |
| smells/common-mistakes.md | 10 | 508 | Arc everywhere, collect then iterate, index loops, OOP thinking |
Each Pattern Includes
- Source hyperlink — permalink to the exact source location
- Before/After code — concrete transformation showing improvement
- When to Use — trigger conditions (when this pattern applies)
- When NOT to Use — over-application warning with code example
- Decision tree — at the end of each file for quick reference
How to Use This Repo
- Learning Rust: Read patterns in order of importance: error-handling → ownership → traits → concurrency
- Code review: Reference specific patterns when reviewing Rust PRs
- Teaching: Use before/after pairs as exercises
- Writing new code: Check the decision tree before choosing an approach
Related Repos
- rodin/go-patterns — Go patterns from stdlib
- rodin/elixir-patterns — Elixir patterns from stdlib
- rodin/codebase-analysis — The skill that produces these repos
License
This repository contains analysis and patterns derived from rust-lang/rust (MIT/Apache-2.0 dual licensed).
Languages
Markdown
100%