agy-superpowers 5.2.2 → 5.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -150
- package/package.json +1 -1
- package/template/agent/rules/scratch-scripts.md +37 -0
- package/template/agent/rules/superpowers.md +4 -51
- package/template/agent/skills/ai-integrated-product/SKILL.md +0 -57
- package/template/agent/skills/analytics-setup/SKILL.md +0 -51
- package/template/agent/skills/api-design/SKILL.md +0 -193
- package/template/agent/skills/app-store-optimizer/SKILL.md +0 -127
- package/template/agent/skills/auth-and-identity/SKILL.md +0 -167
- package/template/agent/skills/backend-developer/SKILL.md +0 -148
- package/template/agent/skills/bootstrapper-finance/SKILL.md +0 -55
- package/template/agent/skills/chrome-extension-developer/SKILL.md +0 -53
- package/template/agent/skills/community-manager/SKILL.md +0 -115
- package/template/agent/skills/content-marketer/SKILL.md +0 -111
- package/template/agent/skills/conversion-optimizer/SKILL.md +0 -142
- package/template/agent/skills/cto-architect/SKILL.md +0 -133
- package/template/agent/skills/customer-success-manager/SKILL.md +0 -126
- package/template/agent/skills/data-analyst/SKILL.md +0 -147
- package/template/agent/skills/devops-engineer/SKILL.md +0 -117
- package/template/agent/skills/email-infrastructure/SKILL.md +0 -164
- package/template/agent/skills/game-design/SKILL.md +0 -194
- package/template/agent/skills/game-developer/SKILL.md +0 -175
- package/template/agent/skills/growth-hacker/SKILL.md +0 -122
- package/template/agent/skills/idea-validator/SKILL.md +0 -55
- package/template/agent/skills/indie-legal/SKILL.md +0 -53
- package/template/agent/skills/influencer-marketer/SKILL.md +0 -141
- package/template/agent/skills/landing-page-builder/SKILL.md +0 -59
- package/template/agent/skills/launch-strategist/SKILL.md +0 -62
- package/template/agent/skills/market-researcher/SKILL.md +0 -53
- package/template/agent/skills/micro-saas-builder/SKILL.md +0 -56
- package/template/agent/skills/monetization-strategist/SKILL.md +0 -119
- package/template/agent/skills/paid-acquisition-specialist/SKILL.md +0 -119
- package/template/agent/skills/pricing-psychologist/SKILL.md +0 -58
- package/template/agent/skills/real-time-features/SKILL.md +0 -194
- package/template/agent/skills/retention-specialist/SKILL.md +0 -123
- package/template/agent/skills/rust-developer/SKILL.md +0 -281
- package/template/agent/skills/rust-developer/references/rust-rules/_sections.md +0 -231
- package/template/agent/skills/rust-developer/references/rust-rules/anti-clone-excessive.md +0 -124
- package/template/agent/skills/rust-developer/references/rust-rules/anti-collect-intermediate.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/anti-empty-catch.md +0 -132
- package/template/agent/skills/rust-developer/references/rust-rules/anti-expect-lazy.md +0 -95
- package/template/agent/skills/rust-developer/references/rust-rules/anti-format-hot-path.md +0 -141
- package/template/agent/skills/rust-developer/references/rust-rules/anti-index-over-iter.md +0 -125
- package/template/agent/skills/rust-developer/references/rust-rules/anti-lock-across-await.md +0 -127
- package/template/agent/skills/rust-developer/references/rust-rules/anti-over-abstraction.md +0 -120
- package/template/agent/skills/rust-developer/references/rust-rules/anti-panic-expected.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/anti-premature-optimize.md +0 -156
- package/template/agent/skills/rust-developer/references/rust-rules/anti-string-for-str.md +0 -122
- package/template/agent/skills/rust-developer/references/rust-rules/anti-stringly-typed.md +0 -167
- package/template/agent/skills/rust-developer/references/rust-rules/anti-type-erasure.md +0 -134
- package/template/agent/skills/rust-developer/references/rust-rules/anti-unwrap-abuse.md +0 -143
- package/template/agent/skills/rust-developer/references/rust-rules/anti-vec-for-slice.md +0 -121
- package/template/agent/skills/rust-developer/references/rust-rules/api-builder-must-use.md +0 -143
- package/template/agent/skills/rust-developer/references/rust-rules/api-builder-pattern.md +0 -187
- package/template/agent/skills/rust-developer/references/rust-rules/api-common-traits.md +0 -165
- package/template/agent/skills/rust-developer/references/rust-rules/api-default-impl.md +0 -177
- package/template/agent/skills/rust-developer/references/rust-rules/api-extension-trait.md +0 -163
- package/template/agent/skills/rust-developer/references/rust-rules/api-from-not-into.md +0 -146
- package/template/agent/skills/rust-developer/references/rust-rules/api-impl-asref.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/api-impl-into.md +0 -160
- package/template/agent/skills/rust-developer/references/rust-rules/api-must-use.md +0 -125
- package/template/agent/skills/rust-developer/references/rust-rules/api-newtype-safety.md +0 -162
- package/template/agent/skills/rust-developer/references/rust-rules/api-non-exhaustive.md +0 -177
- package/template/agent/skills/rust-developer/references/rust-rules/api-parse-dont-validate.md +0 -184
- package/template/agent/skills/rust-developer/references/rust-rules/api-sealed-trait.md +0 -168
- package/template/agent/skills/rust-developer/references/rust-rules/api-serde-optional.md +0 -182
- package/template/agent/skills/rust-developer/references/rust-rules/api-typestate.md +0 -199
- package/template/agent/skills/rust-developer/references/rust-rules/async-bounded-channel.md +0 -175
- package/template/agent/skills/rust-developer/references/rust-rules/async-broadcast-pubsub.md +0 -185
- package/template/agent/skills/rust-developer/references/rust-rules/async-cancellation-token.md +0 -203
- package/template/agent/skills/rust-developer/references/rust-rules/async-clone-before-await.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/async-join-parallel.md +0 -158
- package/template/agent/skills/rust-developer/references/rust-rules/async-joinset-structured.md +0 -195
- package/template/agent/skills/rust-developer/references/rust-rules/async-mpsc-queue.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/async-no-lock-await.md +0 -156
- package/template/agent/skills/rust-developer/references/rust-rules/async-oneshot-response.md +0 -191
- package/template/agent/skills/rust-developer/references/rust-rules/async-select-racing.md +0 -198
- package/template/agent/skills/rust-developer/references/rust-rules/async-spawn-blocking.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-fs.md +0 -167
- package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-runtime.md +0 -169
- package/template/agent/skills/rust-developer/references/rust-rules/async-try-join.md +0 -172
- package/template/agent/skills/rust-developer/references/rust-rules/async-watch-latest.md +0 -189
- package/template/agent/skills/rust-developer/references/rust-rules/doc-all-public.md +0 -113
- package/template/agent/skills/rust-developer/references/rust-rules/doc-cargo-metadata.md +0 -147
- package/template/agent/skills/rust-developer/references/rust-rules/doc-errors-section.md +0 -122
- package/template/agent/skills/rust-developer/references/rust-rules/doc-examples-section.md +0 -161
- package/template/agent/skills/rust-developer/references/rust-rules/doc-hidden-setup.md +0 -149
- package/template/agent/skills/rust-developer/references/rust-rules/doc-intra-links.md +0 -138
- package/template/agent/skills/rust-developer/references/rust-rules/doc-link-types.md +0 -169
- package/template/agent/skills/rust-developer/references/rust-rules/doc-module-inner.md +0 -116
- package/template/agent/skills/rust-developer/references/rust-rules/doc-panics-section.md +0 -128
- package/template/agent/skills/rust-developer/references/rust-rules/doc-question-mark.md +0 -136
- package/template/agent/skills/rust-developer/references/rust-rules/doc-safety-section.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/err-anyhow-app.md +0 -179
- package/template/agent/skills/rust-developer/references/rust-rules/err-context-chain.md +0 -144
- package/template/agent/skills/rust-developer/references/rust-rules/err-custom-type.md +0 -152
- package/template/agent/skills/rust-developer/references/rust-rules/err-doc-errors.md +0 -145
- package/template/agent/skills/rust-developer/references/rust-rules/err-expect-bugs-only.md +0 -133
- package/template/agent/skills/rust-developer/references/rust-rules/err-from-impl.md +0 -152
- package/template/agent/skills/rust-developer/references/rust-rules/err-lowercase-msg.md +0 -124
- package/template/agent/skills/rust-developer/references/rust-rules/err-no-unwrap-prod.md +0 -115
- package/template/agent/skills/rust-developer/references/rust-rules/err-question-mark.md +0 -151
- package/template/agent/skills/rust-developer/references/rust-rules/err-result-over-panic.md +0 -130
- package/template/agent/skills/rust-developer/references/rust-rules/err-source-chain.md +0 -155
- package/template/agent/skills/rust-developer/references/rust-rules/err-thiserror-lib.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/lint-cargo-metadata.md +0 -138
- package/template/agent/skills/rust-developer/references/rust-rules/lint-deny-correctness.md +0 -107
- package/template/agent/skills/rust-developer/references/rust-rules/lint-missing-docs.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/lint-pedantic-selective.md +0 -118
- package/template/agent/skills/rust-developer/references/rust-rules/lint-rustfmt-check.md +0 -157
- package/template/agent/skills/rust-developer/references/rust-rules/lint-unsafe-doc.md +0 -133
- package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-complexity.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-perf.md +0 -136
- package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-style.md +0 -135
- package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-suspicious.md +0 -122
- package/template/agent/skills/rust-developer/references/rust-rules/lint-workspace-lints.md +0 -172
- package/template/agent/skills/rust-developer/references/rust-rules/mem-arena-allocator.md +0 -168
- package/template/agent/skills/rust-developer/references/rust-rules/mem-arrayvec.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/mem-assert-type-size.md +0 -168
- package/template/agent/skills/rust-developer/references/rust-rules/mem-avoid-format.md +0 -147
- package/template/agent/skills/rust-developer/references/rust-rules/mem-box-large-variant.md +0 -158
- package/template/agent/skills/rust-developer/references/rust-rules/mem-boxed-slice.md +0 -139
- package/template/agent/skills/rust-developer/references/rust-rules/mem-clone-from.md +0 -147
- package/template/agent/skills/rust-developer/references/rust-rules/mem-compact-string.md +0 -149
- package/template/agent/skills/rust-developer/references/rust-rules/mem-reuse-collections.md +0 -174
- package/template/agent/skills/rust-developer/references/rust-rules/mem-smaller-integers.md +0 -159
- package/template/agent/skills/rust-developer/references/rust-rules/mem-smallvec.md +0 -138
- package/template/agent/skills/rust-developer/references/rust-rules/mem-thinvec.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/mem-with-capacity.md +0 -156
- package/template/agent/skills/rust-developer/references/rust-rules/mem-write-over-format.md +0 -172
- package/template/agent/skills/rust-developer/references/rust-rules/mem-zero-copy.md +0 -164
- package/template/agent/skills/rust-developer/references/rust-rules/name-acronym-word.md +0 -99
- package/template/agent/skills/rust-developer/references/rust-rules/name-as-free.md +0 -104
- package/template/agent/skills/rust-developer/references/rust-rules/name-consts-screaming.md +0 -94
- package/template/agent/skills/rust-developer/references/rust-rules/name-crate-no-rs.md +0 -78
- package/template/agent/skills/rust-developer/references/rust-rules/name-funcs-snake.md +0 -76
- package/template/agent/skills/rust-developer/references/rust-rules/name-into-ownership.md +0 -123
- package/template/agent/skills/rust-developer/references/rust-rules/name-is-has-bool.md +0 -127
- package/template/agent/skills/rust-developer/references/rust-rules/name-iter-convention.md +0 -129
- package/template/agent/skills/rust-developer/references/rust-rules/name-iter-method.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/name-iter-type-match.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/name-lifetime-short.md +0 -86
- package/template/agent/skills/rust-developer/references/rust-rules/name-no-get-prefix.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/name-to-expensive.md +0 -118
- package/template/agent/skills/rust-developer/references/rust-rules/name-type-param-single.md +0 -92
- package/template/agent/skills/rust-developer/references/rust-rules/name-types-camel.md +0 -65
- package/template/agent/skills/rust-developer/references/rust-rules/name-variants-camel.md +0 -101
- package/template/agent/skills/rust-developer/references/rust-rules/opt-bounds-check.md +0 -161
- package/template/agent/skills/rust-developer/references/rust-rules/opt-cache-friendly.md +0 -187
- package/template/agent/skills/rust-developer/references/rust-rules/opt-codegen-units.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/opt-cold-unlikely.md +0 -152
- package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-always-rare.md +0 -141
- package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-never-cold.md +0 -181
- package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-small.md +0 -160
- package/template/agent/skills/rust-developer/references/rust-rules/opt-likely-hint.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/opt-lto-release.md +0 -130
- package/template/agent/skills/rust-developer/references/rust-rules/opt-pgo-profile.md +0 -167
- package/template/agent/skills/rust-developer/references/rust-rules/opt-simd-portable.md +0 -144
- package/template/agent/skills/rust-developer/references/rust-rules/opt-target-cpu.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/own-arc-shared.md +0 -141
- package/template/agent/skills/rust-developer/references/rust-rules/own-borrow-over-clone.md +0 -95
- package/template/agent/skills/rust-developer/references/rust-rules/own-clone-explicit.md +0 -135
- package/template/agent/skills/rust-developer/references/rust-rules/own-copy-small.md +0 -124
- package/template/agent/skills/rust-developer/references/rust-rules/own-cow-conditional.md +0 -135
- package/template/agent/skills/rust-developer/references/rust-rules/own-lifetime-elision.md +0 -134
- package/template/agent/skills/rust-developer/references/rust-rules/own-move-large.md +0 -134
- package/template/agent/skills/rust-developer/references/rust-rules/own-mutex-interior.md +0 -105
- package/template/agent/skills/rust-developer/references/rust-rules/own-rc-single-thread.md +0 -65
- package/template/agent/skills/rust-developer/references/rust-rules/own-refcell-interior.md +0 -97
- package/template/agent/skills/rust-developer/references/rust-rules/own-rwlock-readers.md +0 -122
- package/template/agent/skills/rust-developer/references/rust-rules/own-slice-over-vec.md +0 -119
- package/template/agent/skills/rust-developer/references/rust-rules/perf-black-box-bench.md +0 -153
- package/template/agent/skills/rust-developer/references/rust-rules/perf-chain-avoid.md +0 -136
- package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-into.md +0 -133
- package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-once.md +0 -120
- package/template/agent/skills/rust-developer/references/rust-rules/perf-drain-reuse.md +0 -137
- package/template/agent/skills/rust-developer/references/rust-rules/perf-entry-api.md +0 -134
- package/template/agent/skills/rust-developer/references/rust-rules/perf-extend-batch.md +0 -150
- package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-lazy.md +0 -123
- package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-over-index.md +0 -113
- package/template/agent/skills/rust-developer/references/rust-rules/perf-profile-first.md +0 -175
- package/template/agent/skills/rust-developer/references/rust-rules/perf-release-profile.md +0 -149
- package/template/agent/skills/rust-developer/references/rust-rules/proj-bin-dir.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/proj-flat-small.md +0 -133
- package/template/agent/skills/rust-developer/references/rust-rules/proj-lib-main-split.md +0 -148
- package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-by-feature.md +0 -130
- package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-rs-dir.md +0 -120
- package/template/agent/skills/rust-developer/references/rust-rules/proj-prelude-module.md +0 -155
- package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-crate-internal.md +0 -139
- package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-super-parent.md +0 -135
- package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-use-reexport.md +0 -162
- package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-deps.md +0 -186
- package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-large.md +0 -162
- package/template/agent/skills/rust-developer/references/rust-rules/test-arrange-act-assert.md +0 -160
- package/template/agent/skills/rust-developer/references/rust-rules/test-cfg-test-module.md +0 -151
- package/template/agent/skills/rust-developer/references/rust-rules/test-criterion-bench.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/test-descriptive-names.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/test-doctest-examples.md +0 -168
- package/template/agent/skills/rust-developer/references/rust-rules/test-fixture-raii.md +0 -151
- package/template/agent/skills/rust-developer/references/rust-rules/test-integration-dir.md +0 -144
- package/template/agent/skills/rust-developer/references/rust-rules/test-mock-traits.md +0 -189
- package/template/agent/skills/rust-developer/references/rust-rules/test-mockall-mocking.md +0 -226
- package/template/agent/skills/rust-developer/references/rust-rules/test-proptest-properties.md +0 -161
- package/template/agent/skills/rust-developer/references/rust-rules/test-should-panic.md +0 -130
- package/template/agent/skills/rust-developer/references/rust-rules/test-tokio-async.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/test-use-super.md +0 -127
- package/template/agent/skills/rust-developer/references/rust-rules/type-enum-states.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/type-generic-bounds.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/type-never-diverge.md +0 -146
- package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-ids.md +0 -160
- package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-validated.md +0 -159
- package/template/agent/skills/rust-developer/references/rust-rules/type-no-stringly.md +0 -144
- package/template/agent/skills/rust-developer/references/rust-rules/type-option-nullable.md +0 -137
- package/template/agent/skills/rust-developer/references/rust-rules/type-phantom-marker.md +0 -188
- package/template/agent/skills/rust-developer/references/rust-rules/type-repr-transparent.md +0 -143
- package/template/agent/skills/rust-developer/references/rust-rules/type-result-fallible.md +0 -131
- package/template/agent/skills/saas-architect/SKILL.md +0 -139
- package/template/agent/skills/security-engineer/SKILL.md +0 -133
- package/template/agent/skills/seo-specialist/SKILL.md +0 -130
- package/template/agent/skills/solo-founder-ops/SKILL.md +0 -56
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
# doc-all-public
|
|
2
|
-
|
|
3
|
-
> Document all public items with `///` doc comments
|
|
4
|
-
|
|
5
|
-
## Why It Matters
|
|
6
|
-
|
|
7
|
-
Public items define your crate's API contract. Without documentation, users must read source code to understand how to use your library. Well-documented APIs reduce support burden, improve adoption, and serve as the primary reference for users.
|
|
8
|
-
|
|
9
|
-
Rust's `cargo doc` generates beautiful HTML documentation from doc comments, but only if you write them.
|
|
10
|
-
|
|
11
|
-
## Bad
|
|
12
|
-
|
|
13
|
-
```rust
|
|
14
|
-
pub struct Config {
|
|
15
|
-
pub timeout: Duration,
|
|
16
|
-
pub retries: u32,
|
|
17
|
-
pub base_url: String,
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
pub fn connect(config: Config) -> Result<Connection, Error> {
|
|
21
|
-
// ...
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
pub enum Status {
|
|
25
|
-
Pending,
|
|
26
|
-
Active,
|
|
27
|
-
Failed,
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Good
|
|
32
|
-
|
|
33
|
-
```rust
|
|
34
|
-
/// Configuration for establishing a connection to the service.
|
|
35
|
-
///
|
|
36
|
-
/// # Examples
|
|
37
|
-
///
|
|
38
|
-
/// ```
|
|
39
|
-
/// use my_crate::Config;
|
|
40
|
-
/// use std::time::Duration;
|
|
41
|
-
///
|
|
42
|
-
/// let config = Config {
|
|
43
|
-
/// timeout: Duration::from_secs(30),
|
|
44
|
-
/// retries: 3,
|
|
45
|
-
/// base_url: "https://api.example.com".to_string(),
|
|
46
|
-
/// };
|
|
47
|
-
/// ```
|
|
48
|
-
pub struct Config {
|
|
49
|
-
/// Maximum time to wait for a response before timing out.
|
|
50
|
-
pub timeout: Duration,
|
|
51
|
-
|
|
52
|
-
/// Number of retry attempts for failed requests.
|
|
53
|
-
pub retries: u32,
|
|
54
|
-
|
|
55
|
-
/// Base URL for all API requests.
|
|
56
|
-
pub base_url: String,
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/// Establishes a connection using the provided configuration.
|
|
60
|
-
///
|
|
61
|
-
/// # Errors
|
|
62
|
-
///
|
|
63
|
-
/// Returns an error if the connection cannot be established
|
|
64
|
-
/// or if the configuration is invalid.
|
|
65
|
-
pub fn connect(config: Config) -> Result<Connection, Error> {
|
|
66
|
-
// ...
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/// Represents the current status of a job.
|
|
70
|
-
pub enum Status {
|
|
71
|
-
/// Job is waiting to be processed.
|
|
72
|
-
Pending,
|
|
73
|
-
/// Job is currently being processed.
|
|
74
|
-
Active,
|
|
75
|
-
/// Job has failed and will not be retried.
|
|
76
|
-
Failed,
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## What to Document
|
|
81
|
-
|
|
82
|
-
| Item Type | Required Content |
|
|
83
|
-
|-----------|------------------|
|
|
84
|
-
| Structs | Purpose, usage example |
|
|
85
|
-
| Struct fields | What the field represents |
|
|
86
|
-
| Enums | When to use each variant |
|
|
87
|
-
| Enum variants | What state it represents |
|
|
88
|
-
| Functions | What it does, parameters, return value |
|
|
89
|
-
| Traits | Contract and expected behavior |
|
|
90
|
-
| Trait methods | Default implementation behavior |
|
|
91
|
-
| Type aliases | Why the alias exists |
|
|
92
|
-
| Constants | What the value represents |
|
|
93
|
-
|
|
94
|
-
## Enforcement
|
|
95
|
-
|
|
96
|
-
Enable the `missing_docs` lint to catch undocumented public items:
|
|
97
|
-
|
|
98
|
-
```rust
|
|
99
|
-
#![warn(missing_docs)]
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Or in `Cargo.toml` for workspace-wide enforcement:
|
|
103
|
-
|
|
104
|
-
```toml
|
|
105
|
-
[workspace.lints.rust]
|
|
106
|
-
missing_docs = "warn"
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## See Also
|
|
110
|
-
|
|
111
|
-
- [doc-module-inner](./doc-module-inner.md) - Module-level documentation
|
|
112
|
-
- [doc-examples-section](./doc-examples-section.md) - Adding examples
|
|
113
|
-
- [lint-missing-docs](./lint-missing-docs.md) - Enforcing documentation
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
# doc-cargo-metadata
|
|
2
|
-
|
|
3
|
-
> Fill `Cargo.toml` metadata for published crates
|
|
4
|
-
|
|
5
|
-
## Why It Matters
|
|
6
|
-
|
|
7
|
-
Cargo.toml metadata appears on crates.io, in search results, and helps users evaluate your crate. Missing metadata makes your crate look unprofessional, harder to find, and harder to trust. Complete metadata improves discoverability and adoption.
|
|
8
|
-
|
|
9
|
-
## Bad
|
|
10
|
-
|
|
11
|
-
```toml
|
|
12
|
-
[package]
|
|
13
|
-
name = "my-awesome-crate"
|
|
14
|
-
version = "0.1.0"
|
|
15
|
-
edition = "2021"
|
|
16
|
-
|
|
17
|
-
[dependencies]
|
|
18
|
-
# ...
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Good
|
|
22
|
-
|
|
23
|
-
```toml
|
|
24
|
-
[package]
|
|
25
|
-
name = "my-awesome-crate"
|
|
26
|
-
version = "0.1.0"
|
|
27
|
-
edition = "2021"
|
|
28
|
-
rust-version = "1.70"
|
|
29
|
-
|
|
30
|
-
# Required for crates.io
|
|
31
|
-
description = "A fast, ergonomic HTTP client for Rust"
|
|
32
|
-
license = "MIT OR Apache-2.0"
|
|
33
|
-
repository = "https://github.com/username/my-awesome-crate"
|
|
34
|
-
|
|
35
|
-
# Highly recommended
|
|
36
|
-
documentation = "https://docs.rs/my-awesome-crate"
|
|
37
|
-
readme = "README.md"
|
|
38
|
-
keywords = ["http", "client", "async", "networking"]
|
|
39
|
-
categories = ["network-programming", "web-programming::http-client"]
|
|
40
|
-
authors = ["Your Name <you@example.com>"]
|
|
41
|
-
homepage = "https://my-awesome-crate.dev"
|
|
42
|
-
|
|
43
|
-
# Optional but helpful
|
|
44
|
-
include = ["src/**/*", "Cargo.toml", "LICENSE*", "README.md"]
|
|
45
|
-
exclude = ["tests/fixtures/*", ".github/*"]
|
|
46
|
-
|
|
47
|
-
[badges]
|
|
48
|
-
maintenance = { status = "actively-developed" }
|
|
49
|
-
|
|
50
|
-
[dependencies]
|
|
51
|
-
# ...
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Required Fields for Publishing
|
|
55
|
-
|
|
56
|
-
| Field | Purpose |
|
|
57
|
-
|-------|---------|
|
|
58
|
-
| `name` | Crate name on crates.io |
|
|
59
|
-
| `version` | Semver version |
|
|
60
|
-
| `license` or `license-file` | SPDX license identifier |
|
|
61
|
-
| `description` | One-line summary (≤256 chars) |
|
|
62
|
-
|
|
63
|
-
## Recommended Fields
|
|
64
|
-
|
|
65
|
-
| Field | Purpose | Example |
|
|
66
|
-
|-------|---------|---------|
|
|
67
|
-
| `repository` | Link to source code | `https://github.com/user/repo` |
|
|
68
|
-
| `documentation` | Link to docs | `https://docs.rs/crate` |
|
|
69
|
-
| `readme` | Path to README | `README.md` |
|
|
70
|
-
| `keywords` | Search terms (max 5) | `["http", "async"]` |
|
|
71
|
-
| `categories` | crates.io categories | `["network-programming"]` |
|
|
72
|
-
| `rust-version` | MSRV | `"1.70"` |
|
|
73
|
-
|
|
74
|
-
## Keywords Best Practices
|
|
75
|
-
|
|
76
|
-
```toml
|
|
77
|
-
# Good: specific, searchable terms
|
|
78
|
-
keywords = ["json", "serialization", "serde", "parsing"]
|
|
79
|
-
|
|
80
|
-
# Bad: too generic or redundant
|
|
81
|
-
keywords = ["rust", "library", "awesome", "fast", "best"]
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Categories
|
|
85
|
-
|
|
86
|
-
Choose from [crates.io categories](https://crates.io/category_slugs):
|
|
87
|
-
|
|
88
|
-
```toml
|
|
89
|
-
categories = [
|
|
90
|
-
"network-programming",
|
|
91
|
-
"web-programming::http-client",
|
|
92
|
-
"asynchronous",
|
|
93
|
-
]
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## License Patterns
|
|
97
|
-
|
|
98
|
-
```toml
|
|
99
|
-
# Single license
|
|
100
|
-
license = "MIT"
|
|
101
|
-
|
|
102
|
-
# Dual license (common in Rust ecosystem)
|
|
103
|
-
license = "MIT OR Apache-2.0"
|
|
104
|
-
|
|
105
|
-
# Custom license file
|
|
106
|
-
license-file = "LICENSE"
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Include/Exclude
|
|
110
|
-
|
|
111
|
-
Control what gets published:
|
|
112
|
-
|
|
113
|
-
```toml
|
|
114
|
-
# Explicit include (whitelist)
|
|
115
|
-
include = [
|
|
116
|
-
"src/**/*",
|
|
117
|
-
"Cargo.toml",
|
|
118
|
-
"LICENSE*",
|
|
119
|
-
"README.md",
|
|
120
|
-
"CHANGELOG.md",
|
|
121
|
-
]
|
|
122
|
-
|
|
123
|
-
# Or exclude (blacklist)
|
|
124
|
-
exclude = [
|
|
125
|
-
"tests/fixtures/large-file.bin",
|
|
126
|
-
".github/*",
|
|
127
|
-
"benches/*",
|
|
128
|
-
]
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
## Verification
|
|
132
|
-
|
|
133
|
-
Check your package before publishing:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
# See what will be included
|
|
137
|
-
cargo package --list
|
|
138
|
-
|
|
139
|
-
# Check metadata
|
|
140
|
-
cargo publish --dry-run
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## See Also
|
|
144
|
-
|
|
145
|
-
- [doc-module-inner](./doc-module-inner.md) - Crate-level documentation
|
|
146
|
-
- [lint-cargo-metadata](./lint-cargo-metadata.md) - Linting Cargo.toml
|
|
147
|
-
- [proj-workspace-deps](./proj-workspace-deps.md) - Workspace management
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
# doc-errors-section
|
|
2
|
-
|
|
3
|
-
> Include `# Errors` section for fallible functions
|
|
4
|
-
|
|
5
|
-
## Why It Matters
|
|
6
|
-
|
|
7
|
-
Functions returning `Result` can fail in specific, documented ways. The `# Errors` section tells users exactly when and why a function might return an error, enabling them to handle failures appropriately without reading source code.
|
|
8
|
-
|
|
9
|
-
This is especially critical for library code where users cannot easily inspect implementation details.
|
|
10
|
-
|
|
11
|
-
## Bad
|
|
12
|
-
|
|
13
|
-
```rust
|
|
14
|
-
/// Opens a file and reads its contents.
|
|
15
|
-
pub fn read_file(path: &Path) -> Result<String, Error> {
|
|
16
|
-
// Users have no idea what errors to expect
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/// Connects to the database.
|
|
20
|
-
pub async fn connect(url: &str) -> Result<Connection, DbError> {
|
|
21
|
-
// Multiple failure modes, none documented
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Good
|
|
26
|
-
|
|
27
|
-
```rust
|
|
28
|
-
/// Opens a file and reads its contents as a UTF-8 string.
|
|
29
|
-
///
|
|
30
|
-
/// # Errors
|
|
31
|
-
///
|
|
32
|
-
/// Returns an error if:
|
|
33
|
-
/// - The file does not exist ([`Error::NotFound`])
|
|
34
|
-
/// - The process lacks permission to read the file ([`Error::PermissionDenied`])
|
|
35
|
-
/// - The file contains invalid UTF-8 ([`Error::InvalidUtf8`])
|
|
36
|
-
pub fn read_file(path: &Path) -> Result<String, Error> {
|
|
37
|
-
// ...
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/// Establishes a connection to the database.
|
|
41
|
-
///
|
|
42
|
-
/// # Errors
|
|
43
|
-
///
|
|
44
|
-
/// This function will return an error if:
|
|
45
|
-
/// - The URL is malformed ([`DbError::InvalidUrl`])
|
|
46
|
-
/// - The database server is unreachable ([`DbError::ConnectionFailed`])
|
|
47
|
-
/// - Authentication fails ([`DbError::AuthenticationFailed`])
|
|
48
|
-
/// - The connection pool is exhausted ([`DbError::PoolExhausted`])
|
|
49
|
-
pub async fn connect(url: &str) -> Result<Connection, DbError> {
|
|
50
|
-
// ...
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Error Documentation Patterns
|
|
55
|
-
|
|
56
|
-
### Simple Single Error
|
|
57
|
-
|
|
58
|
-
```rust
|
|
59
|
-
/// Parses a string as an integer.
|
|
60
|
-
///
|
|
61
|
-
/// # Errors
|
|
62
|
-
///
|
|
63
|
-
/// Returns [`ParseIntError`] if the string is not a valid integer.
|
|
64
|
-
pub fn parse_int(s: &str) -> Result<i64, ParseIntError> {
|
|
65
|
-
s.parse()
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### Multiple Error Variants
|
|
70
|
-
|
|
71
|
-
```rust
|
|
72
|
-
/// Sends an HTTP request and returns the response.
|
|
73
|
-
///
|
|
74
|
-
/// # Errors
|
|
75
|
-
///
|
|
76
|
-
/// | Error | Condition |
|
|
77
|
-
/// |-------|-----------|
|
|
78
|
-
/// | [`HttpError::Timeout`] | Request exceeded timeout duration |
|
|
79
|
-
/// | [`HttpError::InvalidUrl`] | URL could not be parsed |
|
|
80
|
-
/// | [`HttpError::ConnectionRefused`] | Server refused connection |
|
|
81
|
-
/// | [`HttpError::TlsError`] | TLS handshake failed |
|
|
82
|
-
pub fn send(request: Request) -> Result<Response, HttpError> {
|
|
83
|
-
// ...
|
|
84
|
-
}
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Propagated Errors
|
|
88
|
-
|
|
89
|
-
```rust
|
|
90
|
-
/// Loads configuration from a file.
|
|
91
|
-
///
|
|
92
|
-
/// # Errors
|
|
93
|
-
///
|
|
94
|
-
/// Returns an error if:
|
|
95
|
-
/// - The configuration file cannot be read (IO error)
|
|
96
|
-
/// - The file contains invalid TOML syntax
|
|
97
|
-
/// - Required fields are missing from the configuration
|
|
98
|
-
///
|
|
99
|
-
/// The underlying error is wrapped with context about which
|
|
100
|
-
/// configuration file failed to load.
|
|
101
|
-
pub fn load_config(path: &Path) -> Result<Config, anyhow::Error> {
|
|
102
|
-
// ...
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## Linking to Error Types
|
|
107
|
-
|
|
108
|
-
Use intra-doc links to connect error variants to their definitions:
|
|
109
|
-
|
|
110
|
-
```rust
|
|
111
|
-
/// # Errors
|
|
112
|
-
///
|
|
113
|
-
/// Returns [`ValidationError::TooShort`] if the input is less than
|
|
114
|
-
/// the minimum length, or [`ValidationError::InvalidChars`] if it
|
|
115
|
-
/// contains forbidden characters.
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## See Also
|
|
119
|
-
|
|
120
|
-
- [doc-panics-section](./doc-panics-section.md) - Documenting panics
|
|
121
|
-
- [err-doc-errors](./err-doc-errors.md) - Error documentation patterns
|
|
122
|
-
- [doc-intra-links](./doc-intra-links.md) - Linking to types
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
# doc-examples-section
|
|
2
|
-
|
|
3
|
-
> Include `# Examples` with runnable code
|
|
4
|
-
|
|
5
|
-
## Why It Matters
|
|
6
|
-
|
|
7
|
-
Examples are the most valuable part of documentation. They show users exactly how to use your API. Rust's doc tests ensure examples stay correct as code evolves.
|
|
8
|
-
|
|
9
|
-
## Bad
|
|
10
|
-
|
|
11
|
-
```rust
|
|
12
|
-
/// Parses a string into a Foo.
|
|
13
|
-
pub fn parse(s: &str) -> Result<Foo, Error> {
|
|
14
|
-
// No examples - users have to guess usage
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/// A widget for doing things.
|
|
18
|
-
///
|
|
19
|
-
/// This widget is very useful.
|
|
20
|
-
pub struct Widget {
|
|
21
|
-
// Still no examples
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Good
|
|
26
|
-
|
|
27
|
-
```rust
|
|
28
|
-
/// Parses a string into a Foo.
|
|
29
|
-
///
|
|
30
|
-
/// # Examples
|
|
31
|
-
///
|
|
32
|
-
/// ```
|
|
33
|
-
/// use my_crate::parse;
|
|
34
|
-
///
|
|
35
|
-
/// let foo = parse("hello").unwrap();
|
|
36
|
-
/// assert_eq!(foo.name(), "hello");
|
|
37
|
-
/// ```
|
|
38
|
-
///
|
|
39
|
-
/// Handles empty strings:
|
|
40
|
-
///
|
|
41
|
-
/// ```
|
|
42
|
-
/// use my_crate::parse;
|
|
43
|
-
///
|
|
44
|
-
/// let foo = parse("").unwrap();
|
|
45
|
-
/// assert!(foo.is_empty());
|
|
46
|
-
/// ```
|
|
47
|
-
pub fn parse(s: &str) -> Result<Foo, Error> {
|
|
48
|
-
// ...
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Use ? Not unwrap()
|
|
53
|
-
|
|
54
|
-
```rust
|
|
55
|
-
/// Loads configuration from a file.
|
|
56
|
-
///
|
|
57
|
-
/// # Examples
|
|
58
|
-
///
|
|
59
|
-
/// ```
|
|
60
|
-
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
61
|
-
/// use my_crate::Config;
|
|
62
|
-
///
|
|
63
|
-
/// let config = Config::load("config.toml")?;
|
|
64
|
-
/// println!("Port: {}", config.port);
|
|
65
|
-
/// # Ok(())
|
|
66
|
-
/// # }
|
|
67
|
-
/// ```
|
|
68
|
-
pub fn load(path: &str) -> Result<Config, Error> {
|
|
69
|
-
// ...
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Hide Setup Code
|
|
74
|
-
|
|
75
|
-
```rust
|
|
76
|
-
/// Processes items from a database.
|
|
77
|
-
///
|
|
78
|
-
/// # Examples
|
|
79
|
-
///
|
|
80
|
-
/// ```
|
|
81
|
-
/// # use my_crate::{Database, Item};
|
|
82
|
-
/// # fn get_db() -> Database { Database::mock() }
|
|
83
|
-
/// let db = get_db();
|
|
84
|
-
/// let items = db.process_items()?;
|
|
85
|
-
/// assert!(!items.is_empty());
|
|
86
|
-
/// # Ok::<(), my_crate::Error>(())
|
|
87
|
-
/// ```
|
|
88
|
-
pub fn process_items(&self) -> Result<Vec<Item>, Error> {
|
|
89
|
-
// ...
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Multiple Examples
|
|
94
|
-
|
|
95
|
-
```rust
|
|
96
|
-
/// Creates a new buffer with the specified capacity.
|
|
97
|
-
///
|
|
98
|
-
/// # Examples
|
|
99
|
-
///
|
|
100
|
-
/// Basic usage:
|
|
101
|
-
///
|
|
102
|
-
/// ```
|
|
103
|
-
/// use my_crate::Buffer;
|
|
104
|
-
///
|
|
105
|
-
/// let buf = Buffer::with_capacity(1024);
|
|
106
|
-
/// assert_eq!(buf.capacity(), 1024);
|
|
107
|
-
/// ```
|
|
108
|
-
///
|
|
109
|
-
/// Zero capacity creates an empty buffer:
|
|
110
|
-
///
|
|
111
|
-
/// ```
|
|
112
|
-
/// use my_crate::Buffer;
|
|
113
|
-
///
|
|
114
|
-
/// let buf = Buffer::with_capacity(0);
|
|
115
|
-
/// assert!(buf.is_empty());
|
|
116
|
-
/// ```
|
|
117
|
-
pub fn with_capacity(cap: usize) -> Self {
|
|
118
|
-
// ...
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Show Error Cases
|
|
123
|
-
|
|
124
|
-
```rust
|
|
125
|
-
/// Divides two numbers.
|
|
126
|
-
///
|
|
127
|
-
/// # Examples
|
|
128
|
-
///
|
|
129
|
-
/// ```
|
|
130
|
-
/// use my_crate::divide;
|
|
131
|
-
///
|
|
132
|
-
/// assert_eq!(divide(10, 2), Ok(5));
|
|
133
|
-
/// ```
|
|
134
|
-
///
|
|
135
|
-
/// Division by zero returns an error:
|
|
136
|
-
///
|
|
137
|
-
/// ```
|
|
138
|
-
/// use my_crate::{divide, MathError};
|
|
139
|
-
///
|
|
140
|
-
/// assert_eq!(divide(10, 0), Err(MathError::DivisionByZero));
|
|
141
|
-
/// ```
|
|
142
|
-
pub fn divide(a: i32, b: i32) -> Result<i32, MathError> {
|
|
143
|
-
// ...
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## Running Doc Tests
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
# Run all doc tests
|
|
151
|
-
cargo test --doc
|
|
152
|
-
|
|
153
|
-
# Run doc tests for specific item
|
|
154
|
-
cargo test --doc my_function
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## See Also
|
|
158
|
-
|
|
159
|
-
- [doc-question-mark](doc-question-mark.md) - Use ? in examples
|
|
160
|
-
- [doc-hidden-setup](doc-hidden-setup.md) - Hide setup code with #
|
|
161
|
-
- [doc-errors-section](doc-errors-section.md) - Document error conditions
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# doc-hidden-setup
|
|
2
|
-
|
|
3
|
-
> Use `# ` prefix to hide example setup code
|
|
4
|
-
|
|
5
|
-
## Why It Matters
|
|
6
|
-
|
|
7
|
-
Doc examples often require setup code (imports, struct initialization, mock data) that distracts from the main point. The `# ` prefix hides lines from rendered documentation while keeping them in the compiled test, showing users only the relevant code.
|
|
8
|
-
|
|
9
|
-
This keeps examples focused and readable while ensuring they still compile and run.
|
|
10
|
-
|
|
11
|
-
## Bad
|
|
12
|
-
|
|
13
|
-
```rust
|
|
14
|
-
/// Processes a batch of items.
|
|
15
|
-
///
|
|
16
|
-
/// # Examples
|
|
17
|
-
///
|
|
18
|
-
/// ```
|
|
19
|
-
/// use my_crate::{Processor, Config, Item};
|
|
20
|
-
/// use std::sync::Arc;
|
|
21
|
-
///
|
|
22
|
-
/// let config = Config {
|
|
23
|
-
/// batch_size: 100,
|
|
24
|
-
/// timeout_ms: 5000,
|
|
25
|
-
/// retry_count: 3,
|
|
26
|
-
/// };
|
|
27
|
-
/// let processor = Processor::new(Arc::new(config));
|
|
28
|
-
/// let items = vec![
|
|
29
|
-
/// Item::new("a"),
|
|
30
|
-
/// Item::new("b"),
|
|
31
|
-
/// Item::new("c"),
|
|
32
|
-
/// ];
|
|
33
|
-
///
|
|
34
|
-
/// // This is the actual example - buried after 15 lines of setup
|
|
35
|
-
/// let results = processor.process_batch(&items)?;
|
|
36
|
-
/// assert!(results.all_succeeded());
|
|
37
|
-
/// # Ok::<(), my_crate::Error>(())
|
|
38
|
-
/// ```
|
|
39
|
-
pub fn process_batch(&self, items: &[Item]) -> Result<Results, Error> {
|
|
40
|
-
// ...
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Good
|
|
45
|
-
|
|
46
|
-
```rust
|
|
47
|
-
/// Processes a batch of items.
|
|
48
|
-
///
|
|
49
|
-
/// # Examples
|
|
50
|
-
///
|
|
51
|
-
/// ```
|
|
52
|
-
/// # use my_crate::{Processor, Config, Item, Error};
|
|
53
|
-
/// # use std::sync::Arc;
|
|
54
|
-
/// # let config = Config { batch_size: 100, timeout_ms: 5000, retry_count: 3 };
|
|
55
|
-
/// # let processor = Processor::new(Arc::new(config));
|
|
56
|
-
/// # let items = vec![Item::new("a"), Item::new("b"), Item::new("c")];
|
|
57
|
-
/// let results = processor.process_batch(&items)?;
|
|
58
|
-
/// assert!(results.all_succeeded());
|
|
59
|
-
/// # Ok::<(), Error>(())
|
|
60
|
-
/// ```
|
|
61
|
-
pub fn process_batch(&self, items: &[Item]) -> Result<Results, Error> {
|
|
62
|
-
// ...
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Users see only:
|
|
67
|
-
|
|
68
|
-
```rust
|
|
69
|
-
let results = processor.process_batch(&items)?;
|
|
70
|
-
assert!(results.all_succeeded());
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## What to Hide
|
|
74
|
-
|
|
75
|
-
| Hide | Show |
|
|
76
|
-
|------|------|
|
|
77
|
-
| `use` statements | Core API usage |
|
|
78
|
-
| Type definitions | Method calls |
|
|
79
|
-
| Mock/test data setup | Key parameters |
|
|
80
|
-
| Error handling boilerplate | Return value handling |
|
|
81
|
-
| `Ok(())` return | Assertions (sometimes) |
|
|
82
|
-
|
|
83
|
-
## Pattern: Hiding Multi-Line Setup
|
|
84
|
-
|
|
85
|
-
```rust
|
|
86
|
-
/// # Examples
|
|
87
|
-
///
|
|
88
|
-
/// ```
|
|
89
|
-
/// # use my_crate::{Client, Request};
|
|
90
|
-
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
91
|
-
/// # let client = Client::builder()
|
|
92
|
-
/// # .timeout(30)
|
|
93
|
-
/// # .retry(3)
|
|
94
|
-
/// # .build()?;
|
|
95
|
-
/// let response = client.send(Request::get("/users"))?;
|
|
96
|
-
/// println!("Status: {}", response.status());
|
|
97
|
-
/// # Ok(())
|
|
98
|
-
/// # }
|
|
99
|
-
/// ```
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## Pattern: Showing Setup When Relevant
|
|
103
|
-
|
|
104
|
-
Sometimes setup IS the point—don't hide it:
|
|
105
|
-
|
|
106
|
-
```rust
|
|
107
|
-
/// Creates a new client with custom configuration.
|
|
108
|
-
///
|
|
109
|
-
/// # Examples
|
|
110
|
-
///
|
|
111
|
-
/// ```
|
|
112
|
-
/// use my_crate::Client;
|
|
113
|
-
///
|
|
114
|
-
/// // Configuration IS the example - show it
|
|
115
|
-
/// let client = Client::builder()
|
|
116
|
-
/// .base_url("https://api.example.com")
|
|
117
|
-
/// .timeout_secs(30)
|
|
118
|
-
/// .max_retries(3)
|
|
119
|
-
/// .build()?;
|
|
120
|
-
/// # Ok::<(), my_crate::Error>(())
|
|
121
|
-
/// ```
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## Pattern: `ignore` and `no_run`
|
|
125
|
-
|
|
126
|
-
For examples that shouldn't run in tests:
|
|
127
|
-
|
|
128
|
-
```rust
|
|
129
|
-
/// # Examples
|
|
130
|
-
///
|
|
131
|
-
/// ```no_run
|
|
132
|
-
/// # use my_crate::Server;
|
|
133
|
-
/// // This would actually start a server - don't run in tests
|
|
134
|
-
/// let server = Server::bind("0.0.0.0:8080").await?;
|
|
135
|
-
/// server.run().await?;
|
|
136
|
-
/// # Ok::<(), my_crate::Error>(())
|
|
137
|
-
/// ```
|
|
138
|
-
|
|
139
|
-
/// ```ignore
|
|
140
|
-
/// // Pseudocode or incomplete example
|
|
141
|
-
/// let magic = do_something_undefined();
|
|
142
|
-
/// ```
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## See Also
|
|
146
|
-
|
|
147
|
-
- [doc-examples-section](./doc-examples-section.md) - Writing examples
|
|
148
|
-
- [doc-question-mark](./doc-question-mark.md) - Using `?` in examples
|
|
149
|
-
- [test-doctest-examples](./test-doctest-examples.md) - Doctests as tests
|