ast-grep(sg) é uma ferramenta CLI para pesquisa estrutural de código, lint e reescrita.
ast-grep é uma ferramenta baseada em AST para pesquisar código por código padrão. Pense nisso como seu velho amigo grep
, mas combinando nós AST em vez de texto. Você pode escrever padrões como se estivesse escrevendo um código comum. Ele corresponderá a todos os códigos que possuem a mesma estrutura sintática. Você pode usar o sinal $
+ letras maiúsculas como curinga, por exemplo, $MATCH
, para corresponder a qualquer nó AST único. Pense nisso como REGEX ponto .
, exceto que não é textual.
Experimente o playground online para provar!
Veja mais capturas de tela no site.
Você pode instalá-lo a partir de npm, pip, cargo, homebrew, scoop ou 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
Ou você pode construir o ast-grep a partir do código-fonte. Você precisa instalar o Rustup, clonar o repositório e então
cargo install --path ./crates/cli --locked
Os pacotes também estão disponíveis em outras plataformas.
ast-grep tem o seguinte formato.
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
Se você achar o ast-grep interessante e útil para o seu trabalho, compre-me um café para que eu possa dedicar mais tempo ao projeto!
O núcleo do ast-grep é um algoritmo para pesquisar e substituir código baseado na árvore de sintaxe abstrata produzida pelo tree-sitter. Ele pode ajudá-lo a fazer análises estáticas leves e manipulação de código em grande escala de maneira intuitiva.
Principais destaques:
Um padrão intuitivo para localizar e substituir AST. O padrão do ast-grep se parece com um código comum que você escreveria todos os dias (você poderia dizer que o padrão é isomórfico ao código).
jQuery como API para travessia e manipulação de AST.
Configuração YAML para escrever novas regras de linting ou modificação de código.
Escrito em linguagem compilada, com análise baseada em tree-sitter e utilizando vários núcleos.
Linda interface de linha de comando :)
A visão do ast-grep é democratizar a magia da árvore de sintaxe abstrata e libertar alguém da complicada programação AST!