agy-superpowers 5.2.2 → 5.2.3

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