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,154 +0,0 @@
1
- # lint-missing-docs
2
-
3
- > Warn on missing documentation for public items
4
-
5
- ## Why It Matters
6
-
7
- The `missing_docs` lint ensures all public API items are documented. For libraries, documentation IS the user interface. Missing docs mean users can't understand your API without reading source code.
8
-
9
- ## Configuration
10
-
11
- ```rust
12
- // In lib.rs
13
- #![warn(missing_docs)]
14
- ```
15
-
16
- Or in `Cargo.toml`:
17
-
18
- ```toml
19
- [lints.rust]
20
- missing_docs = "warn"
21
- ```
22
-
23
- For strict enforcement:
24
-
25
- ```rust
26
- #![deny(missing_docs)]
27
- ```
28
-
29
- ## What It Catches
30
-
31
- ```rust
32
- #![warn(missing_docs)]
33
-
34
- pub struct User { // WARN: missing documentation for a struct
35
- pub name: String, // WARN: missing documentation for a field
36
- pub age: u32, // WARN: missing documentation for a field
37
- }
38
-
39
- pub fn process() { } // WARN: missing documentation for a function
40
-
41
- pub trait Handler { // WARN: missing documentation for a trait
42
- fn handle(&self); // WARN: missing documentation for a method
43
- }
44
- ```
45
-
46
- ## Good
47
-
48
- ```rust
49
- #![warn(missing_docs)]
50
-
51
- //! User management module.
52
-
53
- /// Represents a registered user in the system.
54
- pub struct User {
55
- /// The user's display name.
56
- pub name: String,
57
- /// The user's age in years.
58
- pub age: u32,
59
- }
60
-
61
- /// Processes pending user requests.
62
- ///
63
- /// # Examples
64
- ///
65
- /// ```
66
- /// process();
67
- /// ```
68
- pub fn process() { }
69
-
70
- /// Handler trait for request processing.
71
- pub trait Handler {
72
- /// Handle an incoming request.
73
- fn handle(&self);
74
- }
75
- ```
76
-
77
- ## Private Items
78
-
79
- `missing_docs` only applies to `pub` items. Private items don't trigger warnings:
80
-
81
- ```rust
82
- #![warn(missing_docs)]
83
-
84
- struct Internal { } // No warning - private
85
-
86
- pub struct Public { } // WARN - public, needs docs
87
- ```
88
-
89
- ## Allow for Specific Items
90
-
91
- ```rust
92
- #![warn(missing_docs)]
93
-
94
- /// Documented module.
95
- pub mod api {
96
- /// Documented struct.
97
- pub struct Config { }
98
-
99
- #[allow(missing_docs)]
100
- pub mod internal {
101
- // Internal API, docs not required
102
- pub struct Helper { }
103
- }
104
- }
105
- ```
106
-
107
- ## Gradual Adoption
108
-
109
- For existing codebases, start with `warn` and fix incrementally:
110
-
111
- ```rust
112
- // Phase 1: Warn, fix critical items
113
- #![warn(missing_docs)]
114
-
115
- // Phase 2: After cleanup, deny
116
- #![deny(missing_docs)]
117
- ```
118
-
119
- ## Combining with doc Attributes
120
-
121
- ```rust
122
- #![warn(missing_docs)]
123
- #![warn(rustdoc::broken_intra_doc_links)]
124
- #![warn(rustdoc::private_intra_doc_links)]
125
- ```
126
-
127
- ## Workspace Configuration
128
-
129
- ```toml
130
- # In workspace Cargo.toml
131
- [workspace.lints.rust]
132
- missing_docs = "warn"
133
-
134
- # Member crates inherit
135
- [lints]
136
- workspace = true
137
- ```
138
-
139
- ## What to Document
140
-
141
- | Item | Doc Focus |
142
- |------|-----------|
143
- | Structs | Purpose, usage example |
144
- | Struct fields | What it represents |
145
- | Enums | When to use each variant |
146
- | Functions | What it does, params, return |
147
- | Traits | Contract and expectations |
148
- | Modules | What the module provides |
149
-
150
- ## See Also
151
-
152
- - [doc-all-public](./doc-all-public.md) - Documentation patterns
153
- - [lint-unsafe-doc](./lint-unsafe-doc.md) - Unsafe documentation
154
- - [doc-examples-section](./doc-examples-section.md) - Adding examples
@@ -1,118 +0,0 @@
1
- # lint-pedantic-selective
2
-
3
- > Enable clippy::pedantic selectively
4
-
5
- ## Why It Matters
6
-
7
- The `clippy::pedantic` group contains opinionated lints that aren't universally applicable. Enabling it wholesale produces noise; selectively enabling useful pedantic lints improves code quality without false positives.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // Too noisy - will fight you constantly
13
- #![warn(clippy::pedantic)]
14
- ```
15
-
16
- ## Good
17
-
18
- ```toml
19
- # Cargo.toml - cherry-pick useful pedantic lints
20
- [lints.clippy]
21
- # Enable pedantic as baseline
22
- pedantic = "warn"
23
-
24
- # Disable noisy ones
25
- missing_errors_doc = "allow" # Document errors separately
26
- missing_panics_doc = "allow" # Document panics separately
27
- module_name_repetitions = "allow" # Allow Foo::FooError pattern
28
- too_many_lines = "allow" # Function length varies
29
- must_use_candidate = "allow" # Too many suggestions
30
- ```
31
-
32
- ## Recommended Pedantic Lints
33
-
34
- | Lint | Why Enable |
35
- |------|-----------|
36
- | `doc_markdown` | Catch unmarked code in docs |
37
- | `match_wildcard_for_single_variants` | Explicit variant matching |
38
- | `semicolon_if_nothing_returned` | Consistent semicolons |
39
- | `string_add_assign` | Use `+=` for string concatenation |
40
- | `unnested_or_patterns` | Simplify match patterns |
41
- | `unused_self` | Catch methods that should be functions |
42
- | `used_underscore_binding` | Warn on using `_var` |
43
- | `wildcard_imports` | Avoid glob imports |
44
-
45
- ## Often Disabled
46
-
47
- | Lint | Why Disable |
48
- |------|-------------|
49
- | `missing_errors_doc` | Handle with `#[doc]` policy |
50
- | `missing_panics_doc` | Handle with `#[doc]` policy |
51
- | `module_name_repetitions` | Sometimes intentional |
52
- | `must_use_candidate` | Too aggressive |
53
- | `too_many_lines` | Arbitrary threshold |
54
- | `struct_excessive_bools` | Valid for config structs |
55
-
56
- ## Full Configuration
57
-
58
- ```toml
59
- # Cargo.toml
60
- [lints.clippy]
61
- # Start with pedantic
62
- pedantic = "warn"
63
-
64
- # Keep these
65
- doc_markdown = "warn"
66
- match_wildcard_for_single_variants = "warn"
67
- semicolon_if_nothing_returned = "warn"
68
- unused_self = "warn"
69
- wildcard_imports = "warn"
70
-
71
- # Disable these
72
- missing_errors_doc = "allow"
73
- missing_panics_doc = "allow"
74
- module_name_repetitions = "allow"
75
- must_use_candidate = "allow"
76
- too_many_lines = "allow"
77
- similar_names = "allow"
78
- struct_excessive_bools = "allow"
79
- ```
80
-
81
- ## Alternative: Explicit Opt-in
82
-
83
- ```toml
84
- # Only enable specific lints, not the group
85
- [lints.clippy]
86
- # From pedantic, only these:
87
- doc_markdown = "warn"
88
- semicolon_if_nothing_returned = "warn"
89
- unused_self = "warn"
90
- wildcard_imports = "warn"
91
- ```
92
-
93
- ## Module-Level Overrides
94
-
95
- ```rust
96
- // Allow specific lint for a module
97
- #![allow(clippy::module_name_repetitions)]
98
-
99
- // Or for specific items
100
- #[allow(clippy::too_many_arguments)]
101
- fn complex_function(/* many args */) { }
102
- ```
103
-
104
- ## Team Consensus
105
-
106
- Pedantic lints are style choices. Agree as a team:
107
-
108
- 1. Enable `pedantic` as baseline
109
- 2. Run `cargo clippy` on codebase
110
- 3. Discuss each warning category
111
- 4. Disable ones that don't fit your style
112
- 5. Document decisions in `clippy.toml`
113
-
114
- ## See Also
115
-
116
- - [lint-warn-style](./lint-warn-style.md) - Style warnings
117
- - [lint-warn-complexity](./lint-warn-complexity.md) - Complexity warnings
118
- - [lint-deny-correctness](./lint-deny-correctness.md) - Correctness lints
@@ -1,157 +0,0 @@
1
- # lint-rustfmt-check
2
-
3
- > Run cargo fmt --check in CI
4
-
5
- ## Why It Matters
6
-
7
- Consistent formatting eliminates style debates and makes diffs cleaner. Running `cargo fmt --check` in CI ensures all code follows the same format. This catches formatting issues before merge, not after.
8
-
9
- ## CI Configuration
10
-
11
- ### GitHub Actions
12
-
13
- ```yaml
14
- name: CI
15
-
16
- on: [push, pull_request]
17
-
18
- jobs:
19
- fmt:
20
- runs-on: ubuntu-latest
21
- steps:
22
- - uses: actions/checkout@v4
23
- - uses: dtolnay/rust-toolchain@stable
24
- with:
25
- components: rustfmt
26
- - run: cargo fmt --all --check
27
- ```
28
-
29
- ### GitLab CI
30
-
31
- ```yaml
32
- fmt:
33
- image: rust:latest
34
- script:
35
- - rustup component add rustfmt
36
- - cargo fmt --all --check
37
- ```
38
-
39
- ### Pre-commit Hook
40
-
41
- ```bash
42
- #!/bin/sh
43
- # .git/hooks/pre-commit
44
- cargo fmt --all --check
45
- ```
46
-
47
- ## Configuration
48
-
49
- Create `rustfmt.toml` for custom settings:
50
-
51
- ```toml
52
- # rustfmt.toml
53
- edition = "2021"
54
- max_width = 100
55
- use_small_heuristics = "Max"
56
- imports_granularity = "Module"
57
- group_imports = "StdExternalCrate"
58
- reorder_imports = true
59
- ```
60
-
61
- ## Common Options
62
-
63
- | Option | Default | Description |
64
- |--------|---------|-------------|
65
- | `max_width` | 100 | Maximum line width |
66
- | `tab_spaces` | 4 | Spaces per indent |
67
- | `edition` | "2015" | Rust edition |
68
- | `use_small_heuristics` | "Default" | Layout heuristics |
69
- | `imports_granularity` | "Preserve" | Import grouping |
70
- | `group_imports` | "Preserve" | Import ordering |
71
-
72
- ## Running Locally
73
-
74
- ```bash
75
- # Check formatting (doesn't modify files)
76
- cargo fmt --all --check
77
-
78
- # Apply formatting
79
- cargo fmt --all
80
-
81
- # Format specific file
82
- cargo fmt -- src/main.rs
83
-
84
- # Check with verbose output
85
- cargo fmt --all --check -- --verbose
86
- ```
87
-
88
- ## Workspace Formatting
89
-
90
- ```bash
91
- # Format all workspace members
92
- cargo fmt --all
93
-
94
- # Format specific package
95
- cargo fmt -p my-package
96
- ```
97
-
98
- ## Ignoring Files
99
-
100
- In `rustfmt.toml`:
101
-
102
- ```toml
103
- # Skip generated files
104
- ignore = [
105
- "src/generated/*",
106
- "build.rs",
107
- ]
108
- ```
109
-
110
- Or in code:
111
-
112
- ```rust
113
- #[rustfmt::skip]
114
- mod generated_code;
115
-
116
- #[rustfmt::skip]
117
- const MATRIX: [[i32; 4]; 4] = [
118
- [1, 0, 0, 0],
119
- [0, 1, 0, 0],
120
- [0, 0, 1, 0],
121
- [0, 0, 0, 1],
122
- ];
123
- ```
124
-
125
- ## Nightly Features
126
-
127
- Some options require nightly:
128
-
129
- ```toml
130
- # rustfmt.toml (nightly only)
131
- unstable_features = true
132
- imports_granularity = "Crate"
133
- wrap_comments = true
134
- format_code_in_doc_comments = true
135
- ```
136
-
137
- ```bash
138
- # Use nightly rustfmt
139
- cargo +nightly fmt
140
- ```
141
-
142
- ## IDE Integration
143
-
144
- Most IDEs format on save. Configure to use project `rustfmt.toml`:
145
-
146
- ```json
147
- // VS Code settings.json
148
- {
149
- "rust-analyzer.rustfmt.extraArgs": ["--config-path", "./rustfmt.toml"]
150
- }
151
- ```
152
-
153
- ## See Also
154
-
155
- - [lint-warn-style](./lint-warn-style.md) - Style lints
156
- - [lint-pedantic-selective](./lint-pedantic-selective.md) - Pedantic lints
157
- - [name-funcs-snake](./name-funcs-snake.md) - Naming conventions
@@ -1,133 +0,0 @@
1
- # lint-unsafe-doc
2
-
3
- > Require documentation for unsafe blocks
4
-
5
- ## Why It Matters
6
-
7
- The `undocumented_unsafe_blocks` lint ensures every unsafe block has a `// SAFETY:` comment explaining why the operation is sound. Unsafe code is the source of most memory safety bugs—documenting invariants catches mistakes and helps reviewers.
8
-
9
- ## Configuration
10
-
11
- ```rust
12
- #![warn(clippy::undocumented_unsafe_blocks)]
13
- ```
14
-
15
- Or in `Cargo.toml`:
16
-
17
- ```toml
18
- [lints.clippy]
19
- undocumented_unsafe_blocks = "warn"
20
- ```
21
-
22
- For strict enforcement:
23
-
24
- ```toml
25
- [lints.clippy]
26
- undocumented_unsafe_blocks = "deny"
27
- ```
28
-
29
- ## Bad
30
-
31
- ```rust
32
- pub fn read_data(ptr: *const u8, len: usize) -> &[u8] {
33
- unsafe {
34
- std::slice::from_raw_parts(ptr, len) // WARN: undocumented
35
- }
36
- }
37
-
38
- impl Buffer {
39
- pub fn get_unchecked(&self, index: usize) -> &u8 {
40
- unsafe { self.data.get_unchecked(index) } // WARN
41
- }
42
- }
43
- ```
44
-
45
- ## Good
46
-
47
- ```rust
48
- pub fn read_data(ptr: *const u8, len: usize) -> &[u8] {
49
- // SAFETY: Caller guarantees:
50
- // - ptr is valid for reads of len bytes
51
- // - ptr is properly aligned for u8
52
- // - the memory is initialized
53
- // - no mutable references exist to this memory
54
- unsafe {
55
- std::slice::from_raw_parts(ptr, len)
56
- }
57
- }
58
-
59
- impl Buffer {
60
- pub fn get_unchecked(&self, index: usize) -> &u8 {
61
- debug_assert!(index < self.len(), "index out of bounds");
62
- // SAFETY: We verified index < len in debug builds.
63
- // Callers must ensure index is within bounds.
64
- unsafe { self.data.get_unchecked(index) }
65
- }
66
- }
67
- ```
68
-
69
- ## SAFETY Comment Format
70
-
71
- ```rust
72
- // SAFETY: <explanation of why this is sound>
73
- unsafe {
74
- // ...
75
- }
76
- ```
77
-
78
- The comment should explain:
79
- 1. **What invariants are upheld** - preconditions that make this safe
80
- 2. **Why the invariants hold** - how you know they're satisfied
81
- 3. **What could go wrong** - if invariants are violated
82
-
83
- ## Examples by Category
84
-
85
- ### Pointer Operations
86
-
87
- ```rust
88
- // SAFETY: ptr was obtained from Box::into_raw, so it's valid
89
- // and properly aligned. We're taking back ownership.
90
- let boxed = unsafe { Box::from_raw(ptr) };
91
- ```
92
-
93
- ### Unchecked Operations
94
-
95
- ```rust
96
- // SAFETY: We just checked that i < self.len() above.
97
- // The bounds check cannot be elided by the optimizer
98
- // because len() is not inlined.
99
- unsafe { self.data.get_unchecked(i) }
100
- ```
101
-
102
- ### FFI Calls
103
-
104
- ```rust
105
- // SAFETY: libc::getenv is safe to call with a null-terminated
106
- // string. We ensure null termination with CString::new.
107
- // The returned pointer is valid for the lifetime of the environment.
108
- let value = unsafe { libc::getenv(key.as_ptr()) };
109
- ```
110
-
111
- ### Trait Implementations
112
-
113
- ```rust
114
- // SAFETY: MyType contains no pointers or interior mutability,
115
- // and all bit patterns are valid MyType values.
116
- unsafe impl Send for MyType {}
117
- unsafe impl Sync for MyType {}
118
- ```
119
-
120
- ## Related Lints
121
-
122
- ```toml
123
- [lints.clippy]
124
- undocumented_unsafe_blocks = "warn"
125
- # Also consider:
126
- multiple_unsafe_ops_per_block = "warn" # One operation per block
127
- ```
128
-
129
- ## See Also
130
-
131
- - [doc-safety-section](./doc-safety-section.md) - `# Safety` in docs
132
- - [lint-deny-correctness](./lint-deny-correctness.md) - Correctness lints
133
- - [type-repr-transparent](./type-repr-transparent.md) - FFI safety
@@ -1,131 +0,0 @@
1
- # lint-warn-complexity
2
-
3
- > Enable clippy::complexity for simpler code
4
-
5
- ## Why It Matters
6
-
7
- The `clippy::complexity` lint group identifies unnecessarily complex code that can be simplified. Complex code is harder to read, maintain, and often hides bugs. Clippy suggests cleaner alternatives.
8
-
9
- ## Configuration
10
-
11
- ```rust
12
- // In lib.rs or main.rs
13
- #![warn(clippy::complexity)]
14
- ```
15
-
16
- Or in `Cargo.toml`:
17
-
18
- ```toml
19
- [lints.clippy]
20
- complexity = "warn"
21
- ```
22
-
23
- ## What It Catches
24
-
25
- ### Unnecessary Complexity
26
-
27
- ```rust
28
- // WARN: Overly complex boolean expression
29
- if !(x == 0) { } // Use: if x != 0 { }
30
-
31
- // WARN: Manual implementation of Option::map
32
- match option {
33
- Some(x) => Some(x + 1),
34
- None => None,
35
- } // Use: option.map(|x| x + 1)
36
-
37
- // WARN: Unnecessary filter before count
38
- iter.filter(|x| predicate(x)).count() // Could simplify if only counting
39
- ```
40
-
41
- ### Redundant Operations
42
-
43
- ```rust
44
- // WARN: Redundant allocation
45
- let s = format!("literal"); // Use: "literal".to_string() or just "literal"
46
-
47
- // WARN: Unnecessarily complicated match
48
- match result {
49
- Ok(ok) => Ok(ok),
50
- Err(err) => Err(err),
51
- } // Just use: result
52
-
53
- // WARN: Box::new in return position
54
- fn make_error() -> Box<dyn Error> {
55
- Box::new(MyError) // Could use: MyError.into()
56
- }
57
- ```
58
-
59
- ### Overly Verbose Code
60
-
61
- ```rust
62
- // WARN: bind_instead_of_map
63
- option.and_then(|x| Some(x + 1)) // Use: option.map(|x| x + 1)
64
-
65
- // WARN: clone_on_copy
66
- let y = x.clone(); // Where x is Copy type, just use: let y = x;
67
-
68
- // WARN: useless_let_if_seq
69
- let result;
70
- if condition {
71
- result = 1;
72
- } else {
73
- result = 2;
74
- }
75
- // Use: let result = if condition { 1 } else { 2 };
76
- ```
77
-
78
- ## Notable Lints in This Group
79
-
80
- | Lint | Simplification |
81
- |------|---------------|
82
- | `bind_instead_of_map` | Use `map` instead of `and_then(Some(...))` |
83
- | `bool_comparison` | `if x == true` → `if x` |
84
- | `clone_on_copy` | Remove `.clone()` for Copy types |
85
- | `filter_next` | Use `.find()` instead |
86
- | `option_map_unit_fn` | Use `if let` instead |
87
- | `search_is_some` | Use `.any()` or `.contains()` |
88
- | `unnecessary_cast` | Remove redundant casts |
89
- | `useless_conversion` | Remove `.into()` when types match |
90
-
91
- ## Examples
92
-
93
- ```rust
94
- // Before (complexity warnings)
95
- fn find_positive(nums: &[i32]) -> Option<i32> {
96
- let filtered: Vec<_> = nums.iter()
97
- .cloned()
98
- .filter(|x| *x > 0)
99
- .collect();
100
- if filtered.len() == 0 {
101
- None
102
- } else {
103
- Some(filtered[0])
104
- }
105
- }
106
-
107
- // After (simplified)
108
- fn find_positive(nums: &[i32]) -> Option<i32> {
109
- nums.iter()
110
- .copied()
111
- .find(|&x| x > 0)
112
- }
113
- ```
114
-
115
- ## Cognitive Load
116
-
117
- Complex code isn't just longer—it's harder to understand:
118
-
119
- ```rust
120
- // High cognitive load
121
- let value = if x.is_some() { x.unwrap() } else { y.unwrap_or(z) };
122
-
123
- // Lower cognitive load
124
- let value = x.unwrap_or_else(|| y.unwrap_or(z));
125
- ```
126
-
127
- ## See Also
128
-
129
- - [lint-warn-style](./lint-warn-style.md) - Style warnings
130
- - [lint-warn-perf](./lint-warn-perf.md) - Performance warnings
131
- - [lint-pedantic-selective](./lint-pedantic-selective.md) - Pedantic lints