Rust documentation conventions (RFC 1574). Apply when writing doc comments on public Rust items. Covers summary sentences, section headings, type references, and examples.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add the-void-ia/void-box --skill rustdoc --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Rustdoc?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/the-void-ia-rustdoc)More formats (shields.io, HTML) on the badges page.
---
name: rustdoc
description: Rust documentation conventions (RFC 1574). Apply when writing doc comments on public Rust items. Covers summary sentences, section headings, type references, and examples.
---
# Rust Documentation Conventions (RFC 1574)
Apply these rules when writing doc comments (`///`) on public Rust items.
## Summary Sentence
Every doc comment starts with a single-line summary sentence.
```rust
// DO: third person singular present indicative, ends with period
/// Returns the length of the string.
/// Creates a new instance with default settings.
/// Parses the input and returns the result.
// DON'T: imperative, missing period, or verbose
/// Return the length of the string
/// This function creates a new instance with default settings.
/// Use this to parse the input and get the result back.
```
## Comment Style
Use line comments, not block comments.
```rust
// DO
/// Summary sentence here.
///
/// More details if needed.
// DON'T
/**
* Summary sentence here.
*
* More details if needed.
*/
```
Use `//!` only for crate-level and module-level docs at the top of the file.
## Section Headings
Use these exact headings (always plural):
```rust
/// Summary sentence.
///
/// # Examples
///
/// # Panics
///
/// # Errors
///
/// # Safety
///
/// # Aborts
///
/// # Undefined Behavior
```
```rust
// DO
/// # Examples
// DON'T
/// # Example
/// ## Examples
/// **Examples:**
```
## Type References
Use full generic forms and link with reference-style markdown.
```rust
// DO
/// Returns [`Option<T>`] if the value exists.
///
/// [`Option<T>`]: std::option::Option
// DON'T
/// Returns `Option` if the value exists.
/// Returns an optional value.
```
## Examples
Every public item should have examples showing usage.
```rust
/// Adds two numbers together.
///
/// # Examples
///
/// ```
/// let result = my_crate::add(2, 3);
/// assert_eq!(result, 5);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
```
For multiple patterns:
```rust
/// Parses a string into a number.
///
/// # Examples
///
/// Basic usage:
///
/// ```
/// let n: i32 = my_crate::parse("42").unwrap();
/// assert_eq!(n, 42);
/// ```
///
/// Handling errors:
///
/// ```
/// let result = my_crate::parse::<i32>("not a number");
/// assert!(result.is_err());
/// ```
```
## Errors Section
Document what errors can be returned and when.
```rust
/// Reads a file from disk.
///
/// # Errors
///
/// Returns [`io::Error`] if the file does not exist or cannot be read.
///
/// [`io::Error`]: std::io::Error
```
## Panics Section
Document conditions that cause panics.
```rust
/// Divides two numbers.
///
/// # Panics
///
/// Panics if `divisor` is zero.
pub fn divide(dividend: i32, divisor: i32) -> i32 {
assert!(divisor != 0, "divisor must not be zero");
dividend / divisor
}
```
## Safety Section
Required for `unsafe` functions.
```rust
/// Dereferences a raw pointer.
///
/// # Safety
///
/// The pointer must be non-null and properly aligned.
/// The pointed-to memory must be valid for the lifetime `'a`.
pub unsafe fn deref<'a, T>(ptr: *const T) -> &'a T {
&*ptr
}
```
## Module vs Type Docs
- Module docs (`//!`): high-level summaries, when to use this module
- Type docs (`///`): comprehensive, self-contained
Some duplication is acceptable.
## Language
Use American English spelling: "color" not "colour", "serialize" not "serialise".Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!