ast-grep(sg) は、コード構造の検索、lint、および書き換えのための CLI ツールです。
ast-grep は、パターン コードによってコードを検索するための AST ベースのツールです。これは、古い友人のgrep
と考えてください。ただし、テキストではなく AST ノードと一致します。通常のコードを書くのと同じようにパターンを書くことができます。同じ構文構造を持つすべてのコードと一致します。 $
記号 + 大文字をワイルドカードとして使用できます ( $MATCH
など)。単一の AST ノードと一致します。これを REGEX ドットと考えてください.
ただし、テキストではありません。
オンラインプレイグラウンドを試してみてください!
Web サイトでその他のスクリーンショットをご覧ください。
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 のトラバーサルと操作のための jQuery のような API。
新しい lint ルールまたはコード変更を作成するための YAML 構成。
コンパイル言語で書かれ、ツリーシッターベースの解析と複数のコアの利用が行われます。
美しいコマンドラインインターフェイス:)
ast-grep のビジョンは、抽象構文ツリーの魔法を民主化し、煩雑な AST プログラミングから解放することです。