Code Smell Detection
The Code Smell Detector identifies common code quality issues in Python code using astroid for rich AST parsing and type inference.
Detected Smells
Per-file smells:
Long Methods — methods exceeding the configured line threshold
Large Classes — classes with too many methods
Primitive Obsession — overuse of primitive types instead of domain objects
Long Parameter Lists — methods with too many parameters
Data Clumps — groups of data that always appear together
Switch Statements — excessive
if/elifchains that should use polymorphismTemporary Fields — instance variables only set in some code paths
Alternative Classes with Different Interfaces — classes doing similar things with different method names
Divergent Change — a class that changes for many different reasons
Parallel Inheritance Hierarchies — mirrored class hierarchies that change together
Shotgun Surgery — a change that forces many small edits across many classes
Comments — excessive or misleading inline comments masking bad code
Duplicate Code — repeated code blocks that should be extracted
Data Class — classes that only hold data with no behaviour
Dead Code — unreachable or unused code
Lazy Class — classes that do too little to justify their existence
Speculative Generality — over-engineering for hypothetical future use
Feature Envy — methods that use another class’s data more than their own
Inappropriate Intimacy — classes that access each other’s private members
Message Chains — long chains of method calls (
a.b().c().d())Middle Man — classes that only delegate to another class
Cross-file smells (detected after all files are processed):
Alternative Classes — similar classes across files with different interfaces
Data Clumps — repeated parameter groups across files
Duplicate Code — duplicate blocks across files
Inappropriate Intimacy — cross-file private member access
Parallel Inheritance — mirrored hierarchies across modules
Usage
Command Line
analyze_code_quality /path/to/project --type code