agy-superpowers 5.1.4 → 5.1.6

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 (185) hide show
  1. package/package.json +1 -1
  2. package/template/agent/rules/debug-confirmation-policy.md +34 -0
  3. package/template/agent/rules/language-matching.md +32 -0
  4. package/template/agent/skills/rust-developer/SKILL.md +281 -0
  5. package/template/agent/skills/rust-developer/references/rust-rules/_sections.md +231 -0
  6. package/template/agent/skills/rust-developer/references/rust-rules/anti-clone-excessive.md +124 -0
  7. package/template/agent/skills/rust-developer/references/rust-rules/anti-collect-intermediate.md +131 -0
  8. package/template/agent/skills/rust-developer/references/rust-rules/anti-empty-catch.md +132 -0
  9. package/template/agent/skills/rust-developer/references/rust-rules/anti-expect-lazy.md +95 -0
  10. package/template/agent/skills/rust-developer/references/rust-rules/anti-format-hot-path.md +141 -0
  11. package/template/agent/skills/rust-developer/references/rust-rules/anti-index-over-iter.md +125 -0
  12. package/template/agent/skills/rust-developer/references/rust-rules/anti-lock-across-await.md +127 -0
  13. package/template/agent/skills/rust-developer/references/rust-rules/anti-over-abstraction.md +120 -0
  14. package/template/agent/skills/rust-developer/references/rust-rules/anti-panic-expected.md +131 -0
  15. package/template/agent/skills/rust-developer/references/rust-rules/anti-premature-optimize.md +156 -0
  16. package/template/agent/skills/rust-developer/references/rust-rules/anti-string-for-str.md +122 -0
  17. package/template/agent/skills/rust-developer/references/rust-rules/anti-stringly-typed.md +167 -0
  18. package/template/agent/skills/rust-developer/references/rust-rules/anti-type-erasure.md +134 -0
  19. package/template/agent/skills/rust-developer/references/rust-rules/anti-unwrap-abuse.md +143 -0
  20. package/template/agent/skills/rust-developer/references/rust-rules/anti-vec-for-slice.md +121 -0
  21. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-must-use.md +143 -0
  22. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-pattern.md +187 -0
  23. package/template/agent/skills/rust-developer/references/rust-rules/api-common-traits.md +165 -0
  24. package/template/agent/skills/rust-developer/references/rust-rules/api-default-impl.md +177 -0
  25. package/template/agent/skills/rust-developer/references/rust-rules/api-extension-trait.md +163 -0
  26. package/template/agent/skills/rust-developer/references/rust-rules/api-from-not-into.md +146 -0
  27. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-asref.md +142 -0
  28. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-into.md +160 -0
  29. package/template/agent/skills/rust-developer/references/rust-rules/api-must-use.md +125 -0
  30. package/template/agent/skills/rust-developer/references/rust-rules/api-newtype-safety.md +162 -0
  31. package/template/agent/skills/rust-developer/references/rust-rules/api-non-exhaustive.md +177 -0
  32. package/template/agent/skills/rust-developer/references/rust-rules/api-parse-dont-validate.md +184 -0
  33. package/template/agent/skills/rust-developer/references/rust-rules/api-sealed-trait.md +168 -0
  34. package/template/agent/skills/rust-developer/references/rust-rules/api-serde-optional.md +182 -0
  35. package/template/agent/skills/rust-developer/references/rust-rules/api-typestate.md +199 -0
  36. package/template/agent/skills/rust-developer/references/rust-rules/async-bounded-channel.md +175 -0
  37. package/template/agent/skills/rust-developer/references/rust-rules/async-broadcast-pubsub.md +185 -0
  38. package/template/agent/skills/rust-developer/references/rust-rules/async-cancellation-token.md +203 -0
  39. package/template/agent/skills/rust-developer/references/rust-rules/async-clone-before-await.md +171 -0
  40. package/template/agent/skills/rust-developer/references/rust-rules/async-join-parallel.md +158 -0
  41. package/template/agent/skills/rust-developer/references/rust-rules/async-joinset-structured.md +195 -0
  42. package/template/agent/skills/rust-developer/references/rust-rules/async-mpsc-queue.md +171 -0
  43. package/template/agent/skills/rust-developer/references/rust-rules/async-no-lock-await.md +156 -0
  44. package/template/agent/skills/rust-developer/references/rust-rules/async-oneshot-response.md +191 -0
  45. package/template/agent/skills/rust-developer/references/rust-rules/async-select-racing.md +198 -0
  46. package/template/agent/skills/rust-developer/references/rust-rules/async-spawn-blocking.md +154 -0
  47. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-fs.md +167 -0
  48. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-runtime.md +169 -0
  49. package/template/agent/skills/rust-developer/references/rust-rules/async-try-join.md +172 -0
  50. package/template/agent/skills/rust-developer/references/rust-rules/async-watch-latest.md +189 -0
  51. package/template/agent/skills/rust-developer/references/rust-rules/doc-all-public.md +113 -0
  52. package/template/agent/skills/rust-developer/references/rust-rules/doc-cargo-metadata.md +147 -0
  53. package/template/agent/skills/rust-developer/references/rust-rules/doc-errors-section.md +122 -0
  54. package/template/agent/skills/rust-developer/references/rust-rules/doc-examples-section.md +161 -0
  55. package/template/agent/skills/rust-developer/references/rust-rules/doc-hidden-setup.md +149 -0
  56. package/template/agent/skills/rust-developer/references/rust-rules/doc-intra-links.md +138 -0
  57. package/template/agent/skills/rust-developer/references/rust-rules/doc-link-types.md +169 -0
  58. package/template/agent/skills/rust-developer/references/rust-rules/doc-module-inner.md +116 -0
  59. package/template/agent/skills/rust-developer/references/rust-rules/doc-panics-section.md +128 -0
  60. package/template/agent/skills/rust-developer/references/rust-rules/doc-question-mark.md +136 -0
  61. package/template/agent/skills/rust-developer/references/rust-rules/doc-safety-section.md +131 -0
  62. package/template/agent/skills/rust-developer/references/rust-rules/err-anyhow-app.md +179 -0
  63. package/template/agent/skills/rust-developer/references/rust-rules/err-context-chain.md +144 -0
  64. package/template/agent/skills/rust-developer/references/rust-rules/err-custom-type.md +152 -0
  65. package/template/agent/skills/rust-developer/references/rust-rules/err-doc-errors.md +145 -0
  66. package/template/agent/skills/rust-developer/references/rust-rules/err-expect-bugs-only.md +133 -0
  67. package/template/agent/skills/rust-developer/references/rust-rules/err-from-impl.md +152 -0
  68. package/template/agent/skills/rust-developer/references/rust-rules/err-lowercase-msg.md +124 -0
  69. package/template/agent/skills/rust-developer/references/rust-rules/err-no-unwrap-prod.md +115 -0
  70. package/template/agent/skills/rust-developer/references/rust-rules/err-question-mark.md +151 -0
  71. package/template/agent/skills/rust-developer/references/rust-rules/err-result-over-panic.md +130 -0
  72. package/template/agent/skills/rust-developer/references/rust-rules/err-source-chain.md +155 -0
  73. package/template/agent/skills/rust-developer/references/rust-rules/err-thiserror-lib.md +171 -0
  74. package/template/agent/skills/rust-developer/references/rust-rules/lint-cargo-metadata.md +138 -0
  75. package/template/agent/skills/rust-developer/references/rust-rules/lint-deny-correctness.md +107 -0
  76. package/template/agent/skills/rust-developer/references/rust-rules/lint-missing-docs.md +154 -0
  77. package/template/agent/skills/rust-developer/references/rust-rules/lint-pedantic-selective.md +118 -0
  78. package/template/agent/skills/rust-developer/references/rust-rules/lint-rustfmt-check.md +157 -0
  79. package/template/agent/skills/rust-developer/references/rust-rules/lint-unsafe-doc.md +133 -0
  80. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-complexity.md +131 -0
  81. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-perf.md +136 -0
  82. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-style.md +135 -0
  83. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-suspicious.md +122 -0
  84. package/template/agent/skills/rust-developer/references/rust-rules/lint-workspace-lints.md +172 -0
  85. package/template/agent/skills/rust-developer/references/rust-rules/mem-arena-allocator.md +168 -0
  86. package/template/agent/skills/rust-developer/references/rust-rules/mem-arrayvec.md +142 -0
  87. package/template/agent/skills/rust-developer/references/rust-rules/mem-assert-type-size.md +168 -0
  88. package/template/agent/skills/rust-developer/references/rust-rules/mem-avoid-format.md +147 -0
  89. package/template/agent/skills/rust-developer/references/rust-rules/mem-box-large-variant.md +158 -0
  90. package/template/agent/skills/rust-developer/references/rust-rules/mem-boxed-slice.md +139 -0
  91. package/template/agent/skills/rust-developer/references/rust-rules/mem-clone-from.md +147 -0
  92. package/template/agent/skills/rust-developer/references/rust-rules/mem-compact-string.md +149 -0
  93. package/template/agent/skills/rust-developer/references/rust-rules/mem-reuse-collections.md +174 -0
  94. package/template/agent/skills/rust-developer/references/rust-rules/mem-smaller-integers.md +159 -0
  95. package/template/agent/skills/rust-developer/references/rust-rules/mem-smallvec.md +138 -0
  96. package/template/agent/skills/rust-developer/references/rust-rules/mem-thinvec.md +142 -0
  97. package/template/agent/skills/rust-developer/references/rust-rules/mem-with-capacity.md +156 -0
  98. package/template/agent/skills/rust-developer/references/rust-rules/mem-write-over-format.md +172 -0
  99. package/template/agent/skills/rust-developer/references/rust-rules/mem-zero-copy.md +164 -0
  100. package/template/agent/skills/rust-developer/references/rust-rules/name-acronym-word.md +99 -0
  101. package/template/agent/skills/rust-developer/references/rust-rules/name-as-free.md +104 -0
  102. package/template/agent/skills/rust-developer/references/rust-rules/name-consts-screaming.md +94 -0
  103. package/template/agent/skills/rust-developer/references/rust-rules/name-crate-no-rs.md +78 -0
  104. package/template/agent/skills/rust-developer/references/rust-rules/name-funcs-snake.md +76 -0
  105. package/template/agent/skills/rust-developer/references/rust-rules/name-into-ownership.md +123 -0
  106. package/template/agent/skills/rust-developer/references/rust-rules/name-is-has-bool.md +127 -0
  107. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-convention.md +129 -0
  108. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-method.md +131 -0
  109. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-type-match.md +142 -0
  110. package/template/agent/skills/rust-developer/references/rust-rules/name-lifetime-short.md +86 -0
  111. package/template/agent/skills/rust-developer/references/rust-rules/name-no-get-prefix.md +154 -0
  112. package/template/agent/skills/rust-developer/references/rust-rules/name-to-expensive.md +118 -0
  113. package/template/agent/skills/rust-developer/references/rust-rules/name-type-param-single.md +92 -0
  114. package/template/agent/skills/rust-developer/references/rust-rules/name-types-camel.md +65 -0
  115. package/template/agent/skills/rust-developer/references/rust-rules/name-variants-camel.md +101 -0
  116. package/template/agent/skills/rust-developer/references/rust-rules/opt-bounds-check.md +161 -0
  117. package/template/agent/skills/rust-developer/references/rust-rules/opt-cache-friendly.md +187 -0
  118. package/template/agent/skills/rust-developer/references/rust-rules/opt-codegen-units.md +142 -0
  119. package/template/agent/skills/rust-developer/references/rust-rules/opt-cold-unlikely.md +152 -0
  120. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-always-rare.md +141 -0
  121. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-never-cold.md +181 -0
  122. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-small.md +160 -0
  123. package/template/agent/skills/rust-developer/references/rust-rules/opt-likely-hint.md +171 -0
  124. package/template/agent/skills/rust-developer/references/rust-rules/opt-lto-release.md +130 -0
  125. package/template/agent/skills/rust-developer/references/rust-rules/opt-pgo-profile.md +167 -0
  126. package/template/agent/skills/rust-developer/references/rust-rules/opt-simd-portable.md +144 -0
  127. package/template/agent/skills/rust-developer/references/rust-rules/opt-target-cpu.md +154 -0
  128. package/template/agent/skills/rust-developer/references/rust-rules/own-arc-shared.md +141 -0
  129. package/template/agent/skills/rust-developer/references/rust-rules/own-borrow-over-clone.md +95 -0
  130. package/template/agent/skills/rust-developer/references/rust-rules/own-clone-explicit.md +135 -0
  131. package/template/agent/skills/rust-developer/references/rust-rules/own-copy-small.md +124 -0
  132. package/template/agent/skills/rust-developer/references/rust-rules/own-cow-conditional.md +135 -0
  133. package/template/agent/skills/rust-developer/references/rust-rules/own-lifetime-elision.md +134 -0
  134. package/template/agent/skills/rust-developer/references/rust-rules/own-move-large.md +134 -0
  135. package/template/agent/skills/rust-developer/references/rust-rules/own-mutex-interior.md +105 -0
  136. package/template/agent/skills/rust-developer/references/rust-rules/own-rc-single-thread.md +65 -0
  137. package/template/agent/skills/rust-developer/references/rust-rules/own-refcell-interior.md +97 -0
  138. package/template/agent/skills/rust-developer/references/rust-rules/own-rwlock-readers.md +122 -0
  139. package/template/agent/skills/rust-developer/references/rust-rules/own-slice-over-vec.md +119 -0
  140. package/template/agent/skills/rust-developer/references/rust-rules/perf-black-box-bench.md +153 -0
  141. package/template/agent/skills/rust-developer/references/rust-rules/perf-chain-avoid.md +136 -0
  142. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-into.md +133 -0
  143. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-once.md +120 -0
  144. package/template/agent/skills/rust-developer/references/rust-rules/perf-drain-reuse.md +137 -0
  145. package/template/agent/skills/rust-developer/references/rust-rules/perf-entry-api.md +134 -0
  146. package/template/agent/skills/rust-developer/references/rust-rules/perf-extend-batch.md +150 -0
  147. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-lazy.md +123 -0
  148. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-over-index.md +113 -0
  149. package/template/agent/skills/rust-developer/references/rust-rules/perf-profile-first.md +175 -0
  150. package/template/agent/skills/rust-developer/references/rust-rules/perf-release-profile.md +149 -0
  151. package/template/agent/skills/rust-developer/references/rust-rules/proj-bin-dir.md +142 -0
  152. package/template/agent/skills/rust-developer/references/rust-rules/proj-flat-small.md +133 -0
  153. package/template/agent/skills/rust-developer/references/rust-rules/proj-lib-main-split.md +148 -0
  154. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-by-feature.md +130 -0
  155. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-rs-dir.md +120 -0
  156. package/template/agent/skills/rust-developer/references/rust-rules/proj-prelude-module.md +155 -0
  157. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-crate-internal.md +139 -0
  158. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-super-parent.md +135 -0
  159. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-use-reexport.md +162 -0
  160. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-deps.md +186 -0
  161. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-large.md +162 -0
  162. package/template/agent/skills/rust-developer/references/rust-rules/test-arrange-act-assert.md +160 -0
  163. package/template/agent/skills/rust-developer/references/rust-rules/test-cfg-test-module.md +151 -0
  164. package/template/agent/skills/rust-developer/references/rust-rules/test-criterion-bench.md +171 -0
  165. package/template/agent/skills/rust-developer/references/rust-rules/test-descriptive-names.md +142 -0
  166. package/template/agent/skills/rust-developer/references/rust-rules/test-doctest-examples.md +168 -0
  167. package/template/agent/skills/rust-developer/references/rust-rules/test-fixture-raii.md +151 -0
  168. package/template/agent/skills/rust-developer/references/rust-rules/test-integration-dir.md +144 -0
  169. package/template/agent/skills/rust-developer/references/rust-rules/test-mock-traits.md +189 -0
  170. package/template/agent/skills/rust-developer/references/rust-rules/test-mockall-mocking.md +226 -0
  171. package/template/agent/skills/rust-developer/references/rust-rules/test-proptest-properties.md +161 -0
  172. package/template/agent/skills/rust-developer/references/rust-rules/test-should-panic.md +130 -0
  173. package/template/agent/skills/rust-developer/references/rust-rules/test-tokio-async.md +154 -0
  174. package/template/agent/skills/rust-developer/references/rust-rules/test-use-super.md +127 -0
  175. package/template/agent/skills/rust-developer/references/rust-rules/type-enum-states.md +154 -0
  176. package/template/agent/skills/rust-developer/references/rust-rules/type-generic-bounds.md +142 -0
  177. package/template/agent/skills/rust-developer/references/rust-rules/type-never-diverge.md +146 -0
  178. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-ids.md +160 -0
  179. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-validated.md +159 -0
  180. package/template/agent/skills/rust-developer/references/rust-rules/type-no-stringly.md +144 -0
  181. package/template/agent/skills/rust-developer/references/rust-rules/type-option-nullable.md +137 -0
  182. package/template/agent/skills/rust-developer/references/rust-rules/type-phantom-marker.md +188 -0
  183. package/template/agent/skills/rust-developer/references/rust-rules/type-repr-transparent.md +143 -0
  184. package/template/agent/skills/rust-developer/references/rust-rules/type-result-fallible.md +131 -0
  185. package/template/agent/skills/systematic-debugging/SKILL.md +17 -0
@@ -0,0 +1,138 @@
1
+ # lint-cargo-metadata
2
+
3
+ > Enable clippy::cargo for published crates
4
+
5
+ ## Why It Matters
6
+
7
+ The `clippy::cargo` lint group checks Cargo.toml for issues that affect publishing and dependency management. For crates intended for crates.io, these checks help ensure a professional, well-configured package.
8
+
9
+ ## Configuration
10
+
11
+ ```toml
12
+ # Cargo.toml
13
+ [lints.clippy]
14
+ cargo = "warn"
15
+ ```
16
+
17
+ Or in code:
18
+
19
+ ```rust
20
+ #![warn(clippy::cargo)]
21
+ ```
22
+
23
+ ## What It Catches
24
+
25
+ ### Missing Metadata
26
+
27
+ ```toml
28
+ # WARN: missing package.description
29
+ # WARN: missing package.license or package.license-file
30
+ # WARN: missing package.repository
31
+ [package]
32
+ name = "my-crate"
33
+ version = "0.1.0"
34
+ ```
35
+
36
+ ### Dependency Issues
37
+
38
+ ```toml
39
+ # WARN: feature used but not defined
40
+ # WARN: dependency version not specified
41
+ [dependencies]
42
+ serde = "*" # Bad: any version
43
+ tokio = { git = "..." } # WARN for published crates
44
+ ```
45
+
46
+ ### Feature Issues
47
+
48
+ ```toml
49
+ # WARN: negative_feature_names
50
+ [features]
51
+ no-std = [] # Should be: std = [] (opt-out vs opt-in)
52
+
53
+ # WARN: redundant_feature_names
54
+ [features]
55
+ default = ["feature-a"]
56
+ feature-a = [] # Feature name matches crate name
57
+ ```
58
+
59
+ ## Notable Lints
60
+
61
+ | Lint | Issue |
62
+ |------|-------|
63
+ | `cargo_common_metadata` | Missing description/license/repository |
64
+ | `multiple_crate_versions` | Same crate at different versions |
65
+ | `negative_feature_names` | Features like `no-std` instead of `std` |
66
+ | `redundant_feature_names` | Feature same as crate name |
67
+ | `wildcard_dependencies` | Using `*` for version |
68
+
69
+ ## Complete Cargo.toml
70
+
71
+ ```toml
72
+ [package]
73
+ name = "my-crate"
74
+ version = "0.1.0"
75
+ edition = "2021"
76
+ rust-version = "1.70"
77
+
78
+ # Required for cargo lint satisfaction
79
+ description = "A short description of what this crate does"
80
+ license = "MIT OR Apache-2.0"
81
+ repository = "https://github.com/user/my-crate"
82
+
83
+ # Recommended
84
+ documentation = "https://docs.rs/my-crate"
85
+ readme = "README.md"
86
+ keywords = ["keyword1", "keyword2"]
87
+ categories = ["category-slug"]
88
+
89
+ [dependencies]
90
+ # Specific versions, not wildcards
91
+ serde = "1.0"
92
+ tokio = { version = "1.0", features = ["full"] }
93
+
94
+ [features]
95
+ default = ["std"]
96
+ std = [] # Opt-out, not no-std opt-in
97
+
98
+ [lints.clippy]
99
+ cargo = "warn"
100
+ ```
101
+
102
+ ## Multiple Crate Versions
103
+
104
+ ```
105
+ # WARN: multiple versions of `syn` in dependency tree
106
+ # syn v1.0.109
107
+ # syn v2.0.48
108
+ ```
109
+
110
+ Fix by updating dependencies or using `[patch]`:
111
+
112
+ ```toml
113
+ [patch.crates-io]
114
+ old-dep = { git = "...", branch = "syn-2" }
115
+ ```
116
+
117
+ ## When to Disable
118
+
119
+ For internal/unpublished crates:
120
+
121
+ ```toml
122
+ [lints.clippy]
123
+ cargo = "allow" # Not publishing, metadata not needed
124
+ ```
125
+
126
+ Or selectively:
127
+
128
+ ```toml
129
+ [lints.clippy]
130
+ cargo = "warn"
131
+ multiple_crate_versions = "allow" # Acceptable in this project
132
+ ```
133
+
134
+ ## See Also
135
+
136
+ - [doc-cargo-metadata](./doc-cargo-metadata.md) - Cargo.toml metadata
137
+ - [proj-workspace-deps](./proj-workspace-deps.md) - Workspace dependencies
138
+ - [lint-deny-correctness](./lint-deny-correctness.md) - Correctness lints
@@ -0,0 +1,107 @@
1
+ # lint-deny-correctness
2
+
3
+ > `#![deny(clippy::correctness)]`
4
+
5
+ ## Why It Matters
6
+
7
+ Clippy's correctness lints catch code that is outright wrong - logic errors, undefined behavior, or code that doesn't do what you think. These should always be errors, not warnings.
8
+
9
+ ## Setup
10
+
11
+ ```rust
12
+ // At the top of lib.rs or main.rs
13
+ #![deny(clippy::correctness)]
14
+
15
+ // Or in Cargo.toml for workspace-wide
16
+ [lints.clippy]
17
+ correctness = "deny"
18
+ ```
19
+
20
+ ## What It Catches
21
+
22
+ ```rust
23
+ // Infinite loop (iter::repeat without take)
24
+ for x in std::iter::repeat(1) { // ERROR: infinite iterator
25
+ println!("{}", x);
26
+ }
27
+
28
+ // Comparison to NaN (always false)
29
+ if x == f64::NAN { // ERROR: NaN != NaN always
30
+ // This never executes
31
+ }
32
+
33
+ // Use after free patterns
34
+ let r;
35
+ {
36
+ let x = 5;
37
+ r = &x; // ERROR: x dropped here
38
+ }
39
+ println!("{}", r);
40
+
41
+ // Wrong equality check
42
+ if x = 5 { // ERROR: assignment in condition (should be ==)
43
+ }
44
+
45
+ // Useless comparisons
46
+ if x >= 0 && x < 0 { // ERROR: impossible condition
47
+ }
48
+ ```
49
+
50
+ ## Important Correctness Lints
51
+
52
+ ```rust
53
+ // approx_constant - using imprecise PI, E values
54
+ let pi = 3.14; // Use std::f64::consts::PI
55
+
56
+ // invalid_regex - regex that won't compile
57
+ let re = Regex::new("["); // Invalid regex
58
+
59
+ // iter_next_loop - using .next() in for loop incorrectly
60
+ for x in iter.next() { // Should be: for x in iter
61
+
62
+ // never_loop - loop that never actually loops
63
+ loop {
64
+ break; // Always breaks immediately
65
+ }
66
+
67
+ // nonsensical_open_options - impossible file options
68
+ File::options().read(false).write(false).open("f");
69
+
70
+ // unit_cmp - comparing unit type ()
71
+ if foo() == bar() { } // Both return (), always true
72
+ ```
73
+
74
+ ## Full Recommended Lints
75
+
76
+ ```rust
77
+ #![deny(clippy::correctness)]
78
+ #![warn(clippy::suspicious)]
79
+ #![warn(clippy::style)]
80
+ #![warn(clippy::complexity)]
81
+ #![warn(clippy::perf)]
82
+
83
+ // For published crates
84
+ #![warn(missing_docs)]
85
+ #![warn(clippy::cargo)]
86
+ ```
87
+
88
+ ## Running Clippy
89
+
90
+ ```bash
91
+ # Basic check
92
+ cargo clippy
93
+
94
+ # With all warnings as errors
95
+ cargo clippy -- -D warnings
96
+
97
+ # Check specific lint category
98
+ cargo clippy -- -W clippy::correctness
99
+
100
+ # In CI (fail on warnings)
101
+ cargo clippy -- -D warnings -D clippy::correctness
102
+ ```
103
+
104
+ ## See Also
105
+
106
+ - [lint-warn-suspicious](lint-warn-suspicious.md) - Warn on suspicious code
107
+ - [lint-warn-perf](lint-warn-perf.md) - Warn on performance issues
@@ -0,0 +1,154 @@
1
+ # lint-missing-docs
2
+
3
+ > Warn on missing documentation for public items
4
+
5
+ ## Why It Matters
6
+
7
+ The `missing_docs` lint ensures all public API items are documented. For libraries, documentation IS the user interface. Missing docs mean users can't understand your API without reading source code.
8
+
9
+ ## Configuration
10
+
11
+ ```rust
12
+ // In lib.rs
13
+ #![warn(missing_docs)]
14
+ ```
15
+
16
+ Or in `Cargo.toml`:
17
+
18
+ ```toml
19
+ [lints.rust]
20
+ missing_docs = "warn"
21
+ ```
22
+
23
+ For strict enforcement:
24
+
25
+ ```rust
26
+ #![deny(missing_docs)]
27
+ ```
28
+
29
+ ## What It Catches
30
+
31
+ ```rust
32
+ #![warn(missing_docs)]
33
+
34
+ pub struct User { // WARN: missing documentation for a struct
35
+ pub name: String, // WARN: missing documentation for a field
36
+ pub age: u32, // WARN: missing documentation for a field
37
+ }
38
+
39
+ pub fn process() { } // WARN: missing documentation for a function
40
+
41
+ pub trait Handler { // WARN: missing documentation for a trait
42
+ fn handle(&self); // WARN: missing documentation for a method
43
+ }
44
+ ```
45
+
46
+ ## Good
47
+
48
+ ```rust
49
+ #![warn(missing_docs)]
50
+
51
+ //! User management module.
52
+
53
+ /// Represents a registered user in the system.
54
+ pub struct User {
55
+ /// The user's display name.
56
+ pub name: String,
57
+ /// The user's age in years.
58
+ pub age: u32,
59
+ }
60
+
61
+ /// Processes pending user requests.
62
+ ///
63
+ /// # Examples
64
+ ///
65
+ /// ```
66
+ /// process();
67
+ /// ```
68
+ pub fn process() { }
69
+
70
+ /// Handler trait for request processing.
71
+ pub trait Handler {
72
+ /// Handle an incoming request.
73
+ fn handle(&self);
74
+ }
75
+ ```
76
+
77
+ ## Private Items
78
+
79
+ `missing_docs` only applies to `pub` items. Private items don't trigger warnings:
80
+
81
+ ```rust
82
+ #![warn(missing_docs)]
83
+
84
+ struct Internal { } // No warning - private
85
+
86
+ pub struct Public { } // WARN - public, needs docs
87
+ ```
88
+
89
+ ## Allow for Specific Items
90
+
91
+ ```rust
92
+ #![warn(missing_docs)]
93
+
94
+ /// Documented module.
95
+ pub mod api {
96
+ /// Documented struct.
97
+ pub struct Config { }
98
+
99
+ #[allow(missing_docs)]
100
+ pub mod internal {
101
+ // Internal API, docs not required
102
+ pub struct Helper { }
103
+ }
104
+ }
105
+ ```
106
+
107
+ ## Gradual Adoption
108
+
109
+ For existing codebases, start with `warn` and fix incrementally:
110
+
111
+ ```rust
112
+ // Phase 1: Warn, fix critical items
113
+ #![warn(missing_docs)]
114
+
115
+ // Phase 2: After cleanup, deny
116
+ #![deny(missing_docs)]
117
+ ```
118
+
119
+ ## Combining with doc Attributes
120
+
121
+ ```rust
122
+ #![warn(missing_docs)]
123
+ #![warn(rustdoc::broken_intra_doc_links)]
124
+ #![warn(rustdoc::private_intra_doc_links)]
125
+ ```
126
+
127
+ ## Workspace Configuration
128
+
129
+ ```toml
130
+ # In workspace Cargo.toml
131
+ [workspace.lints.rust]
132
+ missing_docs = "warn"
133
+
134
+ # Member crates inherit
135
+ [lints]
136
+ workspace = true
137
+ ```
138
+
139
+ ## What to Document
140
+
141
+ | Item | Doc Focus |
142
+ |------|-----------|
143
+ | Structs | Purpose, usage example |
144
+ | Struct fields | What it represents |
145
+ | Enums | When to use each variant |
146
+ | Functions | What it does, params, return |
147
+ | Traits | Contract and expectations |
148
+ | Modules | What the module provides |
149
+
150
+ ## See Also
151
+
152
+ - [doc-all-public](./doc-all-public.md) - Documentation patterns
153
+ - [lint-unsafe-doc](./lint-unsafe-doc.md) - Unsafe documentation
154
+ - [doc-examples-section](./doc-examples-section.md) - Adding examples
@@ -0,0 +1,118 @@
1
+ # lint-pedantic-selective
2
+
3
+ > Enable clippy::pedantic selectively
4
+
5
+ ## Why It Matters
6
+
7
+ The `clippy::pedantic` group contains opinionated lints that aren't universally applicable. Enabling it wholesale produces noise; selectively enabling useful pedantic lints improves code quality without false positives.
8
+
9
+ ## Bad
10
+
11
+ ```rust
12
+ // Too noisy - will fight you constantly
13
+ #![warn(clippy::pedantic)]
14
+ ```
15
+
16
+ ## Good
17
+
18
+ ```toml
19
+ # Cargo.toml - cherry-pick useful pedantic lints
20
+ [lints.clippy]
21
+ # Enable pedantic as baseline
22
+ pedantic = "warn"
23
+
24
+ # Disable noisy ones
25
+ missing_errors_doc = "allow" # Document errors separately
26
+ missing_panics_doc = "allow" # Document panics separately
27
+ module_name_repetitions = "allow" # Allow Foo::FooError pattern
28
+ too_many_lines = "allow" # Function length varies
29
+ must_use_candidate = "allow" # Too many suggestions
30
+ ```
31
+
32
+ ## Recommended Pedantic Lints
33
+
34
+ | Lint | Why Enable |
35
+ |------|-----------|
36
+ | `doc_markdown` | Catch unmarked code in docs |
37
+ | `match_wildcard_for_single_variants` | Explicit variant matching |
38
+ | `semicolon_if_nothing_returned` | Consistent semicolons |
39
+ | `string_add_assign` | Use `+=` for string concatenation |
40
+ | `unnested_or_patterns` | Simplify match patterns |
41
+ | `unused_self` | Catch methods that should be functions |
42
+ | `used_underscore_binding` | Warn on using `_var` |
43
+ | `wildcard_imports` | Avoid glob imports |
44
+
45
+ ## Often Disabled
46
+
47
+ | Lint | Why Disable |
48
+ |------|-------------|
49
+ | `missing_errors_doc` | Handle with `#[doc]` policy |
50
+ | `missing_panics_doc` | Handle with `#[doc]` policy |
51
+ | `module_name_repetitions` | Sometimes intentional |
52
+ | `must_use_candidate` | Too aggressive |
53
+ | `too_many_lines` | Arbitrary threshold |
54
+ | `struct_excessive_bools` | Valid for config structs |
55
+
56
+ ## Full Configuration
57
+
58
+ ```toml
59
+ # Cargo.toml
60
+ [lints.clippy]
61
+ # Start with pedantic
62
+ pedantic = "warn"
63
+
64
+ # Keep these
65
+ doc_markdown = "warn"
66
+ match_wildcard_for_single_variants = "warn"
67
+ semicolon_if_nothing_returned = "warn"
68
+ unused_self = "warn"
69
+ wildcard_imports = "warn"
70
+
71
+ # Disable these
72
+ missing_errors_doc = "allow"
73
+ missing_panics_doc = "allow"
74
+ module_name_repetitions = "allow"
75
+ must_use_candidate = "allow"
76
+ too_many_lines = "allow"
77
+ similar_names = "allow"
78
+ struct_excessive_bools = "allow"
79
+ ```
80
+
81
+ ## Alternative: Explicit Opt-in
82
+
83
+ ```toml
84
+ # Only enable specific lints, not the group
85
+ [lints.clippy]
86
+ # From pedantic, only these:
87
+ doc_markdown = "warn"
88
+ semicolon_if_nothing_returned = "warn"
89
+ unused_self = "warn"
90
+ wildcard_imports = "warn"
91
+ ```
92
+
93
+ ## Module-Level Overrides
94
+
95
+ ```rust
96
+ // Allow specific lint for a module
97
+ #![allow(clippy::module_name_repetitions)]
98
+
99
+ // Or for specific items
100
+ #[allow(clippy::too_many_arguments)]
101
+ fn complex_function(/* many args */) { }
102
+ ```
103
+
104
+ ## Team Consensus
105
+
106
+ Pedantic lints are style choices. Agree as a team:
107
+
108
+ 1. Enable `pedantic` as baseline
109
+ 2. Run `cargo clippy` on codebase
110
+ 3. Discuss each warning category
111
+ 4. Disable ones that don't fit your style
112
+ 5. Document decisions in `clippy.toml`
113
+
114
+ ## See Also
115
+
116
+ - [lint-warn-style](./lint-warn-style.md) - Style warnings
117
+ - [lint-warn-complexity](./lint-warn-complexity.md) - Complexity warnings
118
+ - [lint-deny-correctness](./lint-deny-correctness.md) - Correctness lints
@@ -0,0 +1,157 @@
1
+ # lint-rustfmt-check
2
+
3
+ > Run cargo fmt --check in CI
4
+
5
+ ## Why It Matters
6
+
7
+ Consistent formatting eliminates style debates and makes diffs cleaner. Running `cargo fmt --check` in CI ensures all code follows the same format. This catches formatting issues before merge, not after.
8
+
9
+ ## CI Configuration
10
+
11
+ ### GitHub Actions
12
+
13
+ ```yaml
14
+ name: CI
15
+
16
+ on: [push, pull_request]
17
+
18
+ jobs:
19
+ fmt:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ - uses: dtolnay/rust-toolchain@stable
24
+ with:
25
+ components: rustfmt
26
+ - run: cargo fmt --all --check
27
+ ```
28
+
29
+ ### GitLab CI
30
+
31
+ ```yaml
32
+ fmt:
33
+ image: rust:latest
34
+ script:
35
+ - rustup component add rustfmt
36
+ - cargo fmt --all --check
37
+ ```
38
+
39
+ ### Pre-commit Hook
40
+
41
+ ```bash
42
+ #!/bin/sh
43
+ # .git/hooks/pre-commit
44
+ cargo fmt --all --check
45
+ ```
46
+
47
+ ## Configuration
48
+
49
+ Create `rustfmt.toml` for custom settings:
50
+
51
+ ```toml
52
+ # rustfmt.toml
53
+ edition = "2021"
54
+ max_width = 100
55
+ use_small_heuristics = "Max"
56
+ imports_granularity = "Module"
57
+ group_imports = "StdExternalCrate"
58
+ reorder_imports = true
59
+ ```
60
+
61
+ ## Common Options
62
+
63
+ | Option | Default | Description |
64
+ |--------|---------|-------------|
65
+ | `max_width` | 100 | Maximum line width |
66
+ | `tab_spaces` | 4 | Spaces per indent |
67
+ | `edition` | "2015" | Rust edition |
68
+ | `use_small_heuristics` | "Default" | Layout heuristics |
69
+ | `imports_granularity` | "Preserve" | Import grouping |
70
+ | `group_imports` | "Preserve" | Import ordering |
71
+
72
+ ## Running Locally
73
+
74
+ ```bash
75
+ # Check formatting (doesn't modify files)
76
+ cargo fmt --all --check
77
+
78
+ # Apply formatting
79
+ cargo fmt --all
80
+
81
+ # Format specific file
82
+ cargo fmt -- src/main.rs
83
+
84
+ # Check with verbose output
85
+ cargo fmt --all --check -- --verbose
86
+ ```
87
+
88
+ ## Workspace Formatting
89
+
90
+ ```bash
91
+ # Format all workspace members
92
+ cargo fmt --all
93
+
94
+ # Format specific package
95
+ cargo fmt -p my-package
96
+ ```
97
+
98
+ ## Ignoring Files
99
+
100
+ In `rustfmt.toml`:
101
+
102
+ ```toml
103
+ # Skip generated files
104
+ ignore = [
105
+ "src/generated/*",
106
+ "build.rs",
107
+ ]
108
+ ```
109
+
110
+ Or in code:
111
+
112
+ ```rust
113
+ #[rustfmt::skip]
114
+ mod generated_code;
115
+
116
+ #[rustfmt::skip]
117
+ const MATRIX: [[i32; 4]; 4] = [
118
+ [1, 0, 0, 0],
119
+ [0, 1, 0, 0],
120
+ [0, 0, 1, 0],
121
+ [0, 0, 0, 1],
122
+ ];
123
+ ```
124
+
125
+ ## Nightly Features
126
+
127
+ Some options require nightly:
128
+
129
+ ```toml
130
+ # rustfmt.toml (nightly only)
131
+ unstable_features = true
132
+ imports_granularity = "Crate"
133
+ wrap_comments = true
134
+ format_code_in_doc_comments = true
135
+ ```
136
+
137
+ ```bash
138
+ # Use nightly rustfmt
139
+ cargo +nightly fmt
140
+ ```
141
+
142
+ ## IDE Integration
143
+
144
+ Most IDEs format on save. Configure to use project `rustfmt.toml`:
145
+
146
+ ```json
147
+ // VS Code settings.json
148
+ {
149
+ "rust-analyzer.rustfmt.extraArgs": ["--config-path", "./rustfmt.toml"]
150
+ }
151
+ ```
152
+
153
+ ## See Also
154
+
155
+ - [lint-warn-style](./lint-warn-style.md) - Style lints
156
+ - [lint-pedantic-selective](./lint-pedantic-selective.md) - Pedantic lints
157
+ - [name-funcs-snake](./name-funcs-snake.md) - Naming conventions