Loading...
Loading...
Use when reviewing code for anti-patterns. Keywords: anti-pattern, common mistake, pitfall, code smell, bad practice, code review, is this an anti-pattern, better way to do this, common mistake to avoid, why is this bad, idiomatic way, beginner mistake, fighting borrow checker, clone everywhere, unwrap in production, should I refactor, 反模式, 常见错误, 代码异味, 最佳实践, 地道写法
npx skill4agent add zhanghandong/rust-skills m15-anti-patternLayer 2: Design Choices
| Anti-Pattern | Why Bad | Better |
|---|---|---|
| Hides ownership issues | Proper references or ownership |
| Runtime panics | |
| Unnecessary overhead | Simple ownership |
| UB risk | Find safe pattern |
OOP via | Misleading API | Composition, traits |
| Giant match arms | Unmaintainable | Extract to methods |
| Allocation waste | |
Ignoring | Lost errors | Handle or |
"Why does my code have so many clones?"
↑ Ask: Is the ownership model correct?
↑ Check: m09-domain (data flow design)
↑ Check: m01-ownership (reference patterns)| Anti-Pattern | Trace To | Question |
|---|---|---|
| Clone everywhere | m01-ownership | Who should own this data? |
| Unwrap everywhere | m06-error-handling | What's the error strategy? |
| Rc everywhere | m09-domain | Is ownership clear? |
| Fighting lifetimes | m09-domain | Should data structure change? |
"Replace clone with proper ownership"
↓ m01-ownership: Reference patterns
↓ m02-resource: Smart pointer if needed
"Replace unwrap with proper handling"
↓ m06-error-handling: ? operator
↓ m06-error-handling: expect with message| Rank | Mistake | Fix |
|---|---|---|
| 1 | Clone to escape borrow checker | Use references |
| 2 | Unwrap in production | Propagate with |
| 3 | String for everything | Use |
| 4 | Index loops | Use iterators |
| 5 | Fighting lifetimes | Restructure to own data |
| Smell | Indicates | Refactoring |
|---|---|---|
Many | Ownership unclear | Clarify data flow |
Many | Error handling missing | Add proper handling |
Many | Encapsulation broken | Private + accessors |
| Deep nesting | Complex logic | Extract methods |
| Long functions | Multiple responsibilities | Split |
| Giant enums | Missing abstraction | Trait + types |
| Error | Anti-Pattern Cause | Fix |
|---|---|---|
| E0382 use after move | Cloning vs ownership | Proper references |
| Panic in production | Unwrap everywhere | ?, matching |
| Slow performance | String for all text | &str, Cow |
| Borrow checker fights | Wrong structure | Restructure |
| Memory bloat | Rc/Arc everywhere | Simple ownership |
| Deprecated | Better |
|---|---|
| Index-based loops | |
| Chain iterators |
| Manual unsafe cell | |
| |
| Custom linked list | |
| |
.clone().unwrap()pubString&str#[must_use]unsafe| When | See |
|---|---|
| Ownership patterns | m01-ownership |
| Error handling | m06-error-handling |
| Mental models | m14-mental-model |
| Performance | m10-performance |