Oh My ClaudeCode
Tools

AST Grep

AST 기반 구조적 코드 검색 및 치환 도구

개요

AST Grep 도구는 @ast-grep/napi를 사용하여 코드의 구조적 패턴을 검색하고 치환합니다. 정규식이 아닌 AST(Abstract Syntax Tree) 기반으로 동작하므로, 코드 구조를 정확하게 매칭합니다.

도구 목록

AST 패턴으로 코드를 검색합니다.

ast_grep_search(
  pattern="console.log($$$ARGS)",
  lang="typescript"
)

메타 변수

메타 변수설명예시
$VAR단일 AST 노드 매칭$VAR.map($FUNC)
$$$여러 AST 노드 매칭console.log($$$ARGS)

예시

# 모든 console.log 찾기
ast_grep_search(pattern="console.log($$$)", lang="typescript")

# 특정 패턴의 함수 호출 찾기
ast_grep_search(pattern="fetch($URL, { method: 'POST', $$$REST })", lang="typescript")

# React useState 사용 찾기
ast_grep_search(pattern="const [$STATE, $SETTER] = useState($INIT)", lang="tsx")

# try-catch 블록 찾기
ast_grep_search(pattern="try { $$$ } catch($ERR) { $$$ }", lang="typescript")

ast_grep_replace

AST 패턴으로 코드를 구조적으로 치환합니다.

ast_grep_replace(
  pattern="console.log($$$ARGS)",
  replacement="logger.info($$$ARGS)",
  lang="typescript",
  dryRun=true
)

항상 dryRun=true로 먼저 실행하여 변경 사항을 확인하세요.

예시

# console.log를 logger.info로 변환
ast_grep_replace(
  pattern="console.log($$$ARGS)",
  replacement="logger.info($$$ARGS)",
  lang="typescript",
  dryRun=true
)

# 동기 함수를 async로 변환
ast_grep_replace(
  pattern="function $NAME($$$PARAMS) { $$$BODY }",
  replacement="async function $NAME($$$PARAMS) { $$$BODY }",
  lang="typescript",
  dryRun=true
)

정규식과의 차이점

항목정규식 (Grep)AST Grep
매칭 대상텍스트 패턴코드 구조
공백/줄바꿈민감무관
주석 처리매칭됨건너뜀
리팩토링위험구조 보존
사용 사례텍스트 검색코드 변환

지원 언어

TypeScript, JavaScript, TSX, JSX, Python, Go, Rust, Java, C, C++, C#, Ruby, Swift, Kotlin 등 주요 프로그래밍 언어를 지원합니다.

On this page