| name | ast-grep |
| description | Structural code search and refactoring via ast-grep. Reach for this when Edit fails with "old_string not unique", when refactoring across formatting variations, or when matching code shape rather than text. |
ast-grep
Default invocation:
ast-grep -l LANG -p 'PATTERN'
ast-grep -l LANG -p 'OLD' -r 'NEW'
ast-grep -l LANG -p 'OLD' -r 'NEW' --update-all
-l is required -- auto-detect is unreliable. Interactive mode (-i) does not work from this harness.
Metavariables
$VAR -- one AST node (an expression, an identifier, ...)
$$$ARGS -- zero or more items in a list (function args, statement bodies)
$$STMT -- multiple statements
Canonical patterns
ast-grep -l typescript -p 'oldFn($$$ARGS)' -r 'newFn($$$ARGS)'
ast-grep -l javascript -p '$OBJ.oldMethod($$$ARGS)' -r '$OBJ.newMethod($$$ARGS)'
ast-grep -l typescript -p 'import $WHAT from "old-pkg"' -r 'import $WHAT from "new-pkg"'
Workflow: run without -r to see matches, run with -r to preview the diff, then add --update-all. For surgical per-site control, use ast-grep to find locations and Edit to apply.
To list a file's or package's structure (functions, types, imports/exports) rather than match a pattern, use the outline subcommand -- see the code-structure skill.