5.7 KiB
5.7 KiB
allowed-tools, description
| allowed-tools | description |
|---|---|
| Bash, Read, Write, Edit, Grep, Glob | Refactor code to improve maintainability, performance, and scalability through systematic analysis and incremental improvements |
Code Refactoring Command
Refactor existing code to improve quality, maintainability, and performance while preserving functionality.
Usage
/refractor <file_or_directory>
Examples:
/refractor src/components/UserManager.js
/refractor src/services/
/refractor app/models/payment_processor.py
What This Command Does
This command analyzes code and performs systematic refactoring to:
-
Improve Code Structure
- Extract complex functions into smaller, focused units
- Apply SOLID principles for better maintainability
- Remove code duplication (DRY principle)
- Improve naming for clarity and self-documentation
-
Enhance Performance
- Optimize algorithms and data structures
- Remove performance bottlenecks
- Implement efficient caching strategies
- Improve database queries (eliminate N+1 problems)
-
Increase Maintainability
- Add type annotations/hints
- Improve error handling
- Update documentation
- Add comprehensive tests
Refactoring Workflow
Step 1: Analysis
First, analyze the target code:
- Measure code complexity (cyclomatic complexity)
- Identify code smells and anti-patterns
- Check for security vulnerabilities
- Assess test coverage
- Profile performance bottlenecks
Step 2: Prioritization
Rank refactoring opportunities by:
- Business impact (user-facing vs. internal)
- Technical risk (complexity of change)
- Implementation effort (time required)
- Test coverage (safety net strength)
Step 3: Implementation
Apply refactoring techniques incrementally:
Extract Method: Break down complex functions
// Before
function processOrder(order) {
// 50 lines of mixed responsibilities
}
// After
function processOrder(order) {
validateOrder(order);
calculateTotal(order);
applyDiscounts(order);
processPayment(order);
sendConfirmation(order);
}
Remove Duplication: Apply DRY principle
# Before
def calculate_price_with_tax_us(price):
return price * 1.08
def calculate_price_with_tax_uk(price):
return price * 1.20
# After
def calculate_price_with_tax(price, tax_rate):
return price * (1 + tax_rate)
Improve Naming: Use descriptive names
// Before
function calc(a: number, b: number): number {
return a * b * 0.15;
}
// After
function calculateCommissionAmount(
salesPrice: number,
quantity: number
): number {
const COMMISSION_RATE = 0.15;
return salesPrice * quantity * COMMISSION_RATE;
}
Step 4: Testing
Validate refactoring:
- Run existing test suite (must pass)
- Add new tests for refactored code
- Perform performance benchmarking
- Check for regressions
Step 5: Documentation
Update relevant documentation:
- Inline code comments for complex logic
- Function/method documentation
- Architectural decision records (ADRs)
- Update README if public API changed
Common Refactoring Patterns
1. Replace Conditional with Polymorphism
# Before
def get_speed(vehicle_type):
if vehicle_type == "car":
return 100
elif vehicle_type == "bike":
return 50
elif vehicle_type == "plane":
return 900
# After
class Vehicle:
def get_speed(self):
raise NotImplementedError
class Car(Vehicle):
def get_speed(self):
return 100
class Bike(Vehicle):
def get_speed(self):
return 50
2. Introduce Parameter Object
// Before
public void createUser(String name, String email, String phone, String address, String city) {
// ...
}
// After
public void createUser(UserDetails details) {
// ...
}
3. Replace Magic Numbers with Constants
// Before
if (user.age > 18 && user.accountBalance > 1000) {
approveCredit();
}
// After
const MINIMUM_AGE = 18;
const MINIMUM_BALANCE = 1000;
if (user.age > MINIMUM_AGE && user.accountBalance > MINIMUM_BALANCE) {
approveCredit();
}
Performance Optimization Techniques
Algorithm Optimization
- Replace O(n²) algorithms with O(n log n) or O(n) alternatives
- Use appropriate data structures (HashMap vs. Array)
- Implement caching for expensive computations
- Use lazy loading for large datasets
Database Optimization
- Add indexes to frequently queried columns
- Use batch operations instead of individual queries
- Implement connection pooling
- Optimize JOIN operations and eliminate N+1 queries
Async Patterns
- Use async/await for I/O operations
- Implement parallel processing where applicable
- Add timeout and cancellation support
- Use streaming for large data processing
Safety Guidelines
- Always maintain tests: Refactoring should never reduce test coverage
- Small, incremental changes: Make one change at a time
- Commit frequently: Each successful refactoring should be committed
- Preserve functionality: Behavior must remain unchanged
- Use feature flags: For risky changes, hide behind feature toggles
Quality Metrics
Track these metrics before and after refactoring:
- Cyclomatic Complexity: Target <10 per function
- Code Duplication: Target <3%
- Test Coverage: Target >80%
- Performance: Track response times and resource usage
- Maintainability Index: Use code analysis tools
Methodology
This command follows industry best practices:
- Test-Driven Refactoring: Tests written/validated before changes
- Continuous Integration: Automated validation on each change
- Code Review: All refactoring reviewed by peers
- Incremental Approach: Small changes over risky rewrites
- Performance Monitoring: Measure impact of changes