| name | clean-code-principles |
| description | Detects violations of Clean Code principles and suggests refactorings. Use when reviewing code quality, improving readability, or refactoring methods, classes, and modules. |
Clean Code Refactoring Detection
Identify opportunities to apply Clean Code principles based on Robert C. Martin's guidelines.
Naming
Meaningful Names
Detect: Single-letter variables, abbreviations, temp/data/info suffixes
Refactor: Intention-revealing names that explain purpose
Cookbook: meaningful-names.md
Pronounceable Names
Detect: Unpronounceable abbreviations (genymdhms, modymdhms)
Refactor: Names that can be discussed verbally
Cookbook: meaningful-names.md
Searchable Names
Detect: Magic numbers, single-letter constants
Refactor: Named constants with clear purpose
Cookbook: meaningful-names.md
Functions
Small Functions
Detect: Methods longer than 20 lines, multiple levels of abstraction
Refactor: Extract smaller, single-purpose functions
Cookbook: small-functions.md
Single Responsibility
Detect: Functions doing multiple unrelated tasks
Refactor: One function, one responsibility, one level of abstraction
Cookbook: small-functions.md
Few Arguments
Detect: Functions with more than 3 arguments
Refactor: Parameter objects, builder pattern, method extraction
Cookbook: function-arguments.md
No Side Effects
Detect: Functions that modify global state or input parameters
Refactor: Pure functions, explicit state changes
Cookbook: side-effects.md
Command Query Separation
Detect: Functions that both change state AND return values
Refactor: Separate commands (void) from queries (return value)
Cookbook: command-query-separation.md
Comments
Self-Documenting Code
Detect: Comments explaining "what" instead of code explaining itself
Refactor: Rename variables and extract methods to make intent clear
Cookbook: comments.md
Useful Comments
Detect: Commented-out code, redundant comments, changelog in code
Refactor: Legal/license comments, intent explanation, TODO with tickets
Cookbook: comments.md
Error Handling
Exceptions Over Error Codes
Detect: Methods returning error codes or status flags
Refactor: Throw specific, descriptive exceptions
Cookbook: error-handling.md
Unchecked Exceptions
Detect: Checked exceptions creating coupling
Refactor: Runtime exceptions with meaningful messages
Cookbook: error-handling.md
Don't Return Null
Detect: Methods returning null for error/empty cases
Refactor: Optional<T>, empty collections, Null Object pattern
Cookbook: null-handling.md
Don't Pass Null
Detect: null passed as method argument
Refactor: Overloaded methods, default values, Optional parameters
Cookbook: null-handling.md
Classes
Single Responsibility (SRP)
Detect: Classes with multiple reasons to change, mixed concerns
Refactor: Separate classes for distinct responsibilities
Cookbook: single-responsibility.md
Cohesion
Detect: Methods not using instance variables, unrelated fields
Refactor: Extract related fields/methods into new classes
Cookbook: cohesion.md
Small Classes
Detect: Classes with 200+ lines or 10+ methods
Refactor: Identify hidden responsibilities, extract collaborators
Cookbook: small-classes.md
Code Smells
Long Method
Detect: Methods exceeding 20 lines
Refactor: Extract Method until each does one thing
Cookbook: long-method.md
Primitive Obsession
Detect: Strings for emails/phone/money, parallel arrays
Refactor: Value objects, domain-specific types
Cookbook: primitive-obsession.md
Feature Envy
Detect: Method uses more data from other class than its own
Refactor: Move method to the class it envies
Cookbook: feature-envy.md
Data Clumps
Detect: Same group of parameters passed together repeatedly
Refactor: Parameter object or extract class
Cookbook: data-clumps.md
Divergent Change
Detect: Class changes for unrelated reasons
Refactor: Split class by responsibility
Cookbook: divergent-change.md
Shotgun Surgery
Detect: One change requires many small edits across classes
Refactor: Consolidate related logic into single class
Cookbook: shotgun-surgery.md
Quick Reference Table
| Principle | Detection Signal | Clean Code Solution |
|---|---|---|
| Meaningful Names | Single-letter vars, abbreviations | Intention-revealing names |
| Small Functions | Methods > 20 lines | Extract, one level of abstraction |
| Few Arguments | > 3 parameters | Parameter objects, builder |
| No Side Effects | Modifies global/input state | Pure functions |
| Command Query Sep. | Function changes state AND returns | Separate commands from queries |
| Self-Documenting | Comments explain "what" | Rename, extract methods |
| Exceptions | Error codes, status flags | Specific exceptions |
| Don't Return Null | Null for errors/empty | Optional, empty collections |
| Single Responsibility | Multiple reasons to change | Separate classes |
| Cohesion | Methods don't use instance vars | Extract new classes |
| Long Method | > 20 lines | Extract Method |
| Primitive Obsession | Strings for domain types | Value objects |
| Feature Envy | Uses external class data | Move method |
| Data Clumps | Repeated parameter groups | Parameter object |
Boy Scout Rule
Leave the code cleaner than you found it.
Apply opportunistic refactoring:
- Fix one naming issue
- Extract one long method
- Remove one piece of dead code
- Add one missing null check
Cookbook Index
Clean Code recipes with practical examples:
Naming: Meaningful Names
Functions: Small Functions · Function Arguments · Side Effects · Command Query Separation
Comments: Comments
Error Handling: Error Handling · Null Handling
Classes: Single Responsibility · Cohesion · Small Classes
Code Smells: Long Method · Primitive Obsession · Feature Envy · Data Clumps · Divergent Change · Shotgun Surgery