ast-grep(sg)는 코드 구조 검색, Lint 및 재작성을 위한 CLI 도구입니다.
ast-grep은 패턴 코드로 코드를 검색하는 AST 기반 도구입니다. 오래된 친구 grep
이라고 생각하지만 텍스트 대신 AST 노드와 일치합니다. 일반 코드를 작성하는 것처럼 패턴을 작성할 수 있습니다. 동일한 구문 구조를 가진 모든 코드와 일치합니다. $
기호 + 대문자를 와일드카드로 사용할 수 있습니다(예: $MATCH
. 단일 AST 노드와 일치시킬 수 있습니다. REGEX dot 이라고 생각하세요 .
, 단, 텍스트가 아닌 경우.
온라인 놀이터에서 맛을 느껴보세요!
웹사이트에서 더 많은 스크린샷을 확인하세요.
npm, pip, Cargo, Homebrew, Scoop 또는 MacPorts에서 설치할 수 있습니다!
npm install --global @ast-grep/cli
pip install ast-grep-cli
cargo install ast-grep --locked
# install via homebrew, thank @henryhchchc
brew install ast-grep
# install via scoop, thank @brian6932
scoop install main/ast-grep
# install via MacPorts
sudo port install ast-grep
또는 소스에서 ast-grep을 빌드할 수 있습니다. Rustup을 설치하고 저장소를 복제한 다음
cargo install --path ./crates/cli --locked
패키지는 다른 플랫폼에서도 사용할 수 있습니다.
ast-grep의 형식은 다음과 같습니다.
sg --pattern 'var code = $PATTERN' --rewrite 'let code = new $PATTERN' --lang ts
sg -p ' $A && $A() ' -l ts -r ' $A?.() '
sg -p ' new Zodios($URL, $CONF as const,) ' -l ts -r ' new Zodios($URL, $CONF) ' -i
ast-grep이 작업에 흥미롭고 유용하다고 생각되면 제가 프로젝트에 더 많은 시간을 할애할 수 있도록 커피 한 잔 사주세요!
ast-grep의 핵심은 tree-sitter가 생성한 추상 구문 트리를 기반으로 코드를 검색하고 바꾸는 알고리즘입니다. 직관적인 방식으로 가벼운 정적 분석과 대규모 코드 조작을 수행하는 데 도움이 될 수 있습니다.
주요 내용:
AST를 찾아 교체하는 직관적인 패턴입니다. ast-grep의 패턴은 매일 작성하는 일반 코드처럼 보입니다(패턴이 코드와 동형이라고 말할 수 있음).
AST 탐색 및 조작을 위한 API와 같은 jQuery입니다.
새로운 Linting 규칙을 작성하거나 코드 수정을 위한 YAML 구성입니다.
트리 시터 기반 구문 분석 및 다중 코어 활용을 통해 컴파일된 언어로 작성되었습니다.
아름다운 명령줄 인터페이스 :)
ast-grep의 비전은 추상 구문 트리 마법을 민주화하고 번거로운 AST 프로그래밍에서 해방시키는 것입니다!