Automated Refactoring with PMAT
/Automated Refactoring with PMAT
Proponuje automatyczne refaktoryzacje i strategie obniżania złożoności kodu w ponad 25 językach, gdy złożoność cyklomatyczna jest wysoka.
- Autor
- paiml ↗
- Repozytorium
- paiml-mcp-agent-toolkit ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 16.10.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 1
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 0
Brak sygnałów. Repozytorium zmienione 16.10.2026, bez odwołań do wycofanych modeli i API.
MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.
Co robi i kiedy
Proponuje automatyczne refaktoryzacje i strategie obniżania złożoności kodu w ponad 25 językach, gdy złożoność cyklomatyczna jest wysoka.
Oryginalny opis (EN)
Provides automated refactoring suggestions and complexity reduction strategies using PMAT (Pragmatic AI Labs MCP Agent Toolkit). Use this skill when: - User requests code refactoring, optimization, or improvement - Complexity analysis reveals high-complexity functions (cyclomatic > 10) - Code review identifies maintainability issues - Technical debt needs to be addressed systematically - Preparing legacy code for modernization Supports 25+ languages with data-driven refactoring recommendations based on complexity metrics, mutation testing results, and industry best practices (Fowler's refactor
Jak działa
- When to Activate
- Core Refactoring Workflow
- Example Refactoring Workflows
- Refactoring Decision Matrix
- Refactoring Safety Checklist
- Integration with PMAT Quality Analysis
- Scientific Foundation
- Performance Optimization Tips
- Common Refactoring Patterns by Language
- When NOT to Refactor
Podgląd SKILL.md
---
effort: high # MACS F4: pinned for reproducible cost/behavior
name: Automated Refactoring with PMAT
description: |
Provides automated refactoring suggestions and complexity reduction strategies using PMAT
(Pragmatic AI Labs MCP Agent Toolkit). Use this skill when:
- User requests code refactoring, optimization, or improvement
- Complexity analysis reveals high-complexity functions (cyclomatic > 10)
- Code review identifies maintainability issues
- Technical debt needs to be addressed systematically
- Preparing legacy code for modernization
Supports 25+ languages with data-driven refactoring recommendations based on complexity metrics,
mutation testing results, and industry best practices (Fowler's refactoring catalog).
allowed-tools: Bash, Read, Write, Edit, Glob, Grep
---
# PMAT Automated Refactoring Skill
You are an expert at identifying refactoring opportunities and applying systematic code improvements using PMAT (Pragmatic AI Labs MCP Agent Toolkit).
## When to Activate
This skill should automatically activate when:
1. User mentions "refactor", "optimize", "improve", or "simplify" code
2. Complexity analysis reveals functions with cyclomatic complexity > 10
3. User requests code modernization or technical debt reduction
4. Preparing code for new features (pre-refactoring)
5. Code review reveals maintainability concerns
## Core Refactoring Workflow
### Step 1: Baseline Analysis
Before any refactoring, establish baseline metrics:
```bash
# Analyze current complexity
pmat analyze complexity --path <target_file_or_directory> --output baseline_complexity.json
# Analyze quality metrics
pmat analyze quality --path <target_file_or_directory> --output baseline_quality.json
# Identify dead code
pmat analyze dead-code --path <target_file_or_directory> --output dead_code.json
```
### Step 2: Identify Refactoring Targets
Prioritize based on:
- **Cyclomatic Complexity > 10**: High risk, needs simplification
- **Cognitive Complexity > 15**: High mental load
- **Maintainability Index < 50**: Difficult to maintain
- **Code Duplication > 5%**: Extract common patterns
- **Dead Code**: Remove unused functions/imports
### Step 3: Apply Refactoring Patterns
Use industry-standard refactoring patterns (Fowler, 1999):
#### Pattern 1: Extract Method
**When**: Function has cyclomatic complexity > 10
**Goal**: Break down complex function into smaller, testable units
```bash
# Analyze function complexity
pmat analyze complexity --path src/services/parser.rs --format detailed
# Identify extraction candidates (high complexity blocks)
# Manual extraction using Edit tool, guided by complexity hotspots
```
#### Pattern 2: Simplify Conditionals
**When**: Deeply nested if/else statements (nesting depth > 3)
**Goal**: Reduce cognitive complexity using early returns, guard clauses
```bash
# Identify nesting depth issues
pmat analyze complexity --path src/handlers/request.rs --metrics cognitive
# Apply transformations:
# - Replace nested if with early returns
# - Extract condition logic into named functions
# - Use pattern matching where applicable
```
#### Pattern 3: Remove Dead Code
**When**: Unused functions, imports, or variables detected
**Goal**: Reduce codebase size, improve maintainability
```bash
# Detect dead code
pmat analyze dead-code --path src/ --output dead_code_report.json
# Review and remove confirmed dead code
# Use Edit tool to safely remove unused code
```
#### Pattern 4: Extract Class/Module
**When**: Single file exceeds 500 LOC or handles multiple responsibilities
**Goal**: Improve modularity, single responsibility principle
```bash
# Analyze file size and responsibilities
pmat context --path src/large_module.py --output module_analysis.md
# Identify cohesive responsibilities
# Create new modules/classes
# Migrate related functions
```
#### Pattern 5: Reduce Duplication
**When**: Code duplication > 5% detected
**Goal**: Extract common patterns, improve DRY principle
```bash
# Detect code duplication
pmat analyze duplication --path src/ --threshold 5 --output duplication.json
# Extract duplicated code into shared functions/modules
```
### Step 4: Verify Refactoring Impact
After refactoring, measure improvements:
```bash
# Re-run complexity analysis
pmat analyze complexity --path <refactored_files> --output after_complexity.json
# Compare before/after metrics
pmat compare --baseline baseline_complexity.json --current after_complexity.json
# Ensure quality improved
pmat analyze quality --path <refactored_files> --output after_quality.json
```
## Example Refactoring Workflows
### Example 1: Simplify High-Complexity Function
**Scenario**: Function has cyclomatic complexity of 18
```bash
# Step 1: Analyze current state
pmat analyze complexity --path src/services/validator.rs
# Output (hypothetical):
# Function: validate_request
# Cyclomatic Complexity: 18 (HIGH)
# Cognitive Complexity: 24 (VERY HIGH)
# Lines: 150
# Nesting Depth: 4 (HIGH)
# Step 2: Identify refactoring opportunities
# - Extract validation logic into separate functions (lines 45-80)
# - Replace nested if statements with early returns (lines 90-120)
# - Extract complex condition into named function (line 105)
# Step 3: Apply refactorings using Edit tool
# [Use Edit tool to implement changes]
# Step 4: Verify improvement
pmat analyze complexity --path src/services/validator.rs
# Expected output:
# Function: validate_request (refactored)
# Cyclomatic Complexity: 6 (GOOD) ← Reduced from 18
# Cognitive Complexity: 8 (GOOD) ← Reduced from 24
# Lines: 80 ← Reduced from 150
# Nesting Depth: 2 (GOOD) ← Reduced from 4
# Improvement: 67% reduction in cyclomatic complexity
```
### Example 2: Dead Code Cleanup
```bash
# Step 1: Identify dead code
pmat analyze dead-code --path src/
# Output:
# Found 15 unused functions:
# 1. src/utils/formatter.rs::legacy_format() - Last used in v1.2
# 2. src/helpers/validation.rs::old_validator() - Replaced by new_validator()
# 3. src/api/deprecated.rs::old_endpoint() - Deprecated in v2.0
# ...
# Step 2: Review and confirm removal safety
# Check git history, grep for usage, review tests
# Step 3: Remove dead code using Edit tool
# [Remove each unused function]
# Step 4: Measure impact
# - Binary size reduced by ~45KB
# - Maintainability index improved from 62 to 75
# - Reduced cognitive load for developers
```
### Example 3: Extract Method Refactoring
```bash
# Step 1: Identify extraction candidate
pmat analyze complexity --path src/core/processor.rs --format detailed
# Output:
# Function: process_data
# Lines 100-180: Complexity 12 (candidate for extraction)
# Lines 200-250: Complexity 8 (candidate for extraction)
# Step 2: Extract complex sections into named methods
# Before:
# fn process_data(input: &str) -> Result<Data> {
# // Lines 100-180: Data validation (complexity 12)
# // Lines 200-250: Data transformation (complexity 8)
# }
# After (using Edit tool):
# fn process_data(input: &str) -> Result<Data> {
# let validated = validate_input_data(input)?;
# transform_validated_data(validated)
# }
#
# fn validate_input_data(input: &str) -> Result<Data> {
# // Extracted validation logic
# }
#
# fn transform_validated_data(data: Data) -> Result<Data> {
# // Extracted transformation logic
# }
# Step 3: Verify improvement
pmat analyze complexity --path src/core/processor.rs
# Results:
# - process_data: Complexity 3 (SIMPLE) ← Reduced from 20
# - validate_input_data: Complexity 6 (MODERATE)
# - transform_validated_data: Complexity 4 (SIMPLE)
# Total complexity: 13 (distributed across 3 testable functions)
```
## Refactoring Decision Matrix
Use this matrix to prioritize refactoring efforts:
| Complexity | Churn (changes/month) | Priority | Action |
|------------|----------------------|----------|--------|
| High (>15) | High (>10) | CRITICAL | Refactor immediately |
| High (>15) | Low (<3) | HIGH | Refactor when modifying |
| Medium (8-15) | High (>10) | HIGH | Simplify hot paths |
| Medium (8-15) | Low (<3) | MEDIUM | Monitor, refactor if needed |
| Low (<8) | Any | LOW | No action needed |
**Generate this matrix using**:
```bash
# Combine complexity + churn analysis
pmat analyze complexity --path src/ --output complexity.json
pmat analyze churn --path src/ --since "6 months ago" --output churn.json
pmat refactor-matrix --complexity complexity.json --churn churn.json
```
## Refactoring Safety Checklist
Before applying refactorings:
1. ✅ **Baseline metrics captured** (complexity, quality, test coverage)
2. ✅ **Tests exist and pass** (run `pmat test` or project test suite)
3. ✅ **Git commit created** (safe rollback point)
4. ✅ **Refactoring scope defined** (one pattern at a time)
5. ✅ **Impact understood** (dependencies, callers identified)
After applying refactorings:
1. ✅ **Tests still pass** (regression check)
2. ✅ **Complexity reduced** (verify with `pmat analyze complexity`)
3. ✅ **Functionality preserved** (manual smoke test)
4. ✅ **Code review requested** (peer validation)
## Integration with PMAT Quality Analysis
Refactoring should be guided by quality metrics:
```bash
# Generate comprehensive quality report
pmat analyze quality --path src/ --output quality_report.json
# Identify refactoring targets from quality report
# - Functions with maintainability index < 50
# - Files with technical debt > 10 hours
# - Modules with high coupling scores
# Apply targeted refactorings
# [Use patterns above]
# Verify quality improvement
pmat analyze quality --path src/ --output quality_after.json
pmat compare-quality --before quality_report.json --after quality_after.json
```
## Scientific Foundation
PMAT refactoring implements peer-reviewed principles:
1. **Fowler's Refactoring Catalog** (1999)
- Extract Method, Simplify Conditional, Remove Dead Code
- Behavior-preserving transformations
2. **McCabe's Cyclomatic Complexity** (1976)
- Threshold: 10 for well-structured code
- Predictor of defect density
3. **Cognitive Complexity** (SonarSource, 2021)
- Measures mental effort required to understand code
- Guide for simplification priorities
4. **Technical Debt Quadrant** (Fowler, 2009)
- Distinguish deliberate vs. inadvertent debt
- Prioritize repayment strategies
## Performance Optimization Tips
For large codebases:
1. **Incremental Refactoring**: Refactor one file/function at a time
2. **Hot Path Priority**: Focus on frequently changed files first
3. **Complexity Threshold**: Only refactor complexity > 10 (Pareto principle)
4. **Measure Impact**: Track time saved via maintainability improvements
## Common Refactoring Patterns by Language
### Rust
- Replace `unwrap()` with proper error handling (`?` operator)
- Extract complex `match` arms into functions
- Use `impl Trait` to simplify return types
- Apply lifetime elision rules
### Python
- Extract nested functions for clarity
- Replace complex comprehensions with explicit loops
- Use `dataclasses` for data structures
- Apply type hints for better IDE support
### JavaScript/TypeScript
- Extract arrow function logic into named functions
- Replace callback hell with `async/await`
- Use destructuring to simplify parameter passing
- Apply optional chaining (`?.`) to reduce null checks
### Go
- Extract error handling into helper functions
- Simplify interface implementations
- Use `defer` for cleanup logic
- Apply table-driven tests
## When NOT to Refactor
Avoid refactoring in these scenarios:
1. **No Tests**: Without tests, refactoring is unsafe (write tests first)
2. **Unclear Requirements**: Understand the domain before changing code
3. **Hot Production Issues**: Fix bugs first, refactor later
4. **Large-Scale Changes**: Break into smaller, incremental refactorings
5. **Working Code**: If complexity is low and code is stable, leave it
## Limitations
- **Semantic Preservation**: PMAT suggests refactorings but cannot guarantee behavior preservation (test coverage required)
- **Context Awareness**: Automated suggestions may not account for domain-specific constraints
- **Language-Specific Idioms**: Some refactorings require language-specific expertise
- **External Dependencies**: Refactoring may require updating API contracts
## Error Handling
If refactoring causes issues:
1. **Rollback**: `git reset --hard HEAD` (use the commit you created before refactoring)
2. **Incremental Revert**: Use Edit tool to undo specific changes
3. **Test Isolation**: Identify which refactoring broke tests
4. **Consult Baseline**: Compare against baseline metrics to identify regressions
## Best Practices
1. **One Pattern at a Time**: Apply one refactoring pattern per commit
2. **Test After Each Change**: Verify tests pass after each refactoring
3. **Commit Frequently**: Create rollback points for safety
4. **Measure Impact**: Track complexity reduction and quality improvement
5. **Document Rationale**: Explain why refactoring was needed (commit messages, code comments)
6. **Peer Review**: Get feedback on refactoring approach before merging
## Integration with Other PMAT Skills
**Workflow Recommendation**:
1. **pmat-context**: Understand codebase structure
2. **pmat-quality**: Identify quality issues
3. **pmat-refactor**: Apply systematic improvements ← This skill
4. **pmat-tech-debt**: Track debt repayment progress
## Version Requirements
- **Minimum**: PMAT v2.170.0
- **Recommended**: Latest version for best refactoring suggestions
- **Check version**: `pmat --version`
---
**Remember**: Refactoring is about improving code structure WITHOUT changing behavior. Always start with tests, establish baselines, apply one pattern at a time, and verify improvements with data.
Wersje
W bazie nie ma innych skilli o nazwie Automated Refactoring with PMAT.
Identyczna treść występuje jeszcze w 1 innych folderach na GitHubie. Tu pokazujemy jedną, najlepiej ocenioną kopię.
Migawka bazy z 28.10.2026 · wersja paczki 75707e67a91a (skrót SHA-256 całej paczki)
Pobrania w ostatnich 30 dniach: 0 · ranking
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 90Code Quality Analysis with PMAT
Analizuje jakość kodu, złożoność i dług techniczny narzędziem PMAT przy przeglądach, refaktoryzacji i commitach. - 90Deep Context Generation with PMAT
Generuje skompresowany, przyjazny dla LLM kontekst bazy kodu, gdy trzeba szybko zrozumieć nieznany projekt przed zmianą. - 100fai-refactor-complexity
Zmniejsza złożoność kodu analizą cyklomatyczną, wzorcami extract method i refaktoryzacją małymi krokami, gdy wyniki złożoności są wysokie lub kod trudno zrozumieć i testować. - 100component-refactoring
Refaktoryzuje złożone komponenty React we frontendzie Langflow, gdy złożoność przekracza 50 lub plik ma ponad 300 linii: podział kodu, wydzielanie hooków i redukcja złożoności. - 100code-quality
Uruchamia analizę jakości kodu: złożoność cyklomatyczna, code smells, naruszenia SOLID, martwy kod, duplikacja i ocena utrzymywalności pliku lub katalogu. - 100find-complexity
Wyszukuje funkcje i metody o wysokiej złożoności cyklomatycznej, nadmiernej długości lub zbyt wielu parametrach jako kandydatów do refaktoryzacji.