ast-grep(sg) ist ein CLI-Tool für die Codestruktursuche, Lint und Umschreiben.
ast-grep ist ein AST-basiertes Tool zum Suchen von Code nach Mustercode. Stellen Sie es sich wie Ihren alten Freund grep
vor, aber mit passenden AST-Knoten anstelle von Text. Sie können Muster so schreiben, als ob Sie gewöhnlichen Code schreiben würden. Es wird mit jedem Code übereinstimmt, der die gleiche syntaktische Struktur hat. Sie können das Zeichen $
+ Großbuchstaben als Platzhalter verwenden, z. B. $MATCH
, um eine Übereinstimmung mit jedem einzelnen AST-Knoten zu erzielen. Stellen Sie es sich als REGEX-Punkt vor .
, außer es ist kein Text.
Probieren Sie den Online-Spielplatz aus!
Weitere Screenshots finden Sie auf der Website.
Sie können es über NPM, PIP, Cargo, Homebrew, Scoop oder MacPorts installieren!
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
Oder Sie können ast-grep aus dem Quellcode erstellen. Sie müssen Rustup installieren, das Repository klonen und dann
cargo install --path ./crates/cli --locked
Pakete sind auch auf anderen Plattformen verfügbar.
ast-grep hat folgende Form.
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
Wenn Sie ast-grep für Ihre Arbeit interessant und nützlich finden, spendieren Sie mir bitte einen Kaffee, damit ich mehr Zeit für das Projekt haben kann!
Der Kern von ast-grep ist ein Algorithmus zum Suchen und Ersetzen von Code basierend auf einem abstrakten Syntaxbaum, der von Tree-Sitter erstellt wurde. Es kann Ihnen helfen, auf intuitive Weise einfache statische Analysen und umfangreiche Codemanipulationen durchzuführen.
Wichtigste Highlights:
Ein intuitives Muster zum Suchen und Ersetzen von AST. Das Muster von ast-grep sieht aus wie gewöhnlicher Code, den Sie jeden Tag schreiben würden (man könnte sagen, das Muster ist isomorph zum Code).
jQuery-ähnliche API für AST-Traversierung und -Manipulation.
YAML-Konfiguration zum Schreiben neuer Linting-Regeln oder Code-Änderungen.
In kompilierter Sprache geschrieben, mit Tree-Sitter-basierter Analyse und Verwendung mehrerer Kerne.
Schöne Befehlszeilenschnittstelle :)
Die Vision von ast-grep ist es, die Magie abstrakter Syntaxbäume zu demokratisieren und einen von der umständlichen AST-Programmierung zu befreien!