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,136 +0,0 @@
1
- # lint-warn-perf
2
-
3
- > Enable clippy::perf for performance improvements
4
-
5
- ## Why It Matters
6
-
7
- The `clippy::perf` lint group catches performance anti-patterns—inefficient allocations, unnecessary copies, suboptimal API usage. While not all performance issues are critical, avoiding obvious inefficiencies is good practice.
8
-
9
- ## Configuration
10
-
11
- ```rust
12
- // In lib.rs or main.rs
13
- #![warn(clippy::perf)]
14
- ```
15
-
16
- Or in `Cargo.toml`:
17
-
18
- ```toml
19
- [lints.clippy]
20
- perf = "warn"
21
- ```
22
-
23
- ## What It Catches
24
-
25
- ### Unnecessary Allocations
26
-
27
- ```rust
28
- // WARN: Unnecessary to_string before into
29
- fn take_string(s: impl Into<String>) { }
30
- take_string("hello".to_string()); // Just use: "hello"
31
-
32
- // WARN: Box::new in return with deref coercion
33
- fn make_trait() -> Box<dyn Trait> {
34
- Box::new(concrete) // Could use Into
35
- }
36
-
37
- // WARN: Unnecessary vec! for iteration
38
- for x in vec![1, 2, 3] { } // Use array: [1, 2, 3]
39
- ```
40
-
41
- ### Inefficient Operations
42
-
43
- ```rust
44
- // WARN: Single-character string patterns
45
- s.starts_with("x") // Use char: 'x'
46
- s.contains("a") // Use char: 'a'
47
-
48
- // WARN: iter().nth(0) instead of first()
49
- iter.nth(0) // Use: iter.first() or iter.next()
50
-
51
- // WARN: Manual saturating arithmetic
52
- if x > i32::MAX - y { i32::MAX } else { x + y }
53
- // Use: x.saturating_add(y)
54
- ```
55
-
56
- ### Collection Inefficiencies
57
-
58
- ```rust
59
- // WARN: extend with a single element
60
- vec.extend(std::iter::once(item)); // Use: vec.push(item)
61
-
62
- // WARN: Inefficient to_vec
63
- slice.iter().cloned().collect::<Vec<_>>() // Use: slice.to_vec()
64
-
65
- // WARN: Manual string concatenation
66
- let s = format!("{}{}", a, b); // When both are &str, use: a.to_owned() + b
67
- ```
68
-
69
- ## Notable Lints in This Group
70
-
71
- | Lint | Improvement |
72
- |------|-------------|
73
- | `box_collection` | Use `Vec<T>` not `Box<Vec<T>>` |
74
- | `iter_nth` | Use `.get(n)` or `.next()` |
75
- | `large_enum_variant` | Box large variants |
76
- | `manual_memcpy` | Use slice copy methods |
77
- | `redundant_allocation` | Remove double boxing |
78
- | `single_char_pattern` | Use `char` not `&str` |
79
- | `slow_vector_initialization` | Use `vec![0; n]` |
80
- | `unnecessary_to_owned` | Remove redundant `.to_owned()` |
81
-
82
- ## Examples
83
-
84
- ```rust
85
- // Before (perf warnings)
86
- fn process(input: &str) -> String {
87
- let parts: Vec<_> = input.split(",").collect();
88
- let mut result = String::new();
89
- for part in parts.iter() {
90
- if part.starts_with(" ") {
91
- result = result + &part.trim().to_string();
92
- }
93
- }
94
- result
95
- }
96
-
97
- // After (optimized)
98
- fn process(input: &str) -> String {
99
- input.split(',')
100
- .filter(|part| part.starts_with(' '))
101
- .map(str::trim)
102
- .collect()
103
- }
104
- ```
105
-
106
- ## Allocation Patterns
107
-
108
- ```rust
109
- // Unnecessary allocation
110
- let vec: Vec<i32> = vec![]; // Creates capacity
111
- let vec: Vec<i32> = Vec::new(); // No allocation
112
-
113
- // Pre-allocation
114
- let mut vec = Vec::with_capacity(100); // One allocation
115
- for i in 0..100 {
116
- vec.push(i); // No reallocation
117
- }
118
- ```
119
-
120
- ## String Patterns
121
-
122
- ```rust
123
- // Slow: str pattern
124
- s.contains("x");
125
- s.find("y");
126
-
127
- // Fast: char pattern
128
- s.contains('x');
129
- s.find('y');
130
- ```
131
-
132
- ## See Also
133
-
134
- - [lint-warn-complexity](./lint-warn-complexity.md) - Complexity warnings
135
- - [mem-with-capacity](./mem-with-capacity.md) - Pre-allocation
136
- - [perf-profile-first](./perf-profile-first.md) - Profile before optimizing
@@ -1,135 +0,0 @@
1
- # lint-warn-style
2
-
3
- > Enable clippy::style for idiomatic code
4
-
5
- ## Why It Matters
6
-
7
- The `clippy::style` lint group enforces idiomatic Rust patterns. While not bugs, style violations make code harder to read and maintain. Consistent style helps teams work together and makes code easier to review.
8
-
9
- ## Configuration
10
-
11
- ```rust
12
- // In lib.rs or main.rs
13
- #![warn(clippy::style)]
14
- ```
15
-
16
- Or in `Cargo.toml`:
17
-
18
- ```toml
19
- [lints.clippy]
20
- style = "warn"
21
- ```
22
-
23
- ## What It Catches
24
-
25
- ### Redundant Code
26
-
27
- ```rust
28
- // WARN: Redundant clone on Copy type
29
- let x = 5;
30
- let y = x.clone(); // Just use: let y = x;
31
-
32
- // WARN: Redundant closure
33
- iter.map(|x| foo(x)) // Just use: iter.map(foo)
34
-
35
- // WARN: Redundant pattern matching
36
- match result {
37
- Ok(x) => Ok(x),
38
- Err(e) => Err(e),
39
- } // Just return result
40
- ```
41
-
42
- ### Non-Idiomatic Patterns
43
-
44
- ```rust
45
- // WARN: Should use if let
46
- match option {
47
- Some(x) => do_something(x),
48
- None => {},
49
- }
50
- // Better: if let Some(x) = option { do_something(x) }
51
-
52
- // WARN: Should use or_else
53
- let value = if option.is_some() {
54
- option.unwrap()
55
- } else {
56
- default()
57
- };
58
- // Better: option.unwrap_or_else(default)
59
-
60
- // WARN: Collapsible if statements
61
- if condition1 {
62
- if condition2 {
63
- do_something();
64
- }
65
- }
66
- // Better: if condition1 && condition2 { do_something() }
67
- ```
68
-
69
- ### Naming Issues
70
-
71
- ```rust
72
- // WARN: Function should not start with 'is_' returning non-bool
73
- fn is_valid() -> i32 { 0 } // Misleading name
74
-
75
- // WARN: Method should not be named 'new' without returning Self
76
- impl Foo {
77
- fn new() -> Bar { Bar } // Confusing
78
- }
79
- ```
80
-
81
- ## Notable Lints in This Group
82
-
83
- | Lint | Better Pattern |
84
- |------|---------------|
85
- | `len_zero` | Use `is_empty()` instead of `len() == 0` |
86
- | `redundant_field_names` | Use shorthand `{ x }` not `{ x: x }` |
87
- | `unused_unit` | Remove `-> ()` and trailing `()` |
88
- | `collapsible_if` | Combine nested ifs with `&&` |
89
- | `single_match` | Use `if let` instead |
90
- | `match_like_matches_macro` | Use `matches!()` macro |
91
- | `needless_return` | Remove explicit `return` at end |
92
- | `question_mark` | Use `?` instead of `match` |
93
-
94
- ## Examples
95
-
96
- ```rust
97
- // Before (style warnings)
98
- fn process(data: Vec<i32>) -> Option<i32> {
99
- if data.len() == 0 {
100
- return None;
101
- }
102
- let first = match data.first() {
103
- Some(x) => x,
104
- None => return None,
105
- };
106
- return Some(*first);
107
- }
108
-
109
- // After (idiomatic)
110
- fn process(data: Vec<i32>) -> Option<i32> {
111
- if data.is_empty() {
112
- return None;
113
- }
114
- let first = data.first()?;
115
- Some(*first)
116
- }
117
- ```
118
-
119
- ## Selective Allowance
120
-
121
- Some style lints may conflict with team preferences:
122
-
123
- ```rust
124
- // If your team prefers explicit returns
125
- #[allow(clippy::needless_return)]
126
- fn explicit_return() -> i32 {
127
- return 42;
128
- }
129
- ```
130
-
131
- ## See Also
132
-
133
- - [lint-warn-suspicious](./lint-warn-suspicious.md) - Suspicious patterns
134
- - [lint-warn-complexity](./lint-warn-complexity.md) - Complexity warnings
135
- - [lint-rustfmt-check](./lint-rustfmt-check.md) - Formatting checks
@@ -1,122 +0,0 @@
1
- # lint-warn-suspicious
2
-
3
- > Enable clippy::suspicious for likely bugs
4
-
5
- ## Why It Matters
6
-
7
- The `clippy::suspicious` lint group catches code patterns that are syntactically valid but almost always wrong. These are potential bugs that deserve investigation. Enabling this group as a warning helps catch mistakes early.
8
-
9
- ## Configuration
10
-
11
- ```rust
12
- // In lib.rs or main.rs
13
- #![warn(clippy::suspicious)]
14
- ```
15
-
16
- Or in `Cargo.toml`:
17
-
18
- ```toml
19
- [lints.clippy]
20
- suspicious = "warn"
21
- ```
22
-
23
- Or in `clippy.toml`:
24
-
25
- ```toml
26
- warn = ["clippy::suspicious"]
27
- ```
28
-
29
- ## What It Catches
30
-
31
- ### Suspicious Arithmetic
32
-
33
- ```rust
34
- // WARN: Suspicious use of + in a << expression
35
- let bits = 1 << 4 + 1; // Probably meant (1 << 4) + 1 or 1 << (4 + 1)
36
-
37
- // WARN: Suspicious use of | in a + expression
38
- let value = x | 1 + y; // Probably meant (x | 1) + y or x | (1 + y)
39
- ```
40
-
41
- ### Suspicious Comparisons
42
-
43
- ```rust
44
- // WARN: Almost swapped operands in a comparison
45
- if 5 < x && x < 3 { } // Impossible condition
46
-
47
- // WARN: Suspicious assignment in a condition
48
- if (x = 5) { } // Probably meant x == 5
49
- ```
50
-
51
- ### Suspicious Method Calls
52
-
53
- ```rust
54
- // WARN: Suspicious map usage
55
- let _: Vec<_> = vec.iter().map(|x| {
56
- println!("{}", x); // Side effect in map
57
- x
58
- }).collect(); // Use for_each instead
59
-
60
- // WARN: Suspicious string formatting
61
- let s = format!("{}", format!("{}", x)); // Redundant nested format
62
- ```
63
-
64
- ### Suspicious Casts
65
-
66
- ```rust
67
- // WARN: Suspicious use of not on a bool
68
- let inverted = !x as i32; // Did you mean (!x) as i32 or !(x as i32)?
69
-
70
- // WARN: Cast of float to int may lose precision
71
- let n = 3.14_f64 as i32; // May want .round() first
72
- ```
73
-
74
- ## Notable Lints in This Group
75
-
76
- | Lint | Description |
77
- |------|-------------|
78
- | `suspicious_arithmetic_impl` | Unusual operator in arithmetic trait |
79
- | `suspicious_assignment_formatting` | Looks like typo in assignment |
80
- | `suspicious_else_formatting` | Else on wrong line |
81
- | `suspicious_map` | Map with side effects |
82
- | `suspicious_op_assign_impl` | Unusual op-assign implementation |
83
- | `suspicious_splitn` | splitn that can't produce n parts |
84
- | `suspicious_unary_op_formatting` | Confusing unary operator spacing |
85
-
86
- ## Example Catches
87
-
88
- ```rust
89
- // Caught: Suspicious double negation
90
- let value = --x; // In Rust, this is -(-x), not pre-decrement
91
-
92
- // Caught: Suspicious modulo
93
- let remainder = x % 1; // Always 0 for integers
94
-
95
- // Caught: Suspicious else formatting
96
- if condition {
97
- do_something();
98
- }
99
- else { // Weird formatting, might be a mistake
100
- do_other();
101
- }
102
- ```
103
-
104
- ## When to Allow
105
-
106
- Rarely. If you need to suppress, document why:
107
-
108
- ```rust
109
- #[allow(clippy::suspicious_arithmetic_impl)]
110
- impl Mul for Matrix {
111
- // Custom matrix multiplication using + for reduction step
112
- fn mul(self, rhs: Self) -> Self::Output {
113
- // ...
114
- }
115
- }
116
- ```
117
-
118
- ## See Also
119
-
120
- - [lint-deny-correctness](./lint-deny-correctness.md) - Deny definite bugs
121
- - [lint-warn-style](./lint-warn-style.md) - Style warnings
122
- - [lint-warn-complexity](./lint-warn-complexity.md) - Complexity warnings
@@ -1,172 +0,0 @@
1
- # lint-workspace-lints
2
-
3
- > Configure lints at workspace level for consistent enforcement
4
-
5
- ## Why It Matters
6
-
7
- Without centralized lint configuration, each crate develops its own standards (or none). Workspace-level lints (Rust 1.74+) ensure consistent code quality across all crates. Denied lints catch issues in CI before they reach production.
8
-
9
- ## Bad
10
-
11
- ```toml
12
- # crate-a/Cargo.toml - strict
13
- [lints.clippy]
14
- unwrap_used = "deny"
15
-
16
- # crate-b/Cargo.toml - lenient
17
- # No lint config
18
-
19
- # crate-c/Cargo.toml - different
20
- [lints.clippy]
21
- unwrap_used = "warn"
22
-
23
- # Inconsistent enforcement, some issues slip through
24
- ```
25
-
26
- ## Good
27
-
28
- ```toml
29
- # Root Cargo.toml
30
- [workspace.lints.rust]
31
- unsafe_code = "deny"
32
- missing_docs = "warn"
33
-
34
- [workspace.lints.clippy]
35
- # Correctness
36
- unwrap_used = "deny"
37
- expect_used = "warn"
38
- panic = "deny"
39
-
40
- # Style
41
- needless_pass_by_value = "warn"
42
- redundant_clone = "warn"
43
-
44
- # Complexity
45
- cognitive_complexity = "warn"
46
-
47
- [workspace.lints.rustdoc]
48
- broken_intra_doc_links = "deny"
49
-
50
- # crate-a/Cargo.toml
51
- [lints]
52
- workspace = true
53
-
54
- # crate-b/Cargo.toml
55
- [lints]
56
- workspace = true
57
- ```
58
-
59
- ## Recommended Lint Configuration
60
-
61
- ```toml
62
- # Root Cargo.toml
63
- [workspace.lints.rust]
64
- # Safety
65
- unsafe_code = "deny"
66
- missing_debug_implementations = "warn"
67
-
68
- # Quality
69
- unused_results = "warn"
70
- unused_qualifications = "warn"
71
-
72
- [workspace.lints.clippy]
73
- # === Correctness (deny) ===
74
- correctness = { level = "deny", priority = -1 }
75
-
76
- # === Suspicious (deny) ===
77
- suspicious = { level = "deny", priority = -1 }
78
-
79
- # === Style (warn) ===
80
- style = { level = "warn", priority = -1 }
81
-
82
- # === Complexity (warn) ===
83
- complexity = { level = "warn", priority = -1 }
84
-
85
- # === Perf (warn) ===
86
- perf = { level = "warn", priority = -1 }
87
-
88
- # === Pedantic (selective) ===
89
- # Not all pedantic lints are useful
90
- doc_markdown = "warn"
91
- needless_pass_by_value = "warn"
92
- redundant_closure_for_method_calls = "warn"
93
- semicolon_if_nothing_returned = "warn"
94
-
95
- # === Nursery (selective) ===
96
- cognitive_complexity = "warn"
97
- useless_let_if_seq = "warn"
98
-
99
- # === Restriction (selective) ===
100
- unwrap_used = "deny"
101
- expect_used = "warn"
102
- dbg_macro = "warn"
103
- print_stdout = "warn" # Use logging instead
104
- todo = "warn"
105
-
106
- [workspace.lints.rustdoc]
107
- broken_intra_doc_links = "deny"
108
- private_intra_doc_links = "warn"
109
- ```
110
-
111
- ## Per-Crate Overrides
112
-
113
- ```toml
114
- # crate-with-binary/Cargo.toml
115
- [lints]
116
- workspace = true
117
-
118
- # Binary entry point can use unwrap
119
- [lints.clippy]
120
- unwrap_used = "allow"
121
-
122
- # test-utils/Cargo.toml
123
- [lints]
124
- workspace = true
125
-
126
- # Test utilities can print
127
- [lints.clippy]
128
- print_stdout = "allow"
129
- ```
130
-
131
- ## CI Integration
132
-
133
- ```yaml
134
- # .github/workflows/ci.yml
135
- jobs:
136
- lint:
137
- runs-on: ubuntu-latest
138
- steps:
139
- - uses: actions/checkout@v4
140
- - uses: dtolnay/rust-toolchain@stable
141
- with:
142
- components: clippy
143
-
144
- - name: Clippy
145
- run: cargo clippy --workspace --all-targets -- -D warnings
146
-
147
- - name: Rustdoc
148
- run: RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps
149
- ```
150
-
151
- ## Lint Categories
152
-
153
- ```toml
154
- # Category-level configuration
155
- [workspace.lints.clippy]
156
- # All lints in category at once
157
- correctness = { level = "deny", priority = -1 }
158
- suspicious = { level = "deny", priority = -1 }
159
- style = { level = "warn", priority = -1 }
160
- complexity = { level = "warn", priority = -1 }
161
- perf = { level = "warn", priority = -1 }
162
- pedantic = { level = "warn", priority = -1 }
163
-
164
- # Then override specific lints (higher priority)
165
- missing_errors_doc = "allow" # Override pedantic
166
- ```
167
-
168
- ## See Also
169
-
170
- - [lint-deny-correctness](./lint-deny-correctness.md) - Critical lints
171
- - [proj-workspace-deps](./proj-workspace-deps.md) - Workspace configuration
172
- - [anti-unwrap-abuse](./anti-unwrap-abuse.md) - unwrap lints