# Complexity Reduction Refactoring Patterns
## Extract Method Pattern Applied - QUALITY-004 Sprint
### Context
Following PMAT TDG analysis showing 45 functions with cyclomatic complexity >10, we applied the Extract Method pattern from paiml-mcp-agent-toolkit to reduce complexity systematically.
### Case Study: `create_ruchy_tools` Function
**Before Refactoring:**
- Cyclomatic Complexity: 14 (violates Toyota Way standard of ≤10)
- Single large function with multiple tool creation inline
- Hard to maintain, test, and understand
**Extract Method Pattern Applied:**
```rust
// BEFORE: Single complex function
pub fn create_ruchy_tools() -> Vec<(&'static str, RuchyMCPTool)> {
vec![
("ruchy-score", /* 40+ lines of complex logic */),
("ruchy-lint", /* 30+ lines of complex logic */),
// ... more complex inline definitions
]
}
// AFTER: Extracted helper functions with complexity ≤10 each
fn create_score_tool() -> (&'static str, RuchyMCPTool) { /* focused logic */ }
fn create_lint_tool() -> (&'static str, RuchyMCPTool) { /* focused logic */ }
fn create_format_tool() -> (&'static str, RuchyMCPTool) { /* focused logic */ }
// ... more focused functions
pub fn create_ruchy_tools() -> Vec<(&'static str, RuchyMCPTool)> {
vec![
create_score_tool(), // Complexity: ~8
create_lint_tool(), // Complexity: ~6
create_format_tool(), // Complexity: ~4
create_analyze_tool(), // Complexity: ~7
create_eval_tool(), // Complexity: ~2
create_transpile_tool(),// Complexity: ~2
create_type_check_tool(),// Complexity: ~2
] // Total orchestrator complexity: 1
}
```
**Results:**
- Main function complexity: 14 → 1 (93% reduction)
- Each helper function: ≤10 complexity (Toyota Way compliant)
- Single Responsibility Principle: Each function has one clear purpose
- Improved testability: Each tool can be tested individually
- Enhanced maintainability: Changes isolated to specific functions
### Toyota Way Principles Applied
1. **Jidoka (Built-in Quality)**: Complexity checking integrated via PMAT
2. **Single Responsibility**: Each function does one thing well
3. **Systematic Problem Solving**: Used Extract Method pattern consistently
### PMAT Integration Workflow
```bash
# 1. MANDATORY: Identify violations using PMAT
pmat analyze complexity --path . --max-cyclomatic 10
# 2. Apply Extract Method pattern to highest complexity functions
# (Manual refactoring with IDE support)
# 3. MANDATORY: Verify reduction
pmat analyze complexity --path src/mcp.rs --max-cyclomatic 10
# 4. MANDATORY: Quality gate check
pmat quality-gate --fail-on-violation
```
### Extract Method Checklist
When applying Extract Method pattern:
- [ ] Identify cohesive code blocks (complexity indicators)
- [ ] Extract to functions with ≤30 lines
- [ ] Ensure cyclomatic complexity ≤10 per function
- [ ] Ensure cognitive complexity ≤10 per function
- [ ] Apply Single Responsibility Principle
- [ ] Use descriptive function names
- [ ] Maintain original functionality (no behavior changes)
- [ ] Add tests for extracted functions
- [ ] Verify PMAT compliance
### Next Functions for Refactoring
Based on PMAT analysis, high-priority targets:
1. Functions with complexity >15 (critical)
2. Functions with complexity 11-15 (high priority)
3. Functions in critical paths (runtime/interpreter.rs, frontend/parser/)
### Success Metrics
- **Target**: All functions ≤10 cyclomatic complexity
- **Current**: 1 function refactored (create_ruchy_tools: 14→1)
- **Remaining**: ~44 functions with complexity >10
- **Estimated effort**: 195.5 hours (per roadmap)
This establishes the pattern for systematic complexity reduction across the codebase.