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,139 +0,0 @@
1
- # proj-pub-crate-internal
2
-
3
- > Use pub(crate) for internal APIs
4
-
5
- ## Why It Matters
6
-
7
- `pub(crate)` exposes items within the crate but hides them from external users. This creates clear boundaries between public API and internal implementation, preventing accidental breakage and reducing public API surface.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // Everything public - users depend on internals
13
- pub mod internal {
14
- pub struct InternalState {
15
- pub buffer: Vec<u8>, // Implementation detail exposed
16
- pub dirty: bool,
17
- }
18
-
19
- pub fn process_internal(state: &mut InternalState) {
20
- // Users can call this, creating coupling
21
- }
22
- }
23
-
24
- pub struct Widget {
25
- pub state: internal::InternalState, // Exposed!
26
- }
27
- ```
28
-
29
- ## Good
30
-
31
- ```rust
32
- // Internal module with crate visibility
33
- pub(crate) mod internal {
34
- pub(crate) struct InternalState {
35
- pub(crate) buffer: Vec<u8>,
36
- pub(crate) dirty: bool,
37
- }
38
-
39
- pub(crate) fn process_internal(state: &mut InternalState) {
40
- // Only callable within crate
41
- }
42
- }
43
-
44
- pub struct Widget {
45
- state: internal::InternalState, // Private field
46
- }
47
-
48
- impl Widget {
49
- pub fn new() -> Self {
50
- Self {
51
- state: internal::InternalState {
52
- buffer: Vec::new(),
53
- dirty: false,
54
- }
55
- }
56
- }
57
-
58
- pub fn do_something(&mut self) {
59
- internal::process_internal(&mut self.state);
60
- }
61
- }
62
- ```
63
-
64
- ## Visibility Levels
65
-
66
- | Visibility | Accessible From |
67
- |------------|-----------------|
68
- | `pub` | Everywhere |
69
- | `pub(crate)` | Current crate only |
70
- | `pub(super)` | Parent module only |
71
- | `pub(in path)` | Specific module path |
72
- | (private) | Current module only |
73
-
74
- ## Pattern: Internal Module
75
-
76
- ```rust
77
- // src/lib.rs
78
- mod internal; // Private module
79
- pub mod api; // Public API
80
-
81
- // src/internal.rs
82
- pub(crate) struct Helper;
83
- pub(crate) fn helper_function() -> Helper { Helper }
84
-
85
- // src/api.rs
86
- use crate::internal::{Helper, helper_function};
87
-
88
- pub struct PublicType {
89
- helper: Helper, // Uses internal type, but field is private
90
- }
91
- ```
92
-
93
- ## Pattern: Test Visibility
94
-
95
- ```rust
96
- pub struct Parser {
97
- // Private implementation
98
- state: ParserState,
99
- }
100
-
101
- // Expose for testing but not public API
102
- #[cfg(test)]
103
- pub(crate) fn debug_state(&self) -> &ParserState {
104
- &self.state
105
- }
106
-
107
- // Or use a dedicated test helper
108
- #[doc(hidden)]
109
- pub mod __test_helpers {
110
- pub use super::ParserState;
111
- }
112
- ```
113
-
114
- ## Pattern: Feature Module Internals
115
-
116
- ```rust
117
- // src/user/mod.rs
118
- mod repository; // Private
119
- mod service; // Private
120
-
121
- pub use service::UserService; // Only export the public API
122
-
123
- // repository and service are pub(crate) internally
124
- // so other modules in crate can use them if needed
125
- ```
126
-
127
- ## Benefits
128
-
129
- | Approach | API Stability | Flexibility |
130
- |----------|---------------|-------------|
131
- | All `pub` | Any change breaks users | None |
132
- | `pub(crate)` internals | Only `pub` items matter | Can refactor freely |
133
- | Private | Maximum encapsulation | Limits crate flexibility |
134
-
135
- ## See Also
136
-
137
- - [proj-pub-super-parent](./proj-pub-super-parent.md) - Parent-only visibility
138
- - [proj-pub-use-reexport](./proj-pub-use-reexport.md) - Clean re-exports
139
- - [api-non-exhaustive](./api-non-exhaustive.md) - Future-proof structs
@@ -1,135 +0,0 @@
1
- # proj-pub-super-parent
2
-
3
- > Use pub(super) for parent-only visibility
4
-
5
- ## Why It Matters
6
-
7
- `pub(super)` exposes items only to the immediate parent module. This is useful for helper functions and types that submodules share but shouldn't be visible to the rest of the crate.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // src/parser/mod.rs
13
- pub mod lexer;
14
- pub mod ast;
15
-
16
- // src/parser/lexer.rs
17
- pub fn internal_helper() { // Visible to entire crate!
18
- // Helper only needed by lexer and ast
19
- }
20
-
21
- pub(crate) struct Token { // Visible to entire crate
22
- // Only parser submodules need this
23
- }
24
- ```
25
-
26
- ## Good
27
-
28
- ```rust
29
- // src/parser/mod.rs
30
- pub mod lexer;
31
- pub mod ast;
32
-
33
- // Shared types for parser submodules only
34
- pub(super) struct Token {
35
- pub(super) kind: TokenKind,
36
- pub(super) span: Span,
37
- }
38
-
39
- pub(super) fn shared_helper() -> Token {
40
- // Only visible in parser/*
41
- }
42
-
43
- // src/parser/lexer.rs
44
- use super::{Token, shared_helper};
45
-
46
- pub fn lex(input: &str) -> Vec<Token> {
47
- shared_helper();
48
- // ...
49
- }
50
-
51
- // src/parser/ast.rs
52
- use super::Token;
53
-
54
- pub fn parse(tokens: Vec<Token>) -> Ast {
55
- // ...
56
- }
57
- ```
58
-
59
- ## Visibility Hierarchy
60
-
61
- ```
62
- src/
63
- ├── lib.rs # crate root
64
- ├── parser/
65
- │ ├── mod.rs # pub(super) items visible here
66
- │ ├── lexer.rs # can use pub(super) from mod.rs
67
- │ └── ast.rs # can use pub(super) from mod.rs
68
- └── codegen.rs # CANNOT see pub(super) parser items
69
- ```
70
-
71
- ## Pattern: Layered Visibility
72
-
73
- ```rust
74
- // src/database/mod.rs
75
- mod connection;
76
- mod query;
77
- mod pool;
78
-
79
- // Only this module's children can see
80
- pub(super) struct RawConnection { /* ... */ }
81
-
82
- // Entire crate can see
83
- pub(crate) struct Pool { /* ... */ }
84
-
85
- // Everyone can see
86
- pub struct Database { /* ... */ }
87
- ```
88
-
89
- ## Pattern: Test Helpers
90
-
91
- ```rust
92
- // src/parser/mod.rs
93
- mod lexer;
94
- mod ast;
95
-
96
- #[cfg(test)]
97
- mod tests {
98
- use super::*;
99
-
100
- // Test helper visible only to parser module's tests
101
- pub(super) fn make_test_token() -> Token {
102
- Token { kind: TokenKind::Test, span: Span::dummy() }
103
- }
104
- }
105
-
106
- // src/parser/lexer.rs
107
- #[cfg(test)]
108
- mod tests {
109
- use super::super::tests::make_test_token;
110
- // ...
111
- }
112
- ```
113
-
114
- ## Comparison
115
-
116
- | Visibility | Scope | Use Case |
117
- |------------|-------|----------|
118
- | `pub` | Everywhere | Public API |
119
- | `pub(crate)` | Crate-wide | Internal shared utilities |
120
- | `pub(super)` | Parent module | Submodule helpers |
121
- | `pub(in path)` | Specific path | Precise control |
122
- | (private) | Current module | Implementation details |
123
-
124
- ## When to Use pub(super)
125
-
126
- - Helper functions shared between sibling modules
127
- - Types used by submodules but not the rest of crate
128
- - Implementation details of a module group
129
- - Test utilities for a module tree
130
-
131
- ## See Also
132
-
133
- - [proj-pub-crate-internal](./proj-pub-crate-internal.md) - Crate visibility
134
- - [proj-pub-use-reexport](./proj-pub-use-reexport.md) - Re-export patterns
135
- - [proj-mod-by-feature](./proj-mod-by-feature.md) - Feature organization
@@ -1,162 +0,0 @@
1
- # proj-pub-use-reexport
2
-
3
- > Use pub use for clean public API
4
-
5
- ## Why It Matters
6
-
7
- `pub use` re-exports items from submodules at the current module level. This creates a flat, ergonomic public API while keeping internal organization flexible. Users import from one place; you can reorganize internals without breaking their code.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // lib.rs - Deep module paths exposed
13
- pub mod error;
14
- pub mod config;
15
- pub mod client;
16
- pub mod types;
17
-
18
- // Users must write:
19
- use my_crate::error::MyError;
20
- use my_crate::config::Config;
21
- use my_crate::client::http::HttpClient;
22
- use my_crate::types::request::Request;
23
- ```
24
-
25
- ## Good
26
-
27
- ```rust
28
- // lib.rs - Flat public API
29
- mod error;
30
- mod config;
31
- mod client;
32
- mod types;
33
-
34
- pub use error::MyError;
35
- pub use config::Config;
36
- pub use client::http::HttpClient;
37
- pub use types::request::Request;
38
-
39
- // Users write:
40
- use my_crate::{Config, HttpClient, MyError, Request};
41
- ```
42
-
43
- ## Pattern: Selective Re-export
44
-
45
- ```rust
46
- // src/lib.rs
47
- mod internal;
48
-
49
- // Only re-export what users need
50
- pub use internal::{
51
- PublicStruct,
52
- PublicTrait,
53
- public_function,
54
- };
55
-
56
- // Keep implementation details hidden
57
- // internal::helper_function is NOT exported
58
- ```
59
-
60
- ## Pattern: Rename on Re-export
61
-
62
- ```rust
63
- mod v1 {
64
- pub struct Client { /* old implementation */ }
65
- }
66
-
67
- mod v2 {
68
- pub struct Client { /* new implementation */ }
69
- }
70
-
71
- // Re-export with clear names
72
- pub use v2::Client;
73
- pub use v1::Client as LegacyClient;
74
- ```
75
-
76
- ## Pattern: Prelude Module
77
-
78
- ```rust
79
- // src/lib.rs
80
- pub mod prelude {
81
- pub use crate::{
82
- Config,
83
- Client,
84
- Error,
85
- Request,
86
- Response,
87
- };
88
- }
89
-
90
- // Users can glob import common items
91
- use my_crate::prelude::*;
92
- ```
93
-
94
- ## Pattern: Feature-Gated Re-exports
95
-
96
- ```rust
97
- // src/lib.rs
98
- mod core;
99
- mod serde_impl;
100
- mod async_impl;
101
-
102
- pub use core::*;
103
-
104
- #[cfg(feature = "serde")]
105
- pub use serde_impl::*;
106
-
107
- #[cfg(feature = "async")]
108
- pub use async_impl::*;
109
- ```
110
-
111
- ## Comparison: Module Structure vs Public API
112
-
113
- ```rust
114
- // Internal structure (complex)
115
- src/
116
- ├── transport/
117
- │ ├── http/
118
- │ │ └── client.rs // HttpClient
119
- │ └── grpc/
120
- │ └── client.rs // GrpcClient
121
- ├── auth/
122
- │ └── token.rs // Token
123
- └── lib.rs
124
-
125
- // Public API (flat)
126
- pub use transport::http::client::HttpClient;
127
- pub use transport::grpc::client::GrpcClient;
128
- pub use auth::token::Token;
129
-
130
- // Users see:
131
- my_crate::HttpClient
132
- my_crate::GrpcClient
133
- my_crate::Token
134
- ```
135
-
136
- ## Re-export External Types
137
-
138
- ```rust
139
- // Re-export dependencies users will need
140
- pub use bytes::Bytes;
141
- pub use http::{Method, StatusCode};
142
-
143
- // Now users don't need to depend on these crates directly
144
- ```
145
-
146
- ## Glob Re-exports
147
-
148
- Use sparingly:
149
-
150
- ```rust
151
- // OK for internal modules
152
- pub use internal::*;
153
-
154
- // Careful with external crates - pollutes namespace
155
- pub use serde::*; // Usually too broad
156
- ```
157
-
158
- ## See Also
159
-
160
- - [proj-prelude-module](./proj-prelude-module.md) - Prelude pattern
161
- - [proj-pub-crate-internal](./proj-pub-crate-internal.md) - Internal visibility
162
- - [api-non-exhaustive](./api-non-exhaustive.md) - API stability
@@ -1,186 +0,0 @@
1
- # proj-workspace-deps
2
-
3
- > Use workspace dependency inheritance for consistent versions across crates
4
-
5
- ## Why It Matters
6
-
7
- Multi-crate workspaces often have dependency version drift—different crates using different versions of the same dependency. Workspace dependency inheritance (Rust 1.64+) lets you declare dependencies once in the workspace `Cargo.toml` and inherit them in member crates, ensuring consistency.
8
-
9
- ## Bad
10
-
11
- ```toml
12
- # crate-a/Cargo.toml
13
- [dependencies]
14
- serde = "1.0.150"
15
- tokio = "1.25"
16
-
17
- # crate-b/Cargo.toml
18
- [dependencies]
19
- serde = "1.0.188" # Different version!
20
- tokio = "1.32" # Different version!
21
-
22
- # Version drift leads to:
23
- # - Larger binaries (multiple versions)
24
- # - Compilation time increase
25
- # - Subtle behavior differences
26
- ```
27
-
28
- ## Good
29
-
30
- ```toml
31
- # Root Cargo.toml
32
- [workspace]
33
- members = ["crate-a", "crate-b", "crate-c"]
34
-
35
- [workspace.dependencies]
36
- serde = { version = "1.0", features = ["derive"] }
37
- tokio = { version = "1.32", features = ["full"] }
38
- thiserror = "1.0"
39
- anyhow = "1.0"
40
- tracing = "0.1"
41
-
42
- # crate-a/Cargo.toml
43
- [dependencies]
44
- serde.workspace = true
45
- tokio.workspace = true
46
-
47
- # crate-b/Cargo.toml
48
- [dependencies]
49
- serde.workspace = true
50
- tokio.workspace = true
51
- thiserror.workspace = true
52
- ```
53
-
54
- ## Override Features
55
-
56
- ```toml
57
- # Root Cargo.toml
58
- [workspace.dependencies]
59
- tokio = { version = "1.32", features = ["rt-multi-thread"] }
60
-
61
- # crate-a/Cargo.toml - add extra features
62
- [dependencies]
63
- tokio = { workspace = true, features = ["net", "io-util"] }
64
- # Gets both workspace features AND local features
65
-
66
- # crate-b/Cargo.toml - minimal features
67
- [dependencies]
68
- tokio = { workspace = true } # Just workspace features
69
- ```
70
-
71
- ## Dev and Build Dependencies
72
-
73
- ```toml
74
- # Root Cargo.toml
75
- [workspace.dependencies]
76
- criterion = "0.5"
77
- proptest = "1.0"
78
- trybuild = "1.0"
79
- cc = "1.0"
80
-
81
- # crate-a/Cargo.toml
82
- [dev-dependencies]
83
- criterion.workspace = true
84
- proptest.workspace = true
85
-
86
- [build-dependencies]
87
- cc.workspace = true
88
- ```
89
-
90
- ## Internal Crate Dependencies
91
-
92
- ```toml
93
- # Root Cargo.toml
94
- [workspace.dependencies]
95
- # Internal crates
96
- my-core = { path = "crates/core" }
97
- my-utils = { path = "crates/utils" }
98
- my-derive = { path = "crates/derive" }
99
-
100
- # External crates
101
- serde = "1.0"
102
-
103
- # crate-a/Cargo.toml
104
- [dependencies]
105
- my-core.workspace = true
106
- my-utils.workspace = true
107
- serde.workspace = true
108
- ```
109
-
110
- ## Optional Dependencies
111
-
112
- ```toml
113
- # Root Cargo.toml
114
- [workspace.dependencies]
115
- serde = { version = "1.0", optional = true } # Won't work!
116
-
117
- # Optional must be set in member, not workspace
118
- [workspace.dependencies]
119
- serde = "1.0"
120
-
121
- # crate-a/Cargo.toml
122
- [dependencies]
123
- serde = { workspace = true, optional = true }
124
-
125
- [features]
126
- serde = ["dep:serde"]
127
- ```
128
-
129
- ## Complete Workspace Example
130
-
131
- ```toml
132
- # Root Cargo.toml
133
- [workspace]
134
- members = ["crates/*"]
135
- resolver = "2"
136
-
137
- [workspace.package]
138
- version = "0.1.0"
139
- edition = "2021"
140
- license = "MIT"
141
- repository = "https://github.com/user/repo"
142
-
143
- [workspace.dependencies]
144
- # Internal
145
- my-core = { path = "crates/core", version = "0.1" }
146
-
147
- # Async
148
- tokio = { version = "1.32", features = ["full"] }
149
- futures = "0.3"
150
-
151
- # Serialization
152
- serde = { version = "1.0", features = ["derive"] }
153
- serde_json = "1.0"
154
-
155
- # Error handling
156
- thiserror = "1.0"
157
- anyhow = "1.0"
158
-
159
- # Logging
160
- tracing = "0.1"
161
- tracing-subscriber = "0.3"
162
-
163
- # Testing
164
- proptest = "1.0"
165
- criterion = { version = "0.5", features = ["html_reports"] }
166
-
167
- # crates/core/Cargo.toml
168
- [package]
169
- name = "my-core"
170
- version.workspace = true
171
- edition.workspace = true
172
- license.workspace = true
173
-
174
- [dependencies]
175
- serde.workspace = true
176
- thiserror.workspace = true
177
-
178
- [dev-dependencies]
179
- proptest.workspace = true
180
- ```
181
-
182
- ## See Also
183
-
184
- - [proj-lib-main-split](./proj-lib-main-split.md) - Workspace structure
185
- - [api-serde-optional](./api-serde-optional.md) - Optional dependencies
186
- - [lint-deny-correctness](./lint-deny-correctness.md) - Workspace lints