ast-grep/ast-grep
요약
ast-grep(sg)은 추상 구문 트리(AST)를 기반으로 코드 구조 검색, 린트, 리라이팅을 수행하는 CLI 도구입니다. 텍스트 기반의 grep과 달리 실제 코드의 구문 구조를 매칭하며, 직관적인 패턴 작성과 tree-sitter 기반의 빠른 성능을 제공합니다.
핵심 포인트
- AST 노드를 직접 매칭하여 텍스트 기반 검색보다 정확한 코드 구조 검색 가능
- 코드와 유사한 형태의 직관적인 패턴 작성 및 $MATCH 와일드카드 지원
- tree-sitter 기반의 파싱과 멀티 코어 활용으로 빠른 정적 분석 및 코드 조작 수행
- YAML 설정을 통한 커스텀 린팅 규칙 작성 및 jQuery 스타일의 API 지원
- npm, pip, cargo, homebrew 등 다양한 패키지 매니저를 통한 간편한 설치
ast-grep(sg)는 코드 구조 검색 (structural search), 린트 (lint), 그리고 리라이팅 (rewriting)을 위한 CLI 도구입니다.
ast-grep은 패턴 코드로 코드를 검색하는 추상 구문 트리 (Abstract Syntax Tree, AST) 기반 도구입니다. 텍스트 대신 AST 노드를 매칭한다는 점에서 여러분의 오래된 친구인 grep이라고 생각하면 됩니다.
여러분은 일반적인 코드를 작성하듯이 패턴을 작성할 수 있습니다. 그러면 동일한 구문 구조 (syntactical structure)를 가진 모든 코드를 매칭하게 됩니다.
$ 기호와 대문자를 조합하여 $MATCH와 같이 와일드카드 (wildcard)로 사용할 수 있으며, 이는 단일 AST 노드 중 무엇이든 매칭합니다. 텍스트 기반이 아니라는 점을 제외하면 정규 표현식 (regular expression)의 점 .과 같다고 생각하면 됩니다.
온라인 플레이그라운드 (playground)에서 미리 체험해 보세요!
웹사이트에서 더 많은 스크린샷을 확인하실 수 있습니다.
npm, pip, cargo, cargo-binstall, homebrew, scoop, mise 또는 MacPorts를 통해 설치할 수 있습니다!
npm install --global @ast-grep/cli
# `pnpm approve-builds`가 필요할 수 있습니다
pip install ast-grep-cli
...
더 많은 설치 방법을 보려면 클릭하세요
cargo install ast-grep --locked
cargo binstall ast-grep
# scoop을 통한 설치, @brian6932님께 감사드립니다
...
또는 소스에서 ast-grep을 빌드할 수도 있습니다. rustup을 설치하고, 저장소 (repository)를 클론한 다음 아래 명령어를 실행해야 합니다.
cargo install --path ./crates/cli --locked
다른 플랫폼에서도 패키지를 사용할 수 있습니다.
ast-grep은 다음과 같은 형식을 가집니다.
ast-grep --pattern 'var code = $PATTERN' --rewrite 'let code = new $PATTERN' --lang ts
ast-grep -p '$A && $A()' -l ts -r '$A?.()'
ast-grep -p 'new Zodios($URL, $CONF as const,)' -l ts -r 'new Zodios($URL, $CONF)' -i
ast-grep이 흥미롭고 업무에 유용하다고 느끼신다면, 제가 프로젝트에 더 많은 시간을 할애할 수 있도록 커피 한 잔을 구매해 주세요!
ast-grep의 핵심은 tree-sitter에 의해 생성된 추상 구문 트리 (Abstract Syntax Tree, AST)를 기반으로 코드를 검색하고 교체하는 알고리즘입니다. 이는 직관적인 방식으로 가벼운 정적 분석 (static analysis)과 대규모 코드 조작 (code manipulation)을 수행하는 데 도움을 줄 수 있습니다.
주요 특징:
AST를 찾고 교체하기 위한 직관적인 패턴. ast-grep의 패턴은 여러분이 매일 작성하는 일반적인 코드와 유사하게 보입니다 (패턴이 코드와 동형 (isomorphic)이라고 할 수 있습니다).
-
AST 순회 (traversal) 및 조작 (manipulation)을 위한 jQuery 스타일의 API.
-
새로운 린팅 (linting) 규칙 작성 또는 코드 수정을 위한 YAML 설정.
-
컴파일 언어로 작성되었으며, tree-sitter 기반의 파싱 (parsing)과 멀티 코어 (multiple cores)를 활용.
-
멋진 커맨드 라인 인터페이스 (CLI) :)
ast-grep의 비전은 추상 구문 트리 (AST)의 마법을 대중화하고, 번거로운 AST 프로그래밍으로부터 사용자를 해방시키는 것입니다!
- 여러분이 오픈 소스 라이브러리 제작자라면, ast-grep은 라이브러리 사용자들이 중대한 변경 사항 (breaking changes)을 더 쉽게 수용할 수 있도록 도울 수 있습니다.
- 여러분이 팀의 테크 리드 (tech lead)라면, ast-grep은 비즈니스 요구 사항에 맞춘 코드 베스트 프랙티스 (best practice)를 강제할 수 있도록 도울 수 있습니다.
- 여러분이 보안 연구원 (security researcher)이라면, ast-grep은 규칙을 훨씬 더 빠르게 작성할 수 있도록 도울 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Rust (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기