| name | refactoring-code |
| description | Improve code structure without changing behavior. Use when code is hard to read, modify, or test. Covers Extract Method, Rename, and other safe refactorings. |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep, mcp__serena__* |
Refactoring Code
MCP Tools
Serena (safe refactoring):
find_symbol— Locate refactoring targetsfind_referencing_symbols— Find ALL usages before changesrename_symbol— Rename across entire codebase safelyreplace_symbol_body— Replace function implementationsget_symbols_overview— Understand module structure
The Refactoring Hat
When refactoring, you change structure without changing behavior. Always have tests passing before and after.
Workflows
- Tests Green: Ensure all tests pass before starting
- Analyze: Use Serena to understand dependencies
- Small Steps: Make one small change at a time
- Verify Usages: Use
find_referencing_symbolsbefore changes - Commit Often: Commit after each successful refactoring
- Tests Green: Verify tests still pass after each change
Common Refactorings
Extract Method
When a code block does one thing, extract it to a named method.
- Use
find_referencing_symbolsto verify extraction won't break callers - Extract the method
- Run tests
Rename for Clarity
Names should reveal intent.
- Use
find_referencing_symbolsto find ALL usages - Use
rename_symbolfor codebase-wide rename - Verify no missed references
Remove Dead Code
- Use
find_referencing_symbolsto verify code is unused - If zero references, safe to remove
- If references exist, trace to understand usage
Code Smells to Address
- Long Method: Extract smaller methods
- Long Parameter List: Introduce parameter object
- Duplicate Code: Extract to shared function (use
find_symbolto locate duplicates) - Feature Envy: Move method to the class it uses most
- Data Clumps: Group related data into objects
- Primitive Obsession: Replace primitives with value objects
Safety Rules
- Never refactor and add features simultaneously
- Always use
find_referencing_symbolsbefore removing/renaming - Run tests after every change
- Use Serena's
rename_symbolinstead of find-replace - Commit working states frequently