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,99 +0,0 @@
1
- # name-acronym-word
2
-
3
- > Treat acronyms as words in identifiers: `HttpServer`, not `HTTPServer`
4
-
5
- ## Why It Matters
6
-
7
- When acronyms are written in ALL CAPS within identifiers, word boundaries become unclear: is `HTTPSHandler` "HTTPS Handler" or "HTTP SHandler"? Treating acronyms as words (`HttpsHandler`) maintains clear word boundaries and follows Rust convention. The standard library uses this consistently.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // ALL CAPS acronyms - unclear word boundaries
13
- struct HTTPServer { ... } // HTTP + Server or H + TTP + Server?
14
- struct TCPIPConnection { ... } // TCP + IP? Or other splits?
15
- struct JSONParser { ... }
16
- struct XMLHTTPRequest { ... } // Very confusing
17
-
18
- fn parseJSON(input: &str) { ... }
19
- fn connectTCP(addr: &str) { ... }
20
- ```
21
-
22
- ## Good
23
-
24
- ```rust
25
- // Acronyms as words - clear boundaries
26
- struct HttpServer { ... } // Http + Server
27
- struct TcpIpConnection { ... } // Tcp + Ip + Connection
28
- struct JsonParser { ... }
29
- struct XmlHttpRequest { ... }
30
-
31
- fn parse_json(input: &str) { ... }
32
- fn connect_tcp(addr: &str) { ... }
33
-
34
- // More examples
35
- struct Uuid { ... } // Not UUID
36
- struct Uri { ... } // Not URI
37
- struct Url { ... } // Not URL
38
- struct Html { ... } // Not HTML
39
- struct Css { ... } // Not CSS
40
- struct Api { ... } // Not API
41
- ```
42
-
43
- ## Standard Library Examples
44
-
45
- ```rust
46
- // std uses acronyms as words
47
- std::net::TcpStream // Not TCPStream
48
- std::net::TcpListener // Not TCPListener
49
- std::net::UdpSocket // Not UDPSocket
50
- std::net::IpAddr // Not IPAddr
51
- std::io::IoError // Not IOError (though Io is acceptable too)
52
- ```
53
-
54
- ## Two-Letter Acronyms
55
-
56
- ```rust
57
- // Two-letter acronyms can go either way
58
- struct Io { ... } // or IO - both acceptable
59
- struct Id { ... } // or ID - both acceptable
60
-
61
- // Preference: treat as word for consistency
62
- struct IoHandler { ... } // Preferred
63
- struct IdGenerator { ... } // Preferred
64
- ```
65
-
66
- ## In snake_case
67
-
68
- ```rust
69
- // Acronyms become lowercase in snake_case
70
- fn parse_json() { ... }
71
- fn connect_tcp() { ... }
72
- fn generate_uuid() { ... }
73
- fn fetch_http() { ... }
74
- fn encode_url() { ... }
75
-
76
- // Variables
77
- let json_response = fetch_json();
78
- let tcp_connection = connect_tcp();
79
- let user_id = generate_uuid();
80
- ```
81
-
82
- ## Mixed Cases
83
-
84
- ```rust
85
- // When acronym is part of compound
86
- struct HttpsConnection { ... } // Https (not HTTPS)
87
- struct Utf8String { ... } // Utf8 (not UTF8)
88
- struct Base64Encoder { ... } // Base64 as word
89
-
90
- // Multiple acronyms
91
- struct JsonApiClient { ... } // Json + Api + Client
92
- struct RestApiHandler { ... } // Rest + Api + Handler
93
- ```
94
-
95
- ## See Also
96
-
97
- - [name-types-camel](./name-types-camel.md) - Type naming conventions
98
- - [name-funcs-snake](./name-funcs-snake.md) - Function naming conventions
99
- - [name-consts-screaming](./name-consts-screaming.md) - Constant naming
@@ -1,104 +0,0 @@
1
- # name-as-free
2
-
3
- > `as_` prefix: free reference conversion
4
-
5
- ## Why It Matters
6
-
7
- Consistent naming helps users understand API cost. `as_` prefix signals a free (O(1), no allocation) conversion that returns a reference. This convention is used throughout the standard library.
8
-
9
- ## The Convention
10
-
11
- | Prefix | Cost | Ownership | Example |
12
- |--------|------|-----------|---------|
13
- | `as_` | Free | `&T -> &U` | `str::as_bytes()` |
14
- | `to_` | Expensive | `&T -> U` | `str::to_lowercase()` |
15
- | `into_` | Variable | `T -> U` | `String::into_bytes()` |
16
-
17
- ## Examples
18
-
19
- ```rust
20
- impl MyString {
21
- // as_ - free reference conversion
22
- pub fn as_str(&self) -> &str {
23
- &self.inner
24
- }
25
-
26
- pub fn as_bytes(&self) -> &[u8] {
27
- self.inner.as_bytes()
28
- }
29
- }
30
-
31
- impl Wrapper<T> {
32
- // as_ - returns reference to inner
33
- pub fn as_inner(&self) -> &T {
34
- &self.inner
35
- }
36
-
37
- pub fn as_inner_mut(&mut self) -> &mut T {
38
- &mut self.inner
39
- }
40
- }
41
- ```
42
-
43
- ## Standard Library Examples
44
-
45
- ```rust
46
- // String
47
- let s = String::from("hello");
48
- let bytes: &[u8] = s.as_bytes(); // Free, returns &[u8]
49
- let str_ref: &str = s.as_str(); // Free, returns &str
50
-
51
- // Vec
52
- let v = vec![1, 2, 3];
53
- let slice: &[i32] = v.as_slice(); // Free, returns &[i32]
54
-
55
- // Path
56
- let p = PathBuf::from("/home");
57
- let path: &Path = p.as_path(); // Free, returns &Path
58
-
59
- // OsString
60
- let os = OsString::from("hello");
61
- let os_str: &OsStr = os.as_os_str(); // Free, returns &OsStr
62
- ```
63
-
64
- ## Bad
65
-
66
- ```rust
67
- impl MyType {
68
- // BAD: as_ but allocates
69
- pub fn as_string(&self) -> String {
70
- format!("{}", self.value) // Allocates! Should be to_string()
71
- }
72
-
73
- // BAD: as_ but expensive
74
- pub fn as_processed(&self) -> &ProcessedData {
75
- // Actually does expensive computation
76
- }
77
- }
78
- ```
79
-
80
- ## Good
81
-
82
- ```rust
83
- impl MyType {
84
- // GOOD: Free reference
85
- pub fn as_str(&self) -> &str {
86
- &self.inner
87
- }
88
-
89
- // GOOD: to_ signals allocation
90
- pub fn to_string(&self) -> String {
91
- format!("{}", self.value)
92
- }
93
-
94
- // GOOD: into_ signals ownership transfer
95
- pub fn into_inner(self) -> Inner {
96
- self.inner
97
- }
98
- }
99
- ```
100
-
101
- ## See Also
102
-
103
- - [name-to-expensive](name-to-expensive.md) - `to_` prefix for expensive conversions
104
- - [name-into-ownership](name-into-ownership.md) - `into_` prefix for ownership transfer
@@ -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