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