ast-grep
Original:🇺🇸 English
Translated
Effective code search, analysis, and refactoring using ast-grep (sg). Use this skill for precise AST-based code modifications, structural search, and linting.
2installs
Added on
NPX Install
npx skill4agent add outlinedriven/odin-codex-plugin ast-grepTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →ast-grep (sg)
ast-grep is a fast and polyglot tool for code searching, linting, and rewriting based on Abstract Syntax Trees (AST). It excels at structural search and replace where regex fails.
When to use
- Structural Search: Finding code based on structure (e.g., "all function calls to with 2 arguments") regardless of whitespace.
foo - Refactoring: Renaming variables, changing function signatures, or transforming code patterns safely.
- Linting: Creating custom rules to enforce code style or best practices.
- Code Analysis: Extracting information from codebases.
Quick Start
CLI Basics
bash
# Search (pattern must be in single quotes)
ast-grep -p '$A + $B' --lang ts
# Rewrite (dry run)
ast-grep -p '$A != null' --rewrite '$A' --lang ts
# Interactive Rewrite
ast-grep -p 'var $A = $B' --rewrite 'const $A = $B' --interactivePattern Syntax
- Meta-variables: matches any single node.
$VAR - Multi-meta-variables: matches zero or more nodes (list of items).
$$$ARGS - Wildcard: matches any node (non-capturing).
$_ - Anonymous: matches any list of nodes (non-capturing).
$$
See Pattern Syntax for details.
Core Concepts
Understanding Named vs Unnamed nodes and Matching Strictness is crucial for precise patterns.
- Named Nodes: ,
identifier(matched byfunction_definition).$VAR - Unnamed Nodes: ,
(,)(skipped by default in;mode).smart - Strictness: Control matching precision (,
smart,cst,ast,relaxed).signature
See Core Concepts for details.
Rule Configuration (YAML)
For complex tasks, use YAML configuration files.
yaml
id: no-console-log
language: TypeScript
rule:
pattern: console.log($$$ARGS)
inside:
kind: function_declaration
stopBy: end
fix: '' # Remove the logSee Rule Configuration for details.
Advanced Rewriting
ast-grep supports complex transformations (regex replace, case conversion) and rewriters for sub-node transformation.
See Rewriting & Transformations for details.
Project Setup & Testing
For larger projects, organize rules and tests using .
sgconfig.yml- Scaffold:
ast-grep new project - Config: defines rule and test directories.
sgconfig.yml - Testing: Define and
validcases to ensure rule accuracy.invalid
See Project Setup & Testing for details.
Utility Rules
Reuse logic with local or global utility rules. Enables recursive matching.
yaml
utils:
is-literal:
any: [{kind: string}, {kind: number}]
rule:
matches: is-literalSee Utility Rules for details.
Configuration Reference
Full reference for YAML fields (, , , ) and supported languages.
idseverityfilesignoresSee Configuration Reference for details.
CLI Reference
Common commands: , , , , .
scanrunnewtestlspSee CLI Reference for details.