Refactoring Code¶
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 Grep to understand dependencies
- [ ] Small Steps: Make one small change at a time
- [ ] Verify Usages: Use Grep to find all usages before 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 Grep to verify extraction won't break callers
- Extract the method
- Run tests
Rename for Clarity¶
Names should reveal intent.
- Use Grep to find ALL usages
- Use Edit with replace_all for codebase-wide rename
- Verify no missed references
Remove Dead Code¶
- Use Grep to 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 Grep to 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 Grep to find all usages before removing/renaming
- Run tests after every change
- Use targeted Edit operations instead of broad find-replace
- Commit working states frequently