ast-grep(sg) est un outil CLI pour la recherche structurelle, le lint et la réécriture de code.
ast-grep est un outil basé sur AST pour rechercher du code par code de modèle. Considérez-le comme votre vieil ami grep
, mais en faisant correspondre les nœuds AST au lieu du texte. Vous pouvez écrire des modèles comme si vous écriviez du code ordinaire. Il correspondra à tout le code ayant la même structure syntaxique. Vous pouvez utiliser le signe $
+ des lettres majuscules comme caractère générique, par exemple $MATCH
, pour correspondre à n'importe quel nœud AST. Considérez-le comme un point REGEX .
, sauf que ce n'est pas textuel.
Essayez le terrain de jeu en ligne pour un avant-goût !
Voir plus de captures d'écran sur le site Web.
Vous pouvez l'installer depuis 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 vous pouvez créer ast-grep à partir des sources. Vous devez installer Rustup, cloner le référentiel, puis
cargo install --path ./crates/cli --locked
Les packages sont également disponibles sur d'autres plateformes.
ast-grep a la forme suivante.
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
Si vous trouvez ast-grep intéressant et utile pour votre travail, offrez-moi un café pour que je puisse consacrer plus de temps sur le projet !
Le cœur d'ast-grep est un algorithme pour rechercher et remplacer du code basé sur un arbre de syntaxe abstraite produit par tree-sitter. Il peut vous aider à effectuer des analyses statiques légères et des manipulations de code à grande échelle de manière intuitive.
Points saillants :
Un modèle intuitif pour trouver et remplacer AST. Le modèle d'ast-grep ressemble à du code ordinaire que vous écririez tous les jours (on pourrait dire que le modèle est isomorphe au code).
jQuery comme l'API pour la traversée et la manipulation AST.
Configuration YAML pour écrire de nouvelles règles de linting ou modification de code.
Écrit dans un langage compilé, avec une analyse basée sur un arbre et utilisant plusieurs cœurs.
Belle interface de ligne de commande :)
La vision d'ast-grep est de démocratiser la magie de l'arbre de syntaxe abstraite et de la libérer de la lourde programmation AST !