| disable-model-invocation | true |
| name | ast-grep |
| description | Creates ast-grep patterns for structural code search. Use when finding functions/classes by structure, refactoring code, or when grep returns too many false positives. |
ast-grep Patterns
AST ๊ธฐ๋ฐ ๊ตฌ์กฐ์ ์ฝ๋ ๊ฒ์์ ์ง์ํฉ๋๋ค. ํ
์คํธ ๋งค์นญ์ด ์๋ ์ฝ๋ ๊ตฌ์กฐ๋ก ์ ๋ฐ ๊ฒ์.
ํต์ฌ ์ฒ ํ:
- ๊ตฌ์กฐ์ ๊ฒ์: ์ฝ๋์ ์๋ฏธ ๋จ์๋ก ๊ฒ์ (๋ณ์๋ช
, ํจ์ ์๊ทธ๋์ฒ ๋ฑ)
- ๋
ธ์ด์ฆ ์ ๊ฑฐ: ์ฃผ์, ๊ณต๋ฐฑ, ํฌ๋งท ์ฐจ์ด ๋ฌด์
- ์ธ์ด ์ธ์: ๊ฐ ์ธ์ด์ AST ๊ตฌ์กฐ์ ๋ง๋ ํจํด
- Grep ๋์ฒด: ๋ณต์กํ ์ ๊ท์ ๋์ ์ง๊ด์ ํจํด
Instructions
์ํฌํ๋ก์ฐ 1: ํจํด ์์ฑ
์ฌ์ฉ์ ์์ฒญ์์ ํ์
:
- ์ธ์ด: TypeScript, Python, Go, Rust ๋ฑ
- ๋์: ํจ์, ํด๋์ค, import, ๋ณ์ ๋ฑ
- ์กฐ๊ฑด: ํน์ ์ด๋ฆ, ํจํด, ๊ตฌ์กฐ
๊ธฐ๋ณธ ๋ช
๋ น:
ast-grep --lang <language> -p '<pattern>'
์ํฌํ๋ก์ฐ 2: ๋ฉํ๋ณ์ ํ์ฉ
| ๋ฉํ๋ณ์ | ์๋ฏธ | ์์ |
|---|
$NAME | ๋จ์ผ ๋
ธ๋ ์บก์ฒ | function $NAME() |
$_ | ๋จ์ผ ๋
ธ๋ (๋ฌด์) | import { $_ } from "react" |
$$$ | 0๊ฐ ์ด์ ๋
ธ๋ | function $NAME($$$) { $$$ } |
$$ARGS | ์ด๋ฆ ๋ถ์ธ ๋ค์ค ์บก์ฒ | console.log($$ARGS) |
์ํฌํ๋ก์ฐ 3: ์ธ์ด๋ณ ํจํด
์์ฒญ ์ธ์ด์ ๋ฐ๋ผ ์ ์ ํ ํจํด ์ ๊ณต:
| ์ธ์ด | ํ์ฅ์ | --lang ๊ฐ |
|---|
| TypeScript | .ts, .tsx | typescript, tsx |
| JavaScript | .js, .jsx | javascript, jsx |
| Python | .py | python |
| Go | .go | go |
| Rust | .rs | rust |
| Java | .java | java |
Quick Reference
ํ์ ์ต์
--lang <lang>
-p '<pattern>'
--json
-r '<replacement>'
--rewrite
-i
์์ฃผ ์ฐ๋ ํจํด
ast-grep --lang typescript -p 'function $NAME($$$) { $$$ }'
ast-grep --lang typescript -p 'const $NAME = ($$$) => $$$'
ast-grep --lang tsx -p 'function $NAME($$$): JSX.Element { $$$ }'
ast-grep --lang typescript -p 'import { $_ } from "react"'
ast-grep --lang typescript -p 'class $NAME { $$$ }'
ast-grep --lang javascript -p 'console.log($$$)'
Examples
ํจ์ ์ฐพ๊ธฐ
์์ฒญ: "fetchUser ํจ์ ์ ์ ์์น"
ast-grep --lang typescript -p 'function fetchUser($$$) { $$$ }'
ast-grep --lang typescript -p 'const fetchUser = $$$'
React Hook ์ฌ์ฉ ์ฐพ๊ธฐ
์์ฒญ: "useState ์ฌ์ฉํ๋ ๊ณณ"
ast-grep --lang tsx -p 'const [$_, $_] = useState($$$)'
API ์๋ํฌ์ธํธ ์ฐพ๊ธฐ
์์ฒญ: "Express ๋ผ์ฐํธ ํธ๋ค๋ฌ"
ast-grep --lang typescript -p 'app.$METHOD($$$)'
ast-grep --lang typescript -p 'app.get($$$)'
Python ๋ฐ์ฝ๋ ์ดํฐ
์์ฒญ: "@property ์ฌ์ฉํ๋ ๋ฉ์๋"
ast-grep --lang python -p '
@property
def $NAME(self):
$$$
'
Go ๊ตฌ์กฐ์ฒด
์์ฒญ: "Error ์ธํฐํ์ด์ค ๊ตฌํ"
ast-grep --lang go -p 'func ($_ $_) Error() string { $$$ }'
๋ฆฌํฉํ ๋ง (๋์ฒด)
์์ฒญ: "console.log๋ฅผ logger.debug๋ก ๋ณ๊ฒฝ"
ast-grep --lang typescript -p 'console.log($$$ARGS)' -r 'logger.debug($$$ARGS)'
ast-grep --lang typescript -p 'console.log($$$ARGS)' -r 'logger.debug($$$ARGS)' --rewrite
vs Grep
| ์ํฉ | Grep | ast-grep | ์ด์ |
|---|
| ๋จ์ ํ
์คํธ | โ
๋น ๋ฆ | ๋ถํ์ | ๊ตฌ์กฐ ๋ถ์ ์ค๋ฒํค๋ |
| ํจ์ ์ ์ | โ ๋
ธ์ด์ฆ | โ
์ ํ | ์ฃผ์/๋ฌธ์์ด ๋ด false positive ์ ๊ฑฐ |
| ๋ณ์ ์ถ์ | โ ํผ๋ | โ
์ธ์ | AST๋ก ์ค์ฝํ ๊ตฌ๋ถ |
| ๋ฆฌํฉํ ๋ง | โ ๋ถ๊ฐ | โ
-r | ๊ตฌ์กฐ ๋ณด์กด ๋์ฒด |
์ ํ ๊ธฐ์ค: ๊ตฌ์กฐ๊ฐ ์ค์ํ๋ฉด ast-grep, ํ
์คํธ๋ง ์ฐพ์ผ๋ฉด Grep
Technical Details
- ๊ณต์ ๋ฌธ์: https://ast-grep.github.io/
- ์ง์ ์ธ์ด: TypeScript, JavaScript, Python, Go, Rust, Java, C, C++, Kotlin ๋ฑ
- ์ค์น:
brew install ast-grep ๋๋ cargo install ast-grep
skill ํธ์ถ vs ์ง์ ์ฌ์ฉ:
- ์ง์ ์ฌ์ฉ: ๋จ์ผ ๋ฉํ๋ณ์, ํ์ค ํจ์/ํด๋์ค ๊ฒ์
- skill ํธ์ถ: ๋ฆฌํฉํ ๋ง (-r), ์ธ์ด๋ณ ํน์ ๊ตฌ๋ฌธ, ์กฐ๊ฑด๋ถ ๋งค์นญ
๊ณ ๊ธ ๊ธฐ๋ฅ ๋ฆฌ์์ค
resources/advanced-rules.md: YAML ๋ฃฐ ์์คํ
, Relational Rules(inside/has/follows), ๋ณด์ ์ค์บ๋ ๋ฃฐ, CI ํตํฉ