Use ast-grep for AST-based code pattern matching.
The code-structural-search skill provides AST-based code pattern matching using ast-grep, a fast structural search and replace tool.
Key Benefits:
npm install -g @ast-grep/cli
cargo install ast-grep
ast-grep --version
# or
sg --version
Find all functions in TypeScript:
sg -p 'function $NAME($$$) { $$ }' --lang ts
Find unvalidated SQL queries:
sg -p 'db.query(`SELECT * FROM ${$VAR}`)' --lang js
Find old API usage:
sg -p 'oldAPI.deprecatedMethod($$$)' --lang js
| Symbol | Meaning | Example |
| ------- | ------------------------------- | --------------------- |
| $NAME | Single node/identifier | function $NAME() {} |
| $$$ | Zero or more statements/nodes | class $NAME { $$$ } |
| $$ | Zero or more statements (block) | if ($COND) { $$ } |
| $_ | Anonymous wildcard (discard) | console.log($_) |
| Language | Flag | Extensions |
| ---------- | ------------- | --------------- |
| JavaScript | --lang js | .js, .jsx |
| TypeScript | --lang ts | .ts, .tsx |
| Python | --lang py | .py, .pyi |
| Go | --lang go | .go |
| Rust | --lang rs | .rs |
| Java | --lang java | .java |
| C | --lang c | .c, .h |
| C++ | --lang cpp | .cpp, .cc, .hpp |
| C# | --lang cs | .cs |
Full language support: See PATTERNS.md for complete list.
sg -p 'async function $NAME($$$) { $$ }' --lang ts
sg -p 'class $NAME extends React.Component { $$$ }' --lang tsx
sg -p 'function $NAME($$$) { $$ }' --lang js | grep -v 'try'
sg -p 'oldAPI.method($$$)' --lang js
Find SQL injection risks:
sg -p 'db.query(`$$$${$VAR}$$$`)' --lang js
Find XSS risks:
sg -p '$ELEM.innerHTML = $DATA' --lang js
// Use the skill
Skill({ skill: 'code-structural-search', args: 'function authenticate($$$) { $$ } --lang ts' });
# Run directly
ast-grep -p 'pattern-here' --lang ts
# or with short name
sg -p 'pattern-here' --lang ts
Combine with other skills for best results:
Broad search (ripgrep):
Skill({ skill: 'ripgrep', args: 'authenticate --type ts' });
Structural refinement (ast-grep):
Skill({ skill: 'code-structural-search', args: 'function authenticate($$$) { $$ } --lang ts' });
Semantic understanding (Phase 1):
Skill({ skill: 'code-semantic-search', args: 'authentication logic' });
sg -p 'function $NAME() {}' --lang js
# Shows filename, line number, matched code
sg -p 'function $NAME() {}' --lang js --json
# Returns structured JSON for parsing
sg -p 'function $NAME() {}' --lang js -A 3 -B 3
# Shows 3 lines before and after each match
# GOOD - Fast, precise
sg -p '$PATTERN' --lang ts
# BAD - Slow, tries all languages
sg -p '$PATTERN'
# GOOD - Focused search
sg -p '$PATTERN' --lang ts src/
# BAD - Searches entire project
sg -p '$PATTERN' --lang ts
# Skip node_modules, dist, etc.
sg -p '$PATTERN' --lang ts --no-ignore tests/
sg -p '$PATTERN' --lang ts --threads 4
# All functions
sg -p 'function $NAME($$$) { $$ }' --lang js
# Async functions
sg -p 'async function $NAME($$$) { $$ }' --lang ts
# Arrow functions
sg -p 'const $NAME = ($$$) => { $$ }' --lang js
# Classes
sg -p 'class $NAME { $$$ }' --lang ts
# React components
sg -p 'function $NAME($PROPS) { return $$$ }' --lang tsx
# All functions
sg -p 'def $NAME($$$): $$$' --lang py
# Async functions
sg -p 'async def $NAME($$$): $$$' --lang py
# Classes
sg -p 'class $NAME: $$$' --lang py
# All functions
sg -p 'func $NAME($$$) $RETURN { $$ }' --lang go
# Structs
sg -p 'type $NAME struct { $$$ }' --lang go
# All functions
sg -p 'fn $NAME($$$) -> $RETURN { $$ }' --lang rs
# Impl blocks
sg -p 'impl $NAME { $$$ }' --lang rs
Solution:
npm list -g @ast-grep/clinpx @ast-grep/cli (if npm install local)Solution:
--lang ts for TypeScript)--debug-query to see AST representationSolution:
sg -p '$PATTERN' --lang ts src/sg -p '$PATTERN' --lang ts --no-ignore tests/Solution:
--lang ts (don't make ast-grep guess)sg -p '$PATTERN' --lang ts src/--threads 4sg -p 'oldAPI.method($$$)' -r 'newAPI.method($$$)' --lang js
sg -p '$PATTERN' --lang ts --interactive
# Shows matches one by one, confirm each replacement
Create .ast-grep/rules/security.yml:
id: no-sql-injection
language: js
rule:
pattern: db.query(`SELECT * FROM ${$VAR}`)
message: Potential SQL injection vulnerability
severity: error
Run with:
sg scan
rule:
all:
- pattern: function $NAME($$$) { $$ }
- not:
pattern: try { $$ } catch { $$ }
Before starting:
Read .claude/context/memory/learnings.md
After completing:
.claude/context/memory/learnings.md.claude/context/memory/issues.md.claude/context/memory/decisions.mdASSUME INTERRUPTION: If it's not in memory, it didn't happen.
npx skills add oimiragieo/code-structural-search下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer