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은 규칙을 훨씬 더 빠르게 작성할 수 있도록 도울 수 있습니다.