agy-superpowers 5.2.2 → 5.2.4

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.
Files changed (231) hide show
  1. package/README.md +47 -150
  2. package/package.json +1 -1
  3. package/template/agent/rules/CLAUDE.md +80 -0
  4. package/template/agent/rules/code-styles.md +31 -32
  5. package/template/agent/rules/debug-confirmation-policy.md +2 -0
  6. package/template/agent/rules/file-length-policy.md +2 -0
  7. package/template/agent/rules/git-policy.md +7 -0
  8. package/template/agent/rules/language-matching.md +2 -0
  9. package/template/agent/rules/scratch-scripts.md +39 -0
  10. package/template/agent/rules/superpowers.md +8 -51
  11. package/template/agent/skills/executing-plans/SKILL.md +17 -0
  12. package/template/agent/skills/systematic-debugging/SKILL.md +16 -0
  13. package/template/agent/skills/test-driven-development/SKILL.md +16 -0
  14. package/template/agent/skills/verification-before-completion/SKILL.md +22 -0
  15. package/template/agent/skills/writing-plans/SKILL.md +16 -0
  16. package/template/agent/skills/ai-integrated-product/SKILL.md +0 -57
  17. package/template/agent/skills/analytics-setup/SKILL.md +0 -51
  18. package/template/agent/skills/api-design/SKILL.md +0 -193
  19. package/template/agent/skills/app-store-optimizer/SKILL.md +0 -127
  20. package/template/agent/skills/auth-and-identity/SKILL.md +0 -167
  21. package/template/agent/skills/backend-developer/SKILL.md +0 -148
  22. package/template/agent/skills/bootstrapper-finance/SKILL.md +0 -55
  23. package/template/agent/skills/chrome-extension-developer/SKILL.md +0 -53
  24. package/template/agent/skills/community-manager/SKILL.md +0 -115
  25. package/template/agent/skills/content-marketer/SKILL.md +0 -111
  26. package/template/agent/skills/conversion-optimizer/SKILL.md +0 -142
  27. package/template/agent/skills/cto-architect/SKILL.md +0 -133
  28. package/template/agent/skills/customer-success-manager/SKILL.md +0 -126
  29. package/template/agent/skills/data-analyst/SKILL.md +0 -147
  30. package/template/agent/skills/devops-engineer/SKILL.md +0 -117
  31. package/template/agent/skills/email-infrastructure/SKILL.md +0 -164
  32. package/template/agent/skills/game-design/SKILL.md +0 -194
  33. package/template/agent/skills/game-developer/SKILL.md +0 -175
  34. package/template/agent/skills/growth-hacker/SKILL.md +0 -122
  35. package/template/agent/skills/idea-validator/SKILL.md +0 -55
  36. package/template/agent/skills/indie-legal/SKILL.md +0 -53
  37. package/template/agent/skills/influencer-marketer/SKILL.md +0 -141
  38. package/template/agent/skills/landing-page-builder/SKILL.md +0 -59
  39. package/template/agent/skills/launch-strategist/SKILL.md +0 -62
  40. package/template/agent/skills/market-researcher/SKILL.md +0 -53
  41. package/template/agent/skills/micro-saas-builder/SKILL.md +0 -56
  42. package/template/agent/skills/monetization-strategist/SKILL.md +0 -119
  43. package/template/agent/skills/paid-acquisition-specialist/SKILL.md +0 -119
  44. package/template/agent/skills/pricing-psychologist/SKILL.md +0 -58
  45. package/template/agent/skills/real-time-features/SKILL.md +0 -194
  46. package/template/agent/skills/retention-specialist/SKILL.md +0 -123
  47. package/template/agent/skills/rust-developer/SKILL.md +0 -281
  48. package/template/agent/skills/rust-developer/references/rust-rules/_sections.md +0 -231
  49. package/template/agent/skills/rust-developer/references/rust-rules/anti-clone-excessive.md +0 -124
  50. package/template/agent/skills/rust-developer/references/rust-rules/anti-collect-intermediate.md +0 -131
  51. package/template/agent/skills/rust-developer/references/rust-rules/anti-empty-catch.md +0 -132
  52. package/template/agent/skills/rust-developer/references/rust-rules/anti-expect-lazy.md +0 -95
  53. package/template/agent/skills/rust-developer/references/rust-rules/anti-format-hot-path.md +0 -141
  54. package/template/agent/skills/rust-developer/references/rust-rules/anti-index-over-iter.md +0 -125
  55. package/template/agent/skills/rust-developer/references/rust-rules/anti-lock-across-await.md +0 -127
  56. package/template/agent/skills/rust-developer/references/rust-rules/anti-over-abstraction.md +0 -120
  57. package/template/agent/skills/rust-developer/references/rust-rules/anti-panic-expected.md +0 -131
  58. package/template/agent/skills/rust-developer/references/rust-rules/anti-premature-optimize.md +0 -156
  59. package/template/agent/skills/rust-developer/references/rust-rules/anti-string-for-str.md +0 -122
  60. package/template/agent/skills/rust-developer/references/rust-rules/anti-stringly-typed.md +0 -167
  61. package/template/agent/skills/rust-developer/references/rust-rules/anti-type-erasure.md +0 -134
  62. package/template/agent/skills/rust-developer/references/rust-rules/anti-unwrap-abuse.md +0 -143
  63. package/template/agent/skills/rust-developer/references/rust-rules/anti-vec-for-slice.md +0 -121
  64. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-must-use.md +0 -143
  65. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-pattern.md +0 -187
  66. package/template/agent/skills/rust-developer/references/rust-rules/api-common-traits.md +0 -165
  67. package/template/agent/skills/rust-developer/references/rust-rules/api-default-impl.md +0 -177
  68. package/template/agent/skills/rust-developer/references/rust-rules/api-extension-trait.md +0 -163
  69. package/template/agent/skills/rust-developer/references/rust-rules/api-from-not-into.md +0 -146
  70. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-asref.md +0 -142
  71. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-into.md +0 -160
  72. package/template/agent/skills/rust-developer/references/rust-rules/api-must-use.md +0 -125
  73. package/template/agent/skills/rust-developer/references/rust-rules/api-newtype-safety.md +0 -162
  74. package/template/agent/skills/rust-developer/references/rust-rules/api-non-exhaustive.md +0 -177
  75. package/template/agent/skills/rust-developer/references/rust-rules/api-parse-dont-validate.md +0 -184
  76. package/template/agent/skills/rust-developer/references/rust-rules/api-sealed-trait.md +0 -168
  77. package/template/agent/skills/rust-developer/references/rust-rules/api-serde-optional.md +0 -182
  78. package/template/agent/skills/rust-developer/references/rust-rules/api-typestate.md +0 -199
  79. package/template/agent/skills/rust-developer/references/rust-rules/async-bounded-channel.md +0 -175
  80. package/template/agent/skills/rust-developer/references/rust-rules/async-broadcast-pubsub.md +0 -185
  81. package/template/agent/skills/rust-developer/references/rust-rules/async-cancellation-token.md +0 -203
  82. package/template/agent/skills/rust-developer/references/rust-rules/async-clone-before-await.md +0 -171
  83. package/template/agent/skills/rust-developer/references/rust-rules/async-join-parallel.md +0 -158
  84. package/template/agent/skills/rust-developer/references/rust-rules/async-joinset-structured.md +0 -195
  85. package/template/agent/skills/rust-developer/references/rust-rules/async-mpsc-queue.md +0 -171
  86. package/template/agent/skills/rust-developer/references/rust-rules/async-no-lock-await.md +0 -156
  87. package/template/agent/skills/rust-developer/references/rust-rules/async-oneshot-response.md +0 -191
  88. package/template/agent/skills/rust-developer/references/rust-rules/async-select-racing.md +0 -198
  89. package/template/agent/skills/rust-developer/references/rust-rules/async-spawn-blocking.md +0 -154
  90. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-fs.md +0 -167
  91. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-runtime.md +0 -169
  92. package/template/agent/skills/rust-developer/references/rust-rules/async-try-join.md +0 -172
  93. package/template/agent/skills/rust-developer/references/rust-rules/async-watch-latest.md +0 -189
  94. package/template/agent/skills/rust-developer/references/rust-rules/doc-all-public.md +0 -113
  95. package/template/agent/skills/rust-developer/references/rust-rules/doc-cargo-metadata.md +0 -147
  96. package/template/agent/skills/rust-developer/references/rust-rules/doc-errors-section.md +0 -122
  97. package/template/agent/skills/rust-developer/references/rust-rules/doc-examples-section.md +0 -161
  98. package/template/agent/skills/rust-developer/references/rust-rules/doc-hidden-setup.md +0 -149
  99. package/template/agent/skills/rust-developer/references/rust-rules/doc-intra-links.md +0 -138
  100. package/template/agent/skills/rust-developer/references/rust-rules/doc-link-types.md +0 -169
  101. package/template/agent/skills/rust-developer/references/rust-rules/doc-module-inner.md +0 -116
  102. package/template/agent/skills/rust-developer/references/rust-rules/doc-panics-section.md +0 -128
  103. package/template/agent/skills/rust-developer/references/rust-rules/doc-question-mark.md +0 -136
  104. package/template/agent/skills/rust-developer/references/rust-rules/doc-safety-section.md +0 -131
  105. package/template/agent/skills/rust-developer/references/rust-rules/err-anyhow-app.md +0 -179
  106. package/template/agent/skills/rust-developer/references/rust-rules/err-context-chain.md +0 -144
  107. package/template/agent/skills/rust-developer/references/rust-rules/err-custom-type.md +0 -152
  108. package/template/agent/skills/rust-developer/references/rust-rules/err-doc-errors.md +0 -145
  109. package/template/agent/skills/rust-developer/references/rust-rules/err-expect-bugs-only.md +0 -133
  110. package/template/agent/skills/rust-developer/references/rust-rules/err-from-impl.md +0 -152
  111. package/template/agent/skills/rust-developer/references/rust-rules/err-lowercase-msg.md +0 -124
  112. package/template/agent/skills/rust-developer/references/rust-rules/err-no-unwrap-prod.md +0 -115
  113. package/template/agent/skills/rust-developer/references/rust-rules/err-question-mark.md +0 -151
  114. package/template/agent/skills/rust-developer/references/rust-rules/err-result-over-panic.md +0 -130
  115. package/template/agent/skills/rust-developer/references/rust-rules/err-source-chain.md +0 -155
  116. package/template/agent/skills/rust-developer/references/rust-rules/err-thiserror-lib.md +0 -171
  117. package/template/agent/skills/rust-developer/references/rust-rules/lint-cargo-metadata.md +0 -138
  118. package/template/agent/skills/rust-developer/references/rust-rules/lint-deny-correctness.md +0 -107
  119. package/template/agent/skills/rust-developer/references/rust-rules/lint-missing-docs.md +0 -154
  120. package/template/agent/skills/rust-developer/references/rust-rules/lint-pedantic-selective.md +0 -118
  121. package/template/agent/skills/rust-developer/references/rust-rules/lint-rustfmt-check.md +0 -157
  122. package/template/agent/skills/rust-developer/references/rust-rules/lint-unsafe-doc.md +0 -133
  123. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-complexity.md +0 -131
  124. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-perf.md +0 -136
  125. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-style.md +0 -135
  126. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-suspicious.md +0 -122
  127. package/template/agent/skills/rust-developer/references/rust-rules/lint-workspace-lints.md +0 -172
  128. package/template/agent/skills/rust-developer/references/rust-rules/mem-arena-allocator.md +0 -168
  129. package/template/agent/skills/rust-developer/references/rust-rules/mem-arrayvec.md +0 -142
  130. package/template/agent/skills/rust-developer/references/rust-rules/mem-assert-type-size.md +0 -168
  131. package/template/agent/skills/rust-developer/references/rust-rules/mem-avoid-format.md +0 -147
  132. package/template/agent/skills/rust-developer/references/rust-rules/mem-box-large-variant.md +0 -158
  133. package/template/agent/skills/rust-developer/references/rust-rules/mem-boxed-slice.md +0 -139
  134. package/template/agent/skills/rust-developer/references/rust-rules/mem-clone-from.md +0 -147
  135. package/template/agent/skills/rust-developer/references/rust-rules/mem-compact-string.md +0 -149
  136. package/template/agent/skills/rust-developer/references/rust-rules/mem-reuse-collections.md +0 -174
  137. package/template/agent/skills/rust-developer/references/rust-rules/mem-smaller-integers.md +0 -159
  138. package/template/agent/skills/rust-developer/references/rust-rules/mem-smallvec.md +0 -138
  139. package/template/agent/skills/rust-developer/references/rust-rules/mem-thinvec.md +0 -142
  140. package/template/agent/skills/rust-developer/references/rust-rules/mem-with-capacity.md +0 -156
  141. package/template/agent/skills/rust-developer/references/rust-rules/mem-write-over-format.md +0 -172
  142. package/template/agent/skills/rust-developer/references/rust-rules/mem-zero-copy.md +0 -164
  143. package/template/agent/skills/rust-developer/references/rust-rules/name-acronym-word.md +0 -99
  144. package/template/agent/skills/rust-developer/references/rust-rules/name-as-free.md +0 -104
  145. package/template/agent/skills/rust-developer/references/rust-rules/name-consts-screaming.md +0 -94
  146. package/template/agent/skills/rust-developer/references/rust-rules/name-crate-no-rs.md +0 -78
  147. package/template/agent/skills/rust-developer/references/rust-rules/name-funcs-snake.md +0 -76
  148. package/template/agent/skills/rust-developer/references/rust-rules/name-into-ownership.md +0 -123
  149. package/template/agent/skills/rust-developer/references/rust-rules/name-is-has-bool.md +0 -127
  150. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-convention.md +0 -129
  151. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-method.md +0 -131
  152. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-type-match.md +0 -142
  153. package/template/agent/skills/rust-developer/references/rust-rules/name-lifetime-short.md +0 -86
  154. package/template/agent/skills/rust-developer/references/rust-rules/name-no-get-prefix.md +0 -154
  155. package/template/agent/skills/rust-developer/references/rust-rules/name-to-expensive.md +0 -118
  156. package/template/agent/skills/rust-developer/references/rust-rules/name-type-param-single.md +0 -92
  157. package/template/agent/skills/rust-developer/references/rust-rules/name-types-camel.md +0 -65
  158. package/template/agent/skills/rust-developer/references/rust-rules/name-variants-camel.md +0 -101
  159. package/template/agent/skills/rust-developer/references/rust-rules/opt-bounds-check.md +0 -161
  160. package/template/agent/skills/rust-developer/references/rust-rules/opt-cache-friendly.md +0 -187
  161. package/template/agent/skills/rust-developer/references/rust-rules/opt-codegen-units.md +0 -142
  162. package/template/agent/skills/rust-developer/references/rust-rules/opt-cold-unlikely.md +0 -152
  163. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-always-rare.md +0 -141
  164. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-never-cold.md +0 -181
  165. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-small.md +0 -160
  166. package/template/agent/skills/rust-developer/references/rust-rules/opt-likely-hint.md +0 -171
  167. package/template/agent/skills/rust-developer/references/rust-rules/opt-lto-release.md +0 -130
  168. package/template/agent/skills/rust-developer/references/rust-rules/opt-pgo-profile.md +0 -167
  169. package/template/agent/skills/rust-developer/references/rust-rules/opt-simd-portable.md +0 -144
  170. package/template/agent/skills/rust-developer/references/rust-rules/opt-target-cpu.md +0 -154
  171. package/template/agent/skills/rust-developer/references/rust-rules/own-arc-shared.md +0 -141
  172. package/template/agent/skills/rust-developer/references/rust-rules/own-borrow-over-clone.md +0 -95
  173. package/template/agent/skills/rust-developer/references/rust-rules/own-clone-explicit.md +0 -135
  174. package/template/agent/skills/rust-developer/references/rust-rules/own-copy-small.md +0 -124
  175. package/template/agent/skills/rust-developer/references/rust-rules/own-cow-conditional.md +0 -135
  176. package/template/agent/skills/rust-developer/references/rust-rules/own-lifetime-elision.md +0 -134
  177. package/template/agent/skills/rust-developer/references/rust-rules/own-move-large.md +0 -134
  178. package/template/agent/skills/rust-developer/references/rust-rules/own-mutex-interior.md +0 -105
  179. package/template/agent/skills/rust-developer/references/rust-rules/own-rc-single-thread.md +0 -65
  180. package/template/agent/skills/rust-developer/references/rust-rules/own-refcell-interior.md +0 -97
  181. package/template/agent/skills/rust-developer/references/rust-rules/own-rwlock-readers.md +0 -122
  182. package/template/agent/skills/rust-developer/references/rust-rules/own-slice-over-vec.md +0 -119
  183. package/template/agent/skills/rust-developer/references/rust-rules/perf-black-box-bench.md +0 -153
  184. package/template/agent/skills/rust-developer/references/rust-rules/perf-chain-avoid.md +0 -136
  185. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-into.md +0 -133
  186. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-once.md +0 -120
  187. package/template/agent/skills/rust-developer/references/rust-rules/perf-drain-reuse.md +0 -137
  188. package/template/agent/skills/rust-developer/references/rust-rules/perf-entry-api.md +0 -134
  189. package/template/agent/skills/rust-developer/references/rust-rules/perf-extend-batch.md +0 -150
  190. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-lazy.md +0 -123
  191. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-over-index.md +0 -113
  192. package/template/agent/skills/rust-developer/references/rust-rules/perf-profile-first.md +0 -175
  193. package/template/agent/skills/rust-developer/references/rust-rules/perf-release-profile.md +0 -149
  194. package/template/agent/skills/rust-developer/references/rust-rules/proj-bin-dir.md +0 -142
  195. package/template/agent/skills/rust-developer/references/rust-rules/proj-flat-small.md +0 -133
  196. package/template/agent/skills/rust-developer/references/rust-rules/proj-lib-main-split.md +0 -148
  197. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-by-feature.md +0 -130
  198. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-rs-dir.md +0 -120
  199. package/template/agent/skills/rust-developer/references/rust-rules/proj-prelude-module.md +0 -155
  200. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-crate-internal.md +0 -139
  201. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-super-parent.md +0 -135
  202. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-use-reexport.md +0 -162
  203. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-deps.md +0 -186
  204. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-large.md +0 -162
  205. package/template/agent/skills/rust-developer/references/rust-rules/test-arrange-act-assert.md +0 -160
  206. package/template/agent/skills/rust-developer/references/rust-rules/test-cfg-test-module.md +0 -151
  207. package/template/agent/skills/rust-developer/references/rust-rules/test-criterion-bench.md +0 -171
  208. package/template/agent/skills/rust-developer/references/rust-rules/test-descriptive-names.md +0 -142
  209. package/template/agent/skills/rust-developer/references/rust-rules/test-doctest-examples.md +0 -168
  210. package/template/agent/skills/rust-developer/references/rust-rules/test-fixture-raii.md +0 -151
  211. package/template/agent/skills/rust-developer/references/rust-rules/test-integration-dir.md +0 -144
  212. package/template/agent/skills/rust-developer/references/rust-rules/test-mock-traits.md +0 -189
  213. package/template/agent/skills/rust-developer/references/rust-rules/test-mockall-mocking.md +0 -226
  214. package/template/agent/skills/rust-developer/references/rust-rules/test-proptest-properties.md +0 -161
  215. package/template/agent/skills/rust-developer/references/rust-rules/test-should-panic.md +0 -130
  216. package/template/agent/skills/rust-developer/references/rust-rules/test-tokio-async.md +0 -154
  217. package/template/agent/skills/rust-developer/references/rust-rules/test-use-super.md +0 -127
  218. package/template/agent/skills/rust-developer/references/rust-rules/type-enum-states.md +0 -154
  219. package/template/agent/skills/rust-developer/references/rust-rules/type-generic-bounds.md +0 -142
  220. package/template/agent/skills/rust-developer/references/rust-rules/type-never-diverge.md +0 -146
  221. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-ids.md +0 -160
  222. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-validated.md +0 -159
  223. package/template/agent/skills/rust-developer/references/rust-rules/type-no-stringly.md +0 -144
  224. package/template/agent/skills/rust-developer/references/rust-rules/type-option-nullable.md +0 -137
  225. package/template/agent/skills/rust-developer/references/rust-rules/type-phantom-marker.md +0 -188
  226. package/template/agent/skills/rust-developer/references/rust-rules/type-repr-transparent.md +0 -143
  227. package/template/agent/skills/rust-developer/references/rust-rules/type-result-fallible.md +0 -131
  228. package/template/agent/skills/saas-architect/SKILL.md +0 -139
  229. package/template/agent/skills/security-engineer/SKILL.md +0 -133
  230. package/template/agent/skills/seo-specialist/SKILL.md +0 -130
  231. 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