| name | ast-grep |
| description | ast-grep rule writing and usage best practices. This skill should be used when writing, reviewing, or debugging ast-grep rules for code search, linting, and transformation. Triggers on tasks involving YAML rules, pattern syntax, meta variables, constraints, or code rewriting. |
ast-grep Community Best Practices
Comprehensive best practices guide for ast-grep rule writing and usage, maintained by the ast-grep community. Contains 46 rules across 8 categories, prioritized by impact to guide automated rule generation and code transformation.
When to Apply
Reference these guidelines when:
- Writing new ast-grep rules for linting or search
- Debugging patterns that don't match expected code
- Optimizing rule performance for large codebases
- Setting up ast-grep projects with proper organization
- Reviewing ast-grep rules for correctness and maintainability
General Workflow
Follow this workflow when creating ast-grep rules for code search:
Step 1: Understand the Query
Clarify what you want to find:
- Target programming language
- Edge cases to handle
- What to include vs exclude
Step 2: Create Example Code
Write a sample code snippet representing the desired match pattern.
Step 3: Write the ast-grep Rule
Choose the right approach:
- Use
pattern for simple structures
- Use
kind with has/inside for complex structures
- Combine with
all, any, or not for compound queries
- Always use
stopBy: end for relational rules (inside, has) to ensure complete search
Step 4: Test the Rule
ast-grep run --pattern '[code]' --lang [language] --debug-query=ast
echo "[code]" | ast-grep scan --inline-rules "[rule]" --stdin
ast-grep scan --rule [file.yml] [path]
Step 5: Search the Codebase
Deploy the validated rule:
ast-grep run --pattern '[pattern]' --lang [language] [path]
ast-grep scan --rule [file.yml] [path]
ast-grep scan --rule [file.yml] --interactive [path]
Quick Tips
- Always use
stopBy: end - Ensures complete subtree traversal for relational rules
- Start simple, add complexity - Begin with patterns, progress to kinds, then relational rules
- Debug with AST inspection - Use
--debug-query=ast to verify structure matching
- Escape in inline rules - Use
\$VAR or single quotes for shell commands
- Test in playground first - Use https://ast-grep.github.io/playground.html for rapid iteration
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|
| 1 | Pattern Correctness | CRITICAL | pattern- |
| 2 | Meta Variable Usage | CRITICAL | meta- |
| 3 | Rule Composition | HIGH | compose- |
| 4 | Constraint Design | HIGH | const- |
| 5 | Rewrite Correctness | MEDIUM-HIGH | rewrite- |
| 6 | Project Organization | MEDIUM | org- |
| 7 | Performance Optimization | MEDIUM | perf- |
| 8 | Testing & Debugging | LOW-MEDIUM | test- |
Quick Reference
1. Pattern Correctness (CRITICAL)
2. Meta Variable Usage (CRITICAL)
3. Rule Composition (HIGH)
4. Constraint Design (HIGH)
5. Rewrite Correctness (MEDIUM-HIGH)
6. Project Organization (MEDIUM)
7. Performance Optimization (MEDIUM)
8. Testing & Debugging (LOW-MEDIUM)
How to Use
Read individual reference files for detailed explanations and code examples:
Full Compiled Document
- AGENTS.md - Complete compiled guide with all rules
Reference Files