claude-skill์(๋) ๋ฌด์์ ํ๋์?
๐ ast-grep์ ์ฌ์ฉํ ์ฝ๋ ๊ฒ์ ๊ฐํ: ์ฝ๋ ๊ตฌ์กฐ์์ ํจํด์ ์ฐพ์ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ๋ถ์์ ๊ฐ์ ํฉ๋๋ค.
๊ฐ์
์ด ์คํฌ์ ast-grep์ Claude Code์ ํตํฉํ์ฌ, ์ฝ๋์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ณ ๊ธ ํจํด ๊ฒ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํ ์คํธ ๊ธฐ๋ฐ ๊ฒ์์ ํ๊ณ๋ฅผ ๋์ด ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
- ๊ตฌ์กฐ์ ๊ฒ์: ๋ณ์๋ช ์ด๋ ์ฃผ์์ด ์๋ ์ฝ๋์ ์ค์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจํด ๊ฒ์
- ํจํด ๋งค์นญ: ํน์ ์ค๋ฅ ์ฒ๋ฆฌ ํจํด, ๋นํ์ค ์ฝ๋ ์คํ์ผ, ๋ณด์ ์ทจ์ฝ์ ์๋ณ
- YAML ๊ธฐ๋ฐ ๊ท์น: ์ฌ์ฉ์ ์ ์ ๊ฒ์ ๊ท์น์ YAML ํ์ผ๋ก ์ ์ํ์ฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ค์ํ ์ธ์ด ์ง์: JavaScript, TypeScript, Python, Rust, Go ๋ฑ ์ฃผ์ ์ธ์ด ์ง์
์ค์น
# ast-grep ์ค์น (์: npm์ ํตํด)
npm install -g @ast-grep/cli
# ๋๋ cargo๋ฅผ ํตํด
cargo install ast-grep
์ฌ์ฉ๋ฒ
๊ธฐ๋ณธ ๊ฒ์
# ํน์ ํจํด ๊ฒ์
sg --pattern 'try { $BODY } catch { $ERR }' --lang javascript
๊ท์น ํ์ผ ์ฌ์ฉ
.sgconfig.yaml ํ์ผ์ ํ๋ก์ ํธ ๋ฃจํธ์ ์์ฑํ๊ณ ๊ท์น ์ ์:
rules:
- id: no-console-log
severity: warning
message: ์ฝ์ ๋ก๊ทธ ์ฌ์ฉ ๊ธ์ง
pattern: console.log($ARG)
์์
๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ ์ฒ๋ฆฌ ํจํด์ ๊ฒ์ํ ์ ์์ต๋๋ค:
// ๊ฒ์ ๋์: ๋ชจ๋ try-catch ๋ธ๋ก
sg --pattern 'try { $BODY } catch ($$$ERR) { console.error($$$MSG) }' --lang javascript