--- name: code-migrator description: Migrate legacy code to modern frameworks, languages, and patterns with automated refactoring and testing allowed-tools: ["Read", "Write", "Edit", "Glob", "Grep", "Bash", "Task"] version: 1.0.0 author: GLINCKER Team license: Apache-2.0 keywords: [migration, modernization, refactoring, legacy-code, framework-upgrade, language-translation] --- # Code Migrator **⚡ UNIQUE FEATURE**: Automated legacy code modernization with AI-powered migration paths, dependency resolution, test generation, and risk analysis. Migrate between languages, frameworks, or architectural patterns with confidence. ## What This Skill Does Intelligently migrates codebases with minimal manual intervention: ### Language Migrations - **Python 2 → Python 3**: Syntax, imports, unicode handling - **JavaScript → TypeScript**: Type inference and definitions - **Java 8 → Java 17+**: Modern language features - **Angular.js → React/Vue**: Complete framework migration - **PHP 5 → PHP 8**: Modernize deprecated features - **Ruby 2 → Ruby 3**: Update syntax and gems ### Framework Upgrades - **React Class → Hooks**: Convert class components - **Vue 2 → Vue 3**: Composition API migration - **Django 2 → Django 4**: Settings and ORM updates - **Rails 5 → Rails 7**: Modern Rails patterns - **Express 4 → Express 5**: Route handlers, middleware ### Architectural Migrations - **Monolith → Microservices**: Service extraction - **REST → GraphQL**: API transformation - **Callback Hell → Async/Await**: Promise modernization - **MVC → Component-Based**: Architecture refactoring ## Why This Is Revolutionary First migration skill with: - **AI-powered analysis**: Understands code context and intent - **Risk assessment**: Identifies high-risk changes - **Incremental migration**: Migrate module by module - **Automated testing**: Generates tests to verify migration - **Rollback support**: Safe migration with undo capability - **Dependency resolution**: Automatically updates imports and packages - **Pattern recognition**: Identifies and modernizes anti-patterns ## Instructions ### Phase 1: Migration Discovery & Analysis 1. **Identify Migration Type**: ``` Ask user: - What are you migrating FROM? - What are you migrating TO? - Full codebase or specific modules? - Any constraints or requirements? ``` 2. **Analyze Current State**: ```bash # Discover project structure Use Glob to find all source files Use Grep to identify: - Framework versions - Import patterns - Deprecated APIs - Code smells ``` 3. **Generate Migration Plan**: ```markdown # Migration Plan: Python 2 → Python 3 ## Scope - Files to migrate: 247 - Estimated effort: 2-3 days - Risk level: Medium ## Changes Required ### High Priority (Breaking Changes) 1. Print statements → print() function (187 occurrences) 2. Unicode strings (u'') → default strings (423 occurrences) 3. Dict.iteritems() → Dict.items() (89 occurrences) ### Medium Priority (Deprecated APIs) 1. urllib → urllib.request (34 occurrences) 2. ConfigParser → configparser (12 occurrences) ### Low Priority (Best Practices) 1. Old-style classes → new-style classes 2. % formatting → f-strings ## Dependencies to Update - Django 1.11 → Django 4.2 - requests 2.9 → requests 2.31 - pytest 3.0 → pytest 7.4 ## Migration Strategy - Phase 1: Update dependencies (safe, reversible) - Phase 2: Automated syntax fixes (safe) - Phase 3: Manual code review (requires attention) - Phase 4: Test and validate ## Risk Assessment - **Critical**: Database migrations (manual review needed) - **High**: Third-party API calls (may have changed) - **Medium**: String encoding (test thoroughly) - **Low**: Print statements (auto-fixable) ``` ### Phase 2: Automated Migration 1. **Create Migration Branch**: ```bash git checkout -b migrate-to-python3 ``` 2. **Backup Current State**: ```bash # Create backup git tag pre-migration-backup ``` 3. **Execute Migration** (module by module): **For each file/module**: a. **Read current code**: ```python Use Read to load file contents ``` b. **Apply transformations**: ```python # Example: Python 2 → 3 print statements # Before print "Hello, World!" # After print("Hello, World!") # Example: Unicode strings # Before u"Hello, 世界" # After "Hello, 世界" # Example: Dict iteration # Before for key, value in my_dict.iteritems(): # After for key, value in my_dict.items(): ``` c. **Update imports**: ```python # Before import urllib import ConfigParser # After import urllib.request import configparser ``` d. **Modernize patterns**: ```python # Before: Old-style formatting "Hello, %s!" % name # After: f-strings f"Hello, {name}!" # Before: Manual file handling f = open('file.txt') content = f.read() f.close() # After: Context manager with open('file.txt') as f: content = f.read() ``` 4. **Use Edit tool** to apply changes: ``` For each transformation: - Use Edit with old_string/new_string - Preserve formatting and style - Add comments where behavior changes ``` ### Phase 3: Dependency Migration 1. **Update package manager files**: ```python # requirements.txt migration # Before Django==1.11.29 requests==2.9.1 # After Django==4.2.0 requests==2.31.0 ``` ```json // package.json migration // Before { "dependencies": { "react": "^16.8.0" } } // After { "dependencies": { "react": "^18.2.0" } } ``` 2. **Install new dependencies**: ```bash pip install -r requirements.txt # or npm install ``` ### Phase 4: Test Generation & Validation 1. **Generate Migration Tests**: ```python # Use Task to launch test-generator agent Task: "Generate tests that verify migration correctness" For each migrated function: - Create test with Python 2/3 compatible inputs - Verify output is identical - Test edge cases ``` 2. **Run Existing Tests**: ```bash # Run original test suite pytest tests/ # Report: - Tests passing: 247/250 - Tests failing: 3 - New errors: 0 ``` 3. **Run Migration Validation**: ```bash # Custom validation checks - Import validation - Syntax check (python -m py_compile) - Linting (flake8, pylint) - Type checking (mypy for Python, tsc for TypeScript) ``` ### Phase 5: Manual Review Queue For high-risk changes: ```markdown ## Manual Review Required ### File: api/payments.py (Lines 45-67) **Risk**: HIGH **Reason**: External API call with changed response format ```python # Original (Python 2) response = urllib.urlopen(url) data = json.loads(response.read()) # Migrated (Python 3) response = urllib.request.urlopen(url) data = json.loads(response.read().decode('utf-8')) ``` **Action needed**: Verify API still returns same data structure ### File: database/models.py (Lines 102-115) **Risk**: CRITICAL **Reason**: Database model migration **Action needed**: Create and review Django migration files ``` ### Phase 6: Documentation & Rollback Plan 1. **Generate Migration Report**: ```markdown # Migration Report: Python 2 → Python 3 **Date**: 2025-01-13 **Duration**: 3.2 hours **Status**: ✅ Complete (3 items need manual review) ## Statistics - Files modified: 247 - Lines changed: 1,834 - Dependencies updated: 12 - Tests updated: 45 - New tests added: 18 ## Breaking Changes 1. Unicode handling in API responses 2. Dictionary iteration in processors 3. Print output in CLI tools ## Rollback Instructions ```bash git checkout pre-migration-backup ``` ## Next Steps 1. Review 3 flagged items in review-queue.md 2. Run integration tests 3. Deploy to staging 4. Monitor for issues ``` 2. **Create Migration Documentation**: - What changed and why - How to use new patterns - Common gotchas - Troubleshooting guide ## Example Migrations ### Example 1: React Class → Hooks **User**: "Migrate this component to hooks" **Input**: ```javascript class UserProfile extends React.Component { constructor(props) { super(props); this.state = { user: null, loading: true }; } componentDidMount() { fetchUser(this.props.userId) .then(user => this.setState({ user, loading: false })); } render() { const { user, loading } = this.state; if (loading) return