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,94 +0,0 @@
1
- # name-consts-screaming
2
-
3
- > Use `SCREAMING_SNAKE_CASE` for constants and statics
4
-
5
- ## Why It Matters
6
-
7
- Constants and statics are special—they're known at compile time and have program-wide lifetime. `SCREAMING_SNAKE_CASE` makes them visually distinct from runtime variables. This convention is enforced by the compiler and universally expected.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // lowercase/camelCase constants - compiler warns
13
- const maxConnections: u32 = 100; // warning
14
- const default_timeout: u64 = 30; // warning
15
- static globalCounter: AtomicU64 = AtomicU64::new(0); // warning
16
- ```
17
-
18
- ## Good
19
-
20
- ```rust
21
- // SCREAMING_SNAKE_CASE for constants
22
- const MAX_CONNECTIONS: u32 = 100;
23
- const DEFAULT_TIMEOUT: Duration = Duration::from_secs(30);
24
- const BUFFER_SIZE: usize = 4096;
25
-
26
- // SCREAMING_SNAKE_CASE for statics
27
- static GLOBAL_COUNTER: AtomicU64 = AtomicU64::new(0);
28
- static CONFIG: OnceLock<Config> = OnceLock::new();
29
-
30
- // Type-level constants in impl blocks
31
- impl Buffer {
32
- const INITIAL_CAPACITY: usize = 1024;
33
- const MAX_CAPACITY: usize = 1024 * 1024;
34
- }
35
- ```
36
-
37
- ## Associated Constants
38
-
39
- ```rust
40
- trait Limit {
41
- const MAX: usize;
42
- const MIN: usize;
43
- }
44
-
45
- impl Limit for SmallBuffer {
46
- const MAX: usize = 256;
47
- const MIN: usize = 16;
48
- }
49
-
50
- // Generic associated constants
51
- struct Container<T> {
52
- data: Vec<T>,
53
- }
54
-
55
- impl<T> Container<T> {
56
- const EMPTY: Self = Self { data: Vec::new() };
57
- }
58
- ```
59
-
60
- ## Environment and Config
61
-
62
- ```rust
63
- // Environment variable names
64
- const ENV_DATABASE_URL: &str = "DATABASE_URL";
65
- const ENV_LOG_LEVEL: &str = "LOG_LEVEL";
66
-
67
- // Configuration keys
68
- const CONFIG_TIMEOUT_SECONDS: &str = "timeout_seconds";
69
- const CONFIG_MAX_RETRIES: &str = "max_retries";
70
- ```
71
-
72
- ## Lazy Static / OnceLock
73
-
74
- ```rust
75
- use std::sync::OnceLock;
76
-
77
- // Global configuration
78
- static CONFIG: OnceLock<AppConfig> = OnceLock::new();
79
-
80
- // Compiled regex
81
- static EMAIL_REGEX: OnceLock<Regex> = OnceLock::new();
82
-
83
- fn get_email_regex() -> &'static Regex {
84
- EMAIL_REGEX.get_or_init(|| {
85
- Regex::new(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$").unwrap()
86
- })
87
- }
88
- ```
89
-
90
- ## See Also
91
-
92
- - [name-funcs-snake](./name-funcs-snake.md) - Function/variable naming
93
- - [name-types-camel](./name-types-camel.md) - Type naming
94
- - [type-newtype-ids](./type-newtype-ids.md) - Type-safe constants
@@ -1,78 +0,0 @@
1
- # name-crate-no-rs
2
-
3
- > Don't suffix crate names with `-rs` or `-rust`
4
-
5
- ## Why It Matters
6
-
7
- Adding `-rs` or `-rust` to crate names is redundant—you're already on crates.io, it's obviously Rust. These suffixes waste characters, clutter the namespace, and can make crate names harder to type. The Rust community discourages this pattern.
8
-
9
- ## Bad
10
-
11
- ```toml
12
- # Cargo.toml
13
- [package]
14
- name = "json-parser-rs" # Redundant -rs
15
- name = "my-lib-rust" # Redundant -rust
16
- name = "http-client-rs" # We know it's Rust
17
- name = "rust-sqlite" # rust- prefix equally bad
18
- ```
19
-
20
- ## Good
21
-
22
- ```toml
23
- # Cargo.toml
24
- [package]
25
- name = "json-parser"
26
- name = "my-lib"
27
- name = "http-client"
28
- name = "sqlite-wrapper"
29
-
30
- # Real crate examples (no -rs):
31
- # serde (not serde-rs)
32
- # tokio (not tokio-rs)
33
- # reqwest (not reqwest-rs)
34
- # clap (not clap-rs)
35
- ```
36
-
37
- ## When Context Is Needed
38
-
39
- ```toml
40
- # If you're porting a library from another language:
41
- name = "python-ast" # Describes what it's for, not what it's written in
42
-
43
- # If you're providing bindings:
44
- name = "openssl" # The Rust crate IS the Rust interface
45
-
46
- # Platform-specific:
47
- name = "windows-sys" # Platform, not language
48
- ```
49
-
50
- ## Repository Naming
51
-
52
- ```
53
- # GitHub repos don't need -rs either
54
- github.com/user/my-library # Good
55
- github.com/user/my-library-rs # Unnecessary
56
-
57
- # Though some do for disambiguation from other language versions
58
- github.com/rust-lang/rust # The rust repo itself uses "rust"
59
- ```
60
-
61
- ## Exceptions
62
-
63
- ```toml
64
- # Rare cases where disambiguation matters:
65
- # - If there's a widely-known non-Rust project with the same name
66
- # - Official Rust project repositories (rust-lang org)
67
-
68
- # But even then, consider alternatives:
69
- name = "fancy-lib" # Instead of fancy-rs
70
- name = "better-json" # Instead of json-rust
71
- name = "my-serde-impl" # Instead of serde-rs-fork
72
- ```
73
-
74
- ## See Also
75
-
76
- - [proj-workspace-deps](./proj-workspace-deps.md) - Cargo configuration
77
- - [doc-cargo-metadata](./doc-cargo-metadata.md) - Package metadata
78
- - [name-funcs-snake](./name-funcs-snake.md) - Naming conventions
@@ -1,76 +0,0 @@
1
- # name-funcs-snake
2
-
3
- > Use `snake_case` for functions, methods, variables, and modules
4
-
5
- ## Why It Matters
6
-
7
- Rust uses `snake_case` for "value-level" names—functions, methods, variables, modules. This convention is enforced by the compiler and distinguishes runtime entities from types. Consistent naming makes code scannable and predictable.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // CamelCase functions - compiler warns
13
- fn calculateTotal() -> f64 { ... } // warning: function `calculateTotal` should have a snake case name
14
- fn getUserName() -> String { ... } // warning
15
-
16
- // Inconsistent naming
17
- fn get_user() -> User { ... }
18
- fn fetchOrder() -> Order { ... } // Mixed conventions
19
- ```
20
-
21
- ## Good
22
-
23
- ```rust
24
- // snake_case for functions
25
- fn calculate_total() -> f64 { ... }
26
- fn get_user_name() -> String { ... }
27
- fn fetch_order() -> Order { ... }
28
-
29
- // snake_case for methods
30
- impl User {
31
- fn full_name(&self) -> String { ... }
32
- fn is_active(&self) -> bool { ... }
33
- fn set_email(&mut self, email: &str) { ... }
34
- }
35
-
36
- // snake_case for variables
37
- let user_count = 42;
38
- let max_connections = 100;
39
- let is_valid = true;
40
-
41
- // snake_case for modules
42
- mod user_service;
43
- mod http_client;
44
- mod json_parser;
45
- ```
46
-
47
- ## Acronyms in snake_case
48
-
49
- ```rust
50
- // Lowercase acronyms in snake_case
51
- fn parse_json() -> Json { ... } // Not parse_JSON
52
- fn connect_tcp() -> TcpStream { ... } // Not connect_TCP
53
- fn generate_uuid() -> Uuid { ... } // Not generate_UUID
54
-
55
- let http_response = fetch();
56
- let json_data = parse();
57
- ```
58
-
59
- ## Local Variables
60
-
61
- ```rust
62
- fn process_data(input_data: &[u8]) -> Result<Output, Error> {
63
- let raw_bytes = input_data;
64
- let decoded_string = decode(raw_bytes)?;
65
- let parsed_value = parse(&decoded_string)?;
66
- let final_result = transform(parsed_value)?;
67
-
68
- Ok(final_result)
69
- }
70
- ```
71
-
72
- ## See Also
73
-
74
- - [name-types-camel](./name-types-camel.md) - Type naming
75
- - [name-consts-screaming](./name-consts-screaming.md) - Constant naming
76
- - [name-lifetime-short](./name-lifetime-short.md) - Lifetime naming
@@ -1,123 +0,0 @@
1
- # name-into-ownership
2
-
3
- > Use `into_` prefix for ownership-consuming conversions
4
-
5
- ## Why It Matters
6
-
7
- The `into_` prefix signals "this method consumes self and returns something else." The original value is moved and no longer usable. This ownership transfer is usually cheap (no allocation), but the caller loses access to the original. Clear naming prevents "use after move" confusion.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- impl Wrapper {
13
- // Misleading: doesn't indicate ownership transfer
14
- fn get_inner(self) -> Inner {
15
- self.inner
16
- }
17
-
18
- // Misleading: suggests borrowing
19
- fn as_inner(self) -> Inner { // Takes self by value!
20
- self.inner
21
- }
22
- }
23
- ```
24
-
25
- ## Good
26
-
27
- ```rust
28
- impl Wrapper {
29
- // into_ clearly shows ownership transfer
30
- fn into_inner(self) -> Inner {
31
- self.inner
32
- }
33
- }
34
-
35
- // Usage is clear
36
- let wrapper = Wrapper::new(inner);
37
- let inner = wrapper.into_inner(); // wrapper is consumed
38
- // wrapper.foo(); // Error: use of moved value
39
- ```
40
-
41
- ## Standard Library Examples
42
-
43
- ```rust
44
- // All consume self and return owned data
45
- let string: String = "hello".to_string();
46
- let bytes: Vec<u8> = string.into_bytes(); // String consumed
47
-
48
- let path = PathBuf::from("/foo");
49
- let os_string: OsString = path.into_os_string(); // PathBuf consumed
50
-
51
- let boxed: Box<[i32]> = vec![1, 2, 3].into_boxed_slice(); // Vec consumed
52
-
53
- let vec: Vec<u8> = boxed.into_vec(); // Box consumed
54
- ```
55
-
56
- ## into_iter() Pattern
57
-
58
- ```rust
59
- let vec = vec![1, 2, 3];
60
-
61
- // into_iter consumes the collection
62
- for item in vec.into_iter() { // or just: for item in vec
63
- // item is i32, not &i32
64
- }
65
- // vec is consumed, can't use anymore
66
-
67
- // Contrast with iter() which borrows
68
- let vec = vec![1, 2, 3];
69
- for item in vec.iter() {
70
- // item is &i32
71
- }
72
- // vec still usable
73
- ```
74
-
75
- ## IntoIterator Trait
76
-
77
- ```rust
78
- impl IntoIterator for MyCollection {
79
- type Item = Element;
80
- type IntoIter = std::vec::IntoIter<Element>;
81
-
82
- fn into_iter(self) -> Self::IntoIter {
83
- self.elements.into_iter() // Consumes self
84
- }
85
- }
86
- ```
87
-
88
- ## Conversion Prefix Summary
89
-
90
- ```rust
91
- struct Buffer {
92
- data: Vec<u8>,
93
- name: String,
94
- }
95
-
96
- impl Buffer {
97
- // as_ : free borrow, returns reference
98
- fn as_slice(&self) -> &[u8] {
99
- &self.data
100
- }
101
-
102
- // to_ : allocates, creates new value
103
- fn to_vec(&self) -> Vec<u8> {
104
- self.data.clone()
105
- }
106
-
107
- // into_ : consumes self, usually cheap
108
- fn into_inner(self) -> Vec<u8> {
109
- self.data
110
- }
111
-
112
- // into_ : can destructure into parts
113
- fn into_parts(self) -> (Vec<u8>, String) {
114
- (self.data, self.name)
115
- }
116
- }
117
- ```
118
-
119
- ## See Also
120
-
121
- - [name-as-free](./name-as-free.md) - Borrowing conversions
122
- - [name-to-expensive](./name-to-expensive.md) - Allocating conversions
123
- - [api-from-not-into](./api-from-not-into.md) - From trait implementation
@@ -1,127 +0,0 @@
1
- # name-is-has-bool
2
-
3
- > Use `is_`, `has_`, `can_`, `should_` prefixes for boolean-returning methods
4
-
5
- ## Why It Matters
6
-
7
- Boolean methods answer yes/no questions. Prefixes like `is_`, `has_`, `can_` make the question explicit, so code reads naturally: `if user.is_active()`, `if buffer.has_remaining()`. Without prefixes, boolean methods are ambiguous and require reading documentation.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- impl User {
13
- // Unclear: does this check or set?
14
- fn active(&self) -> bool { ... }
15
-
16
- // Unclear: does this delete or check?
17
- fn deleted(&self) -> bool { ... }
18
-
19
- // Unclear return type
20
- fn admin(&self) -> bool { ... }
21
- }
22
-
23
- // Reading code is confusing
24
- if user.active() { ... } // Is this checking or activating?
25
- ```
26
-
27
- ## Good
28
-
29
- ```rust
30
- impl User {
31
- // Clear: answers "is the user active?"
32
- fn is_active(&self) -> bool { ... }
33
-
34
- // Clear: answers "is the user deleted?"
35
- fn is_deleted(&self) -> bool { ... }
36
-
37
- // Clear: answers "is the user an admin?"
38
- fn is_admin(&self) -> bool { ... }
39
-
40
- // Clear: answers "does the user have permission X?"
41
- fn has_permission(&self, perm: Permission) -> bool { ... }
42
-
43
- // Clear: answers "can the user edit?"
44
- fn can_edit(&self) -> bool { ... }
45
- }
46
-
47
- // Reads naturally
48
- if user.is_active() && user.has_permission(Permission::Write) {
49
- // ...
50
- }
51
- ```
52
-
53
- ## Common Prefixes
54
-
55
- | Prefix | Use For | Example |
56
- |--------|---------|---------|
57
- | `is_` | State/property check | `is_empty()`, `is_valid()`, `is_some()` |
58
- | `has_` | Possession/containment | `has_key()`, `has_children()`, `has_remaining()` |
59
- | `can_` | Capability/permission | `can_read()`, `can_write()`, `can_execute()` |
60
- | `should_` | Recommendation/policy | `should_retry()`, `should_cache()` |
61
- | `needs_` | Requirement | `needs_update()`, `needs_auth()` |
62
- | `will_` | Future action | `will_block()`, `will_overflow()` |
63
-
64
- ## Standard Library Examples
65
-
66
- ```rust
67
- // is_ prefix
68
- vec.is_empty()
69
- option.is_some()
70
- option.is_none()
71
- result.is_ok()
72
- result.is_err()
73
- char.is_alphabetic()
74
- str.is_ascii()
75
- path.is_file()
76
- path.is_dir()
77
-
78
- // has_ prefix (less common in std)
79
- iterator.has_next() // conceptual
80
-
81
- // Checking methods
82
- str.contains("foo") // Not is_ because takes argument
83
- str.starts_with("bar") // Descriptive verb phrase
84
- str.ends_with("baz")
85
- ```
86
-
87
- ## Negation
88
-
89
- ```rust
90
- // Prefer positive form with caller negation
91
- if !user.is_active() { ... }
92
-
93
- // Rather than negative method
94
- if user.is_inactive() { ... } // Avoid double negatives: !is_inactive()
95
-
96
- // Exception: when negative is the common case
97
- fn is_empty(&self) -> bool { ... } // Checking for empty is common
98
- fn is_not_empty(&self) -> bool { ... } // Rarely needed, use !is_empty()
99
- ```
100
-
101
- ## Boolean Fields
102
-
103
- ```rust
104
- struct Config {
105
- // Field names can omit prefix
106
- enabled: bool,
107
- verbose: bool,
108
- debug: bool,
109
- }
110
-
111
- impl Config {
112
- // But methods should have prefix
113
- fn is_enabled(&self) -> bool {
114
- self.enabled
115
- }
116
-
117
- fn is_verbose(&self) -> bool {
118
- self.verbose
119
- }
120
- }
121
- ```
122
-
123
- ## See Also
124
-
125
- - [name-no-get-prefix](./name-no-get-prefix.md) - Getter naming
126
- - [name-funcs-snake](./name-funcs-snake.md) - Function naming
127
- - [api-must-use](./api-must-use.md) - Boolean functions should be checked
@@ -1,129 +0,0 @@
1
- # name-iter-convention
2
-
3
- > Use iter/iter_mut/into_iter for iterator methods
4
-
5
- ## Why It Matters
6
-
7
- Rust has a standard convention for iterator method names that signals ownership semantics. Following this convention makes APIs predictable and enables the `for item in collection` syntax to work correctly.
8
-
9
- ## The Three Iterator Methods
10
-
11
- | Method | Returns | Ownership |
12
- |--------|---------|-----------|
13
- | `iter()` | `impl Iterator<Item = &T>` | Borrows collection |
14
- | `iter_mut()` | `impl Iterator<Item = &mut T>` | Mutably borrows |
15
- | `into_iter()` | `impl Iterator<Item = T>` | Consumes collection |
16
-
17
- ## Implementation
18
-
19
- ```rust
20
- struct MyCollection<T> {
21
- items: Vec<T>,
22
- }
23
-
24
- impl<T> MyCollection<T> {
25
- /// Returns an iterator over references.
26
- fn iter(&self) -> impl Iterator<Item = &T> {
27
- self.items.iter()
28
- }
29
-
30
- /// Returns an iterator over mutable references.
31
- fn iter_mut(&mut self) -> impl Iterator<Item = &mut T> {
32
- self.items.iter_mut()
33
- }
34
- }
35
-
36
- // IntoIterator trait for into_iter()
37
- impl<T> IntoIterator for MyCollection<T> {
38
- type Item = T;
39
- type IntoIter = std::vec::IntoIter<T>;
40
-
41
- fn into_iter(self) -> Self::IntoIter {
42
- self.items.into_iter()
43
- }
44
- }
45
-
46
- // Also implement for references
47
- impl<'a, T> IntoIterator for &'a MyCollection<T> {
48
- type Item = &'a T;
49
- type IntoIter = std::slice::Iter<'a, T>;
50
-
51
- fn into_iter(self) -> Self::IntoIter {
52
- self.items.iter()
53
- }
54
- }
55
-
56
- impl<'a, T> IntoIterator for &'a mut MyCollection<T> {
57
- type Item = &'a mut T;
58
- type IntoIter = std::slice::IterMut<'a, T>;
59
-
60
- fn into_iter(self) -> Self::IntoIter {
61
- self.items.iter_mut()
62
- }
63
- }
64
- ```
65
-
66
- ## Usage
67
-
68
- ```rust
69
- let collection = MyCollection { items: vec![1, 2, 3] };
70
-
71
- // Explicit methods
72
- for x in collection.iter() { } // Borrows
73
- for x in collection.iter_mut() { } // Mutably borrows
74
-
75
- // IntoIterator enables for loop syntax
76
- for x in &collection { } // Calls (&collection).into_iter()
77
- for x in &mut collection { } // Calls (&mut collection).into_iter()
78
- for x in collection { } // Consumes, calls collection.into_iter()
79
- ```
80
-
81
- ## Bad
82
-
83
- ```rust
84
- impl MyCollection<T> {
85
- // Non-standard names
86
- fn elements(&self) -> impl Iterator<Item = &T> { } // Should be iter()
87
- fn get_items(&self) -> impl Iterator<Item = &T> { } // Should be iter()
88
- fn iterate(&self) -> impl Iterator<Item = &T> { } // Should be iter()
89
- fn as_iter(&self) -> impl Iterator<Item = &T> { } // Should be iter()
90
- }
91
- ```
92
-
93
- ## Additional Iterator Methods
94
-
95
- ```rust
96
- impl MyCollection<T> {
97
- // Filter by predicate
98
- fn iter_valid(&self) -> impl Iterator<Item = &T> {
99
- self.iter().filter(|x| x.is_valid())
100
- }
101
-
102
- // Specific slice
103
- fn iter_range(&self, start: usize, end: usize) -> impl Iterator<Item = &T> {
104
- self.items[start..end].iter()
105
- }
106
- }
107
- ```
108
-
109
- ## Standard Library Examples
110
-
111
- ```rust
112
- // Vec, slice, arrays
113
- vec.iter() // &T
114
- vec.iter_mut() // &mut T
115
- vec.into_iter() // T
116
-
117
- // HashMap
118
- map.iter() // (&K, &V)
119
- map.iter_mut() // (&K, &mut V)
120
- map.into_iter() // (K, V)
121
- map.keys() // &K
122
- map.values() // &V
123
- ```
124
-
125
- ## See Also
126
-
127
- - [name-iter-type-match](./name-iter-type-match.md) - Iterator type naming
128
- - [name-iter-method](./name-iter-method.md) - Iterator method names
129
- - [perf-iter-over-index](./perf-iter-over-index.md) - Prefer iterators