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,155 +0,0 @@
1
- # proj-prelude-module
2
-
3
- > Create prelude module for common imports
4
-
5
- ## Why It Matters
6
-
7
- A `prelude` module collects the most commonly used types and traits for glob import. Users write `use my_crate::prelude::*` instead of many individual imports. This follows the pattern established by `std::prelude`.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // Users must import everything individually
13
- use my_crate::Client;
14
- use my_crate::Config;
15
- use my_crate::Error;
16
- use my_crate::Request;
17
- use my_crate::Response;
18
- use my_crate::traits::Handler;
19
- use my_crate::traits::Middleware;
20
- use my_crate::types::Method;
21
- ```
22
-
23
- ## Good
24
-
25
- ```rust
26
- // src/lib.rs
27
- pub mod prelude {
28
- pub use crate::{
29
- Client,
30
- Config,
31
- Error,
32
- Request,
33
- Response,
34
- };
35
- pub use crate::traits::{Handler, Middleware};
36
- pub use crate::types::Method;
37
- }
38
-
39
- // Users write:
40
- use my_crate::prelude::*;
41
- ```
42
-
43
- ## What to Include
44
-
45
- | Include | Don't Include |
46
- |---------|---------------|
47
- | Core types users always need | Rarely-used types |
48
- | Common traits | Implementation details |
49
- | Error types | Internal helpers |
50
- | Extension traits | Feature-gated items (usually) |
51
- | Type aliases | Everything |
52
-
53
- ## Example: Web Framework Prelude
54
-
55
- ```rust
56
- pub mod prelude {
57
- // Core request/response
58
- pub use crate::{Request, Response, Body};
59
-
60
- // Error handling
61
- pub use crate::Error;
62
-
63
- // Common traits
64
- pub use crate::traits::{FromRequest, IntoResponse};
65
-
66
- // Routing
67
- pub use crate::Router;
68
-
69
- // HTTP types
70
- pub use crate::http::{Method, StatusCode};
71
- }
72
- ```
73
-
74
- ## Example: Database Library Prelude
75
-
76
- ```rust
77
- pub mod prelude {
78
- // Connection and pool
79
- pub use crate::{Connection, Pool};
80
-
81
- // Query building
82
- pub use crate::query::{Query, Select, Insert, Update, Delete};
83
-
84
- // Traits for custom types
85
- pub use crate::traits::{FromRow, ToSql};
86
-
87
- // Error type
88
- pub use crate::Error;
89
- }
90
- ```
91
-
92
- ## Pattern: Tiered Preludes
93
-
94
- ```rust
95
- // Minimal prelude
96
- pub mod prelude {
97
- pub use crate::{Client, Config, Error};
98
- }
99
-
100
- // Full prelude for power users
101
- pub mod full_prelude {
102
- pub use crate::prelude::*;
103
- pub use crate::advanced::*;
104
- pub use crate::extensions::*;
105
- }
106
- ```
107
-
108
- ## Pattern: Feature-Gated Prelude Items
109
-
110
- ```rust
111
- pub mod prelude {
112
- pub use crate::{Client, Error};
113
-
114
- #[cfg(feature = "async")]
115
- pub use crate::async_client::AsyncClient;
116
-
117
- #[cfg(feature = "serde")]
118
- pub use crate::serde::{Serialize, Deserialize};
119
- }
120
- ```
121
-
122
- ## Guidelines
123
-
124
- 1. **Be conservative** - Only include truly common items
125
- 2. **Avoid conflicts** - Don't include names that might clash (e.g., `Error`)
126
- 3. **Document it** - List what's included in module docs
127
- 4. **Stay stable** - Removing items is breaking change
128
-
129
- ## Documenting the Prelude
130
-
131
- ```rust
132
- //! Common imports for convenient glob importing.
133
- //!
134
- //! # Usage
135
- //!
136
- //! ```
137
- //! use my_crate::prelude::*;
138
- //! ```
139
- //!
140
- //! # Contents
141
- //!
142
- //! This prelude re-exports:
143
- //! - [`Client`] - The main API client
144
- //! - [`Config`] - Client configuration
145
- //! - [`Error`] - Error type
146
- pub mod prelude {
147
- // ...
148
- }
149
- ```
150
-
151
- ## See Also
152
-
153
- - [proj-pub-use-reexport](./proj-pub-use-reexport.md) - Re-export patterns
154
- - [api-extension-trait](./api-extension-trait.md) - Extension traits
155
- - [doc-module-inner](./doc-module-inner.md) - Module documentation
@@ -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