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.
- package/README.md +47 -150
- package/package.json +1 -1
- package/template/agent/rules/scratch-scripts.md +37 -0
- package/template/agent/rules/superpowers.md +4 -51
- package/template/agent/skills/ai-integrated-product/SKILL.md +0 -57
- package/template/agent/skills/analytics-setup/SKILL.md +0 -51
- package/template/agent/skills/api-design/SKILL.md +0 -193
- package/template/agent/skills/app-store-optimizer/SKILL.md +0 -127
- package/template/agent/skills/auth-and-identity/SKILL.md +0 -167
- package/template/agent/skills/backend-developer/SKILL.md +0 -148
- package/template/agent/skills/bootstrapper-finance/SKILL.md +0 -55
- package/template/agent/skills/chrome-extension-developer/SKILL.md +0 -53
- package/template/agent/skills/community-manager/SKILL.md +0 -115
- package/template/agent/skills/content-marketer/SKILL.md +0 -111
- package/template/agent/skills/conversion-optimizer/SKILL.md +0 -142
- package/template/agent/skills/cto-architect/SKILL.md +0 -133
- package/template/agent/skills/customer-success-manager/SKILL.md +0 -126
- package/template/agent/skills/data-analyst/SKILL.md +0 -147
- package/template/agent/skills/devops-engineer/SKILL.md +0 -117
- package/template/agent/skills/email-infrastructure/SKILL.md +0 -164
- package/template/agent/skills/game-design/SKILL.md +0 -194
- package/template/agent/skills/game-developer/SKILL.md +0 -175
- package/template/agent/skills/growth-hacker/SKILL.md +0 -122
- package/template/agent/skills/idea-validator/SKILL.md +0 -55
- package/template/agent/skills/indie-legal/SKILL.md +0 -53
- package/template/agent/skills/influencer-marketer/SKILL.md +0 -141
- package/template/agent/skills/landing-page-builder/SKILL.md +0 -59
- package/template/agent/skills/launch-strategist/SKILL.md +0 -62
- package/template/agent/skills/market-researcher/SKILL.md +0 -53
- package/template/agent/skills/micro-saas-builder/SKILL.md +0 -56
- package/template/agent/skills/monetization-strategist/SKILL.md +0 -119
- package/template/agent/skills/paid-acquisition-specialist/SKILL.md +0 -119
- package/template/agent/skills/pricing-psychologist/SKILL.md +0 -58
- package/template/agent/skills/real-time-features/SKILL.md +0 -194
- package/template/agent/skills/retention-specialist/SKILL.md +0 -123
- package/template/agent/skills/rust-developer/SKILL.md +0 -281
- package/template/agent/skills/rust-developer/references/rust-rules/_sections.md +0 -231
- package/template/agent/skills/rust-developer/references/rust-rules/anti-clone-excessive.md +0 -124
- package/template/agent/skills/rust-developer/references/rust-rules/anti-collect-intermediate.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/anti-empty-catch.md +0 -132
- package/template/agent/skills/rust-developer/references/rust-rules/anti-expect-lazy.md +0 -95
- package/template/agent/skills/rust-developer/references/rust-rules/anti-format-hot-path.md +0 -141
- package/template/agent/skills/rust-developer/references/rust-rules/anti-index-over-iter.md +0 -125
- package/template/agent/skills/rust-developer/references/rust-rules/anti-lock-across-await.md +0 -127
- package/template/agent/skills/rust-developer/references/rust-rules/anti-over-abstraction.md +0 -120
- package/template/agent/skills/rust-developer/references/rust-rules/anti-panic-expected.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/anti-premature-optimize.md +0 -156
- package/template/agent/skills/rust-developer/references/rust-rules/anti-string-for-str.md +0 -122
- package/template/agent/skills/rust-developer/references/rust-rules/anti-stringly-typed.md +0 -167
- package/template/agent/skills/rust-developer/references/rust-rules/anti-type-erasure.md +0 -134
- package/template/agent/skills/rust-developer/references/rust-rules/anti-unwrap-abuse.md +0 -143
- package/template/agent/skills/rust-developer/references/rust-rules/anti-vec-for-slice.md +0 -121
- package/template/agent/skills/rust-developer/references/rust-rules/api-builder-must-use.md +0 -143
- package/template/agent/skills/rust-developer/references/rust-rules/api-builder-pattern.md +0 -187
- package/template/agent/skills/rust-developer/references/rust-rules/api-common-traits.md +0 -165
- package/template/agent/skills/rust-developer/references/rust-rules/api-default-impl.md +0 -177
- package/template/agent/skills/rust-developer/references/rust-rules/api-extension-trait.md +0 -163
- package/template/agent/skills/rust-developer/references/rust-rules/api-from-not-into.md +0 -146
- package/template/agent/skills/rust-developer/references/rust-rules/api-impl-asref.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/api-impl-into.md +0 -160
- package/template/agent/skills/rust-developer/references/rust-rules/api-must-use.md +0 -125
- package/template/agent/skills/rust-developer/references/rust-rules/api-newtype-safety.md +0 -162
- package/template/agent/skills/rust-developer/references/rust-rules/api-non-exhaustive.md +0 -177
- package/template/agent/skills/rust-developer/references/rust-rules/api-parse-dont-validate.md +0 -184
- package/template/agent/skills/rust-developer/references/rust-rules/api-sealed-trait.md +0 -168
- package/template/agent/skills/rust-developer/references/rust-rules/api-serde-optional.md +0 -182
- package/template/agent/skills/rust-developer/references/rust-rules/api-typestate.md +0 -199
- package/template/agent/skills/rust-developer/references/rust-rules/async-bounded-channel.md +0 -175
- package/template/agent/skills/rust-developer/references/rust-rules/async-broadcast-pubsub.md +0 -185
- package/template/agent/skills/rust-developer/references/rust-rules/async-cancellation-token.md +0 -203
- package/template/agent/skills/rust-developer/references/rust-rules/async-clone-before-await.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/async-join-parallel.md +0 -158
- package/template/agent/skills/rust-developer/references/rust-rules/async-joinset-structured.md +0 -195
- package/template/agent/skills/rust-developer/references/rust-rules/async-mpsc-queue.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/async-no-lock-await.md +0 -156
- package/template/agent/skills/rust-developer/references/rust-rules/async-oneshot-response.md +0 -191
- package/template/agent/skills/rust-developer/references/rust-rules/async-select-racing.md +0 -198
- package/template/agent/skills/rust-developer/references/rust-rules/async-spawn-blocking.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-fs.md +0 -167
- package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-runtime.md +0 -169
- package/template/agent/skills/rust-developer/references/rust-rules/async-try-join.md +0 -172
- package/template/agent/skills/rust-developer/references/rust-rules/async-watch-latest.md +0 -189
- package/template/agent/skills/rust-developer/references/rust-rules/doc-all-public.md +0 -113
- package/template/agent/skills/rust-developer/references/rust-rules/doc-cargo-metadata.md +0 -147
- package/template/agent/skills/rust-developer/references/rust-rules/doc-errors-section.md +0 -122
- package/template/agent/skills/rust-developer/references/rust-rules/doc-examples-section.md +0 -161
- package/template/agent/skills/rust-developer/references/rust-rules/doc-hidden-setup.md +0 -149
- package/template/agent/skills/rust-developer/references/rust-rules/doc-intra-links.md +0 -138
- package/template/agent/skills/rust-developer/references/rust-rules/doc-link-types.md +0 -169
- package/template/agent/skills/rust-developer/references/rust-rules/doc-module-inner.md +0 -116
- package/template/agent/skills/rust-developer/references/rust-rules/doc-panics-section.md +0 -128
- package/template/agent/skills/rust-developer/references/rust-rules/doc-question-mark.md +0 -136
- package/template/agent/skills/rust-developer/references/rust-rules/doc-safety-section.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/err-anyhow-app.md +0 -179
- package/template/agent/skills/rust-developer/references/rust-rules/err-context-chain.md +0 -144
- package/template/agent/skills/rust-developer/references/rust-rules/err-custom-type.md +0 -152
- package/template/agent/skills/rust-developer/references/rust-rules/err-doc-errors.md +0 -145
- package/template/agent/skills/rust-developer/references/rust-rules/err-expect-bugs-only.md +0 -133
- package/template/agent/skills/rust-developer/references/rust-rules/err-from-impl.md +0 -152
- package/template/agent/skills/rust-developer/references/rust-rules/err-lowercase-msg.md +0 -124
- package/template/agent/skills/rust-developer/references/rust-rules/err-no-unwrap-prod.md +0 -115
- package/template/agent/skills/rust-developer/references/rust-rules/err-question-mark.md +0 -151
- package/template/agent/skills/rust-developer/references/rust-rules/err-result-over-panic.md +0 -130
- package/template/agent/skills/rust-developer/references/rust-rules/err-source-chain.md +0 -155
- package/template/agent/skills/rust-developer/references/rust-rules/err-thiserror-lib.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/lint-cargo-metadata.md +0 -138
- package/template/agent/skills/rust-developer/references/rust-rules/lint-deny-correctness.md +0 -107
- package/template/agent/skills/rust-developer/references/rust-rules/lint-missing-docs.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/lint-pedantic-selective.md +0 -118
- package/template/agent/skills/rust-developer/references/rust-rules/lint-rustfmt-check.md +0 -157
- package/template/agent/skills/rust-developer/references/rust-rules/lint-unsafe-doc.md +0 -133
- package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-complexity.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-perf.md +0 -136
- package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-style.md +0 -135
- package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-suspicious.md +0 -122
- package/template/agent/skills/rust-developer/references/rust-rules/lint-workspace-lints.md +0 -172
- package/template/agent/skills/rust-developer/references/rust-rules/mem-arena-allocator.md +0 -168
- package/template/agent/skills/rust-developer/references/rust-rules/mem-arrayvec.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/mem-assert-type-size.md +0 -168
- package/template/agent/skills/rust-developer/references/rust-rules/mem-avoid-format.md +0 -147
- package/template/agent/skills/rust-developer/references/rust-rules/mem-box-large-variant.md +0 -158
- package/template/agent/skills/rust-developer/references/rust-rules/mem-boxed-slice.md +0 -139
- package/template/agent/skills/rust-developer/references/rust-rules/mem-clone-from.md +0 -147
- package/template/agent/skills/rust-developer/references/rust-rules/mem-compact-string.md +0 -149
- package/template/agent/skills/rust-developer/references/rust-rules/mem-reuse-collections.md +0 -174
- package/template/agent/skills/rust-developer/references/rust-rules/mem-smaller-integers.md +0 -159
- package/template/agent/skills/rust-developer/references/rust-rules/mem-smallvec.md +0 -138
- package/template/agent/skills/rust-developer/references/rust-rules/mem-thinvec.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/mem-with-capacity.md +0 -156
- package/template/agent/skills/rust-developer/references/rust-rules/mem-write-over-format.md +0 -172
- package/template/agent/skills/rust-developer/references/rust-rules/mem-zero-copy.md +0 -164
- package/template/agent/skills/rust-developer/references/rust-rules/name-acronym-word.md +0 -99
- package/template/agent/skills/rust-developer/references/rust-rules/name-as-free.md +0 -104
- package/template/agent/skills/rust-developer/references/rust-rules/name-consts-screaming.md +0 -94
- package/template/agent/skills/rust-developer/references/rust-rules/name-crate-no-rs.md +0 -78
- package/template/agent/skills/rust-developer/references/rust-rules/name-funcs-snake.md +0 -76
- package/template/agent/skills/rust-developer/references/rust-rules/name-into-ownership.md +0 -123
- package/template/agent/skills/rust-developer/references/rust-rules/name-is-has-bool.md +0 -127
- package/template/agent/skills/rust-developer/references/rust-rules/name-iter-convention.md +0 -129
- package/template/agent/skills/rust-developer/references/rust-rules/name-iter-method.md +0 -131
- package/template/agent/skills/rust-developer/references/rust-rules/name-iter-type-match.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/name-lifetime-short.md +0 -86
- package/template/agent/skills/rust-developer/references/rust-rules/name-no-get-prefix.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/name-to-expensive.md +0 -118
- package/template/agent/skills/rust-developer/references/rust-rules/name-type-param-single.md +0 -92
- package/template/agent/skills/rust-developer/references/rust-rules/name-types-camel.md +0 -65
- package/template/agent/skills/rust-developer/references/rust-rules/name-variants-camel.md +0 -101
- package/template/agent/skills/rust-developer/references/rust-rules/opt-bounds-check.md +0 -161
- package/template/agent/skills/rust-developer/references/rust-rules/opt-cache-friendly.md +0 -187
- package/template/agent/skills/rust-developer/references/rust-rules/opt-codegen-units.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/opt-cold-unlikely.md +0 -152
- package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-always-rare.md +0 -141
- package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-never-cold.md +0 -181
- package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-small.md +0 -160
- package/template/agent/skills/rust-developer/references/rust-rules/opt-likely-hint.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/opt-lto-release.md +0 -130
- package/template/agent/skills/rust-developer/references/rust-rules/opt-pgo-profile.md +0 -167
- package/template/agent/skills/rust-developer/references/rust-rules/opt-simd-portable.md +0 -144
- package/template/agent/skills/rust-developer/references/rust-rules/opt-target-cpu.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/own-arc-shared.md +0 -141
- package/template/agent/skills/rust-developer/references/rust-rules/own-borrow-over-clone.md +0 -95
- package/template/agent/skills/rust-developer/references/rust-rules/own-clone-explicit.md +0 -135
- package/template/agent/skills/rust-developer/references/rust-rules/own-copy-small.md +0 -124
- package/template/agent/skills/rust-developer/references/rust-rules/own-cow-conditional.md +0 -135
- package/template/agent/skills/rust-developer/references/rust-rules/own-lifetime-elision.md +0 -134
- package/template/agent/skills/rust-developer/references/rust-rules/own-move-large.md +0 -134
- package/template/agent/skills/rust-developer/references/rust-rules/own-mutex-interior.md +0 -105
- package/template/agent/skills/rust-developer/references/rust-rules/own-rc-single-thread.md +0 -65
- package/template/agent/skills/rust-developer/references/rust-rules/own-refcell-interior.md +0 -97
- package/template/agent/skills/rust-developer/references/rust-rules/own-rwlock-readers.md +0 -122
- package/template/agent/skills/rust-developer/references/rust-rules/own-slice-over-vec.md +0 -119
- package/template/agent/skills/rust-developer/references/rust-rules/perf-black-box-bench.md +0 -153
- package/template/agent/skills/rust-developer/references/rust-rules/perf-chain-avoid.md +0 -136
- package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-into.md +0 -133
- package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-once.md +0 -120
- package/template/agent/skills/rust-developer/references/rust-rules/perf-drain-reuse.md +0 -137
- package/template/agent/skills/rust-developer/references/rust-rules/perf-entry-api.md +0 -134
- package/template/agent/skills/rust-developer/references/rust-rules/perf-extend-batch.md +0 -150
- package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-lazy.md +0 -123
- package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-over-index.md +0 -113
- package/template/agent/skills/rust-developer/references/rust-rules/perf-profile-first.md +0 -175
- package/template/agent/skills/rust-developer/references/rust-rules/perf-release-profile.md +0 -149
- package/template/agent/skills/rust-developer/references/rust-rules/proj-bin-dir.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/proj-flat-small.md +0 -133
- package/template/agent/skills/rust-developer/references/rust-rules/proj-lib-main-split.md +0 -148
- package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-by-feature.md +0 -130
- package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-rs-dir.md +0 -120
- package/template/agent/skills/rust-developer/references/rust-rules/proj-prelude-module.md +0 -155
- package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-crate-internal.md +0 -139
- package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-super-parent.md +0 -135
- package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-use-reexport.md +0 -162
- package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-deps.md +0 -186
- package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-large.md +0 -162
- package/template/agent/skills/rust-developer/references/rust-rules/test-arrange-act-assert.md +0 -160
- package/template/agent/skills/rust-developer/references/rust-rules/test-cfg-test-module.md +0 -151
- package/template/agent/skills/rust-developer/references/rust-rules/test-criterion-bench.md +0 -171
- package/template/agent/skills/rust-developer/references/rust-rules/test-descriptive-names.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/test-doctest-examples.md +0 -168
- package/template/agent/skills/rust-developer/references/rust-rules/test-fixture-raii.md +0 -151
- package/template/agent/skills/rust-developer/references/rust-rules/test-integration-dir.md +0 -144
- package/template/agent/skills/rust-developer/references/rust-rules/test-mock-traits.md +0 -189
- package/template/agent/skills/rust-developer/references/rust-rules/test-mockall-mocking.md +0 -226
- package/template/agent/skills/rust-developer/references/rust-rules/test-proptest-properties.md +0 -161
- package/template/agent/skills/rust-developer/references/rust-rules/test-should-panic.md +0 -130
- package/template/agent/skills/rust-developer/references/rust-rules/test-tokio-async.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/test-use-super.md +0 -127
- package/template/agent/skills/rust-developer/references/rust-rules/type-enum-states.md +0 -154
- package/template/agent/skills/rust-developer/references/rust-rules/type-generic-bounds.md +0 -142
- package/template/agent/skills/rust-developer/references/rust-rules/type-never-diverge.md +0 -146
- package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-ids.md +0 -160
- package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-validated.md +0 -159
- package/template/agent/skills/rust-developer/references/rust-rules/type-no-stringly.md +0 -144
- package/template/agent/skills/rust-developer/references/rust-rules/type-option-nullable.md +0 -137
- package/template/agent/skills/rust-developer/references/rust-rules/type-phantom-marker.md +0 -188
- package/template/agent/skills/rust-developer/references/rust-rules/type-repr-transparent.md +0 -143
- package/template/agent/skills/rust-developer/references/rust-rules/type-result-fallible.md +0 -131
- package/template/agent/skills/saas-architect/SKILL.md +0 -139
- package/template/agent/skills/security-engineer/SKILL.md +0 -133
- package/template/agent/skills/seo-specialist/SKILL.md +0 -130
- 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
|
package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-crate-internal.md
DELETED
|
@@ -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
|