agy-superpowers 5.2.1 → 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/patches/skills-patches.md +23 -0
- package/template/agent/rules/scratch-scripts.md +37 -0
- package/template/agent/rules/superpowers.md +6 -50
- package/template/agent/skills/brainstorming/SKILL.md +4 -3
- package/template/agent/skills/brainstorming/visual-companion.md +2 -3
- package/template/agent/skills/finishing-a-development-branch/SKILL.md +11 -16
- package/template/agent/skills/subagent-driven-development/SKILL.md +16 -0
- package/template/agent/skills/subagent-driven-development/implementer-prompt.md +4 -3
- package/template/agent/skills/using-git-worktrees/SKILL.md +3 -2
- package/template/agent/skills/using-superpowers/SKILL.md +8 -6
- package/template/agent/skills/using-superpowers/references/copilot-tools.md +52 -0
- package/template/agent/skills/writing-plans/SKILL.md +5 -3
- package/template/agent/skills/writing-skills/SKILL.md +1 -1
- package/template/agent/superpowers-version.json +2 -2
- package/template/agent/tmp/agent-config-backup.yml +9 -0
- 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,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
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
# doc-intra-links
|
|
2
|
-
|
|
3
|
-
> Use intra-doc links to reference types and items
|
|
4
|
-
|
|
5
|
-
## Why It Matters
|
|
6
|
-
|
|
7
|
-
Intra-doc links (`[TypeName]`, `[method](Self::method)`) create clickable references in generated documentation. They're verified at doc-build time, catching broken links early. Unlike URL links, they automatically update when items are renamed or moved.
|
|
8
|
-
|
|
9
|
-
## Bad
|
|
10
|
-
|
|
11
|
-
```rust
|
|
12
|
-
/// Returns the length of the buffer.
|
|
13
|
-
///
|
|
14
|
-
/// See also `capacity()` for the allocated size, and the
|
|
15
|
-
/// `Buffer` struct for more details.
|
|
16
|
-
pub fn len(&self) -> usize {
|
|
17
|
-
self.data.len()
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/// Parses the input using std::str::FromStr trait.
|
|
21
|
-
/// Check the Error enum for possible failures.
|
|
22
|
-
pub fn parse<T: FromStr>(input: &str) -> Result<T, Error> {
|
|
23
|
-
// ...
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Good
|
|
28
|
-
|
|
29
|
-
```rust
|
|
30
|
-
/// Returns the length of the buffer.
|
|
31
|
-
///
|
|
32
|
-
/// See also [`capacity()`](Self::capacity) for the allocated size, and
|
|
33
|
-
/// [`Buffer`] for more details.
|
|
34
|
-
pub fn len(&self) -> usize {
|
|
35
|
-
self.data.len()
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/// Parses the input using [`FromStr`] trait.
|
|
39
|
-
/// Check [`Error`] for possible failures.
|
|
40
|
-
///
|
|
41
|
-
/// [`FromStr`]: std::str::FromStr
|
|
42
|
-
pub fn parse<T: FromStr>(input: &str) -> Result<T, Error> {
|
|
43
|
-
// ...
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Link Syntax
|
|
48
|
-
|
|
49
|
-
| Syntax | Links To | Example |
|
|
50
|
-
|--------|----------|---------|
|
|
51
|
-
| `[Name]` | Item in scope | `[Vec]`, `[Option]` |
|
|
52
|
-
| `[path::Name]` | Fully qualified item | `[std::vec::Vec]` |
|
|
53
|
-
| `[Self::method]` | Method on current type | `[Self::new]` |
|
|
54
|
-
| `[Type::method]` | Method on other type | `[String::new]` |
|
|
55
|
-
| `[Type::CONST]` | Associated constant | `[usize::MAX]` |
|
|
56
|
-
| `[text](path)` | Custom text | `[see here](Self::len)` |
|
|
57
|
-
|
|
58
|
-
## Common Patterns
|
|
59
|
-
|
|
60
|
-
### Linking to Self Members
|
|
61
|
-
|
|
62
|
-
```rust
|
|
63
|
-
impl Buffer {
|
|
64
|
-
/// Creates an empty buffer.
|
|
65
|
-
///
|
|
66
|
-
/// Use [`with_capacity`](Self::with_capacity) if you know the size.
|
|
67
|
-
pub fn new() -> Self { /* ... */ }
|
|
68
|
-
|
|
69
|
-
/// Creates a buffer with pre-allocated capacity.
|
|
70
|
-
///
|
|
71
|
-
/// See [`new`](Self::new) for the default constructor.
|
|
72
|
-
pub fn with_capacity(cap: usize) -> Self { /* ... */ }
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Linking to Trait Methods
|
|
77
|
-
|
|
78
|
-
```rust
|
|
79
|
-
/// Converts to a string representation.
|
|
80
|
-
///
|
|
81
|
-
/// This is the implementation of [`Display::fmt`](std::fmt::Display::fmt).
|
|
82
|
-
impl Display for MyType {
|
|
83
|
-
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
|
84
|
-
// ...
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Disambiguation
|
|
90
|
-
|
|
91
|
-
When names conflict, use suffixes:
|
|
92
|
-
|
|
93
|
-
```rust
|
|
94
|
-
/// See [`foo()`](fn@foo) for the function and [`foo`](mod@foo) for the module.
|
|
95
|
-
|
|
96
|
-
/// Works with [`Error`](struct@Error) struct or [`Error`](trait@Error) trait.
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
| Suffix | Item Type |
|
|
100
|
-
|--------|-----------|
|
|
101
|
-
| `fn@` | Function |
|
|
102
|
-
| `mod@` | Module |
|
|
103
|
-
| `struct@` | Struct |
|
|
104
|
-
| `enum@` | Enum |
|
|
105
|
-
| `trait@` | Trait |
|
|
106
|
-
| `type@` | Type alias |
|
|
107
|
-
| `const@` | Constant |
|
|
108
|
-
| `macro@` | Macro |
|
|
109
|
-
|
|
110
|
-
### Reference-Style Links
|
|
111
|
-
|
|
112
|
-
For repeated links or long paths:
|
|
113
|
-
|
|
114
|
-
```rust
|
|
115
|
-
/// Parses using [`serde`] with [`Deserialize`] trait.
|
|
116
|
-
/// Returns a [`Result`] that may contain [`Error`].
|
|
117
|
-
///
|
|
118
|
-
/// [`serde`]: https://serde.rs
|
|
119
|
-
/// [`Deserialize`]: serde::Deserialize
|
|
120
|
-
/// [`Result`]: std::result::Result
|
|
121
|
-
/// [`Error`]: crate::Error
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## Verification
|
|
125
|
-
|
|
126
|
-
Enable link checking in CI:
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
This fails if any intra-doc links are broken.
|
|
133
|
-
|
|
134
|
-
## See Also
|
|
135
|
-
|
|
136
|
-
- [doc-all-public](./doc-all-public.md) - Documenting public items
|
|
137
|
-
- [doc-examples-section](./doc-examples-section.md) - Adding examples
|
|
138
|
-
- [doc-errors-section](./doc-errors-section.md) - Documenting errors
|