How to Refactor Code#

Use gptme to rename symbols, extract functions, and restructure code across multiple files.

Rename a function or variable everywhere#

gptme 'rename the function `parse_config` to `load_config` across all Python files in src/' src/

gptme will search, edit, and verify the rename is consistent.

Rename with a different signature#

When the rename comes with a signature change:

gptme 'rename UserRecord to User and change its constructor to take keyword arguments only' \
  src/models.py src/api.py tests/test_models.py

Extract a helper function#

gptme 'the validation logic in process_order() is repeated; extract it into a validate_order() function' src/orders.py

Split a large module#

gptme 'this file is too large; split it into utils.py (pure helpers), models.py (dataclasses), and api.py (HTTP handlers)' src/monolith.py

Change an API’s interface#

gptme 'change the Database.query() method to be async; update all callers' \
  src/db.py src/api.py src/worker.py tests/

Remove deprecated code#

gptme 'remove all code marked with the TODO: deprecated comment and update callers accordingly' src/

Add a new parameter to a function with a default#

gptme 'add a timeout parameter (default 30s) to the http_get() function and thread it through all callers' src/http.py src/client.py

Restructure a directory#

gptme 'move all test fixtures from tests/fixtures.py into individual files under tests/fixtures/; update imports'

Check nothing broke after refactoring#

Always end a refactor session with a test run:

gptme 'rename parse_config to load_config across src/' - 'run tests and fix any failures'

Tips#

  • Include all relevant files: pass every file that contains the symbol being changed.

  • Verify with tests: chain - 'run tests' so gptme can catch regressions immediately.

  • One change at a time: large refactors are more reliable when split into focused steps (rename first, then signature change).

  • Describe the intent: “extract the validation logic” is better than just “move this code here”; gptme can find equivalent patterns you didn’t enumerate.