The create
command generates a new codemod function with the necessary boilerplate.
gs create rename-function .
Usage
gs create NAME PATH [OPTIONS]
Arguments
NAME
: The name of the codemod to create (e.g., “rename-function”)
PATH
: The path where the codemod should be created (e.g., ”.” for current directory)
Options
--description
, -d
: A description of what the codemod should do. This will be used to generate an AI-powered implementation.
Generated Files
When you run gs create rename-function .
, it creates:
.codegen/
└── codemods/
└── rename_function/
├── rename_function.py # The codemod implementation
└── rename_function-system-prompt.txt # System prompt (if --description used)
The generated codemod will have this structure:
import graph_sitter
from graph_sitter import Codebase
@graph_sitter.function("rename-function")
def run(codebase: Codebase):
"""Add a description of what this codemod does."""
# Add your code here
print('Total files: ', len(codebase.files))
print('Total functions: ', len(codebase.functions))
print('Total imports: ', len(codebase.imports))
if __name__ == "__main__":
print('Parsing codebase...')
codebase = Codebase("./")
print('Running...')
run(codebase)
Examples
Create a codemod:
gs create rename-function .
Next Steps
After creating a codemod:
- Edit the implementation in the generated .py file
- Test it with
gs run rename-function
Common Issues
If you see “File already exists”:
- Choose a different name for your codemod, or
- Use the
--overwrite
flag to replace the existing file
The codemod name will be converted to snake_case for the Python file (e.g., update-imports
becomes update_imports.py
).
Responses are generated using AI and may contain mistakes.