sg互換性
vendor/bin/sgはast-grep形式の互換ラッパーです。よく使われるast-grepフラグを受け付け、vendor/bin/greph -pが使うものと同じGreph\Ast\AstSearcherエンジンを再利用します。検証済みの機能範囲は、上流のsgバイナリに対するプローブ実行結果をもとに再現しており、詳細 / 機能マトリクスに掲載しています。
使用する場面
次のような場合にラッパーを使ってください。
- すでに
sgを呼び出しているツール、エージェント、スクリプトがある。 ast-grep自体をインストールできない環境で使える、差し替え可能なツールが必要である。- Composerのみのインストールでast-grepの使い勝手を得たい。
次の場合はネイティブのvendor/bin/greph -pを使ってください。
- 新しいコードを書く際に、ast-grepのCLI形式に合わせる必要がない。
- テキストモードと同じフラグセットを使いたい(ネイティブバイナリでは両方が統一されています)。
使い方
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
runはast-grepの標準的な動詞です。scanとrewriteは、一般的な使い方に合わせたラッパー専用の別名です。引数なしの呼び出しで単発の検索ができます。
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
パターン
パターン文法はネイティブのAST検索と同じです。詳しいリファレンスはモード / AST検索を参照してください。
./vendor/bin/sg run --pattern 'array($$$ITEMS)' src
./vendor/bin/sg run --pattern '$obj->$method($$$ARGS)' src
./vendor/bin/sg run --pattern 'new $CLASS()' src
書き換え
このラッパーは、ネイティブの書き換えと同じく、ドライラン、対話形式、書き込みのワークフローをサポートしています。フラグ名はast-grep形式です。
# Preview only (default)
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' src
# Apply without confirmation
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --update-all src
# Confirm each match
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --interactive src
# Wrapper-only aliases
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --interactive src
JSON出力
--jsonはast-grep形式のJSONを出力します。次の3つの形式に対応しています。
./vendor/bin/sg run --json --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=stream --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=compact --pattern 'dispatch($EVENT)' src
| 形式 | 出力形状 |
|---|---|
--json(デフォルトのpretty) |
整形済みの単一JSON配列 |
--json=stream |
1行につき1件の一致を出力する、改行区切りのJSON |
--json=compact |
コンパクトな単一JSON配列 |
検証済みの機能範囲
以下のフラグは、機能マトリクスで上流のsgバイナリを使って検証済みです。フラグに2種類の表記(-pと--pattern、--globと--globs)がある場合、プローブでは一方を使い、ラッパーは両方を同じオプションとして解析します。
パターンフラグ
--pattern PATTERN(トップレベルおよびrun内)-p PATTERN(別名)--rewrite TEMPLATE-r TEMPLATE--lang NAME、-l NAME
一致フラグ
--files-with-matches--json(pretty,stream,compact)--update-all,-U
ウォーカーフラグ
--no-ignore hidden(結合形式)--glob GLOB、--globs GLOB
ワーカーフラグ
-j N,--threads N
プローブ未実施の対応フラグ
ラッパーは次のフラグも受け付けますが、機能マトリクスではまだプローブされていません。
--no-ignore単独、またはhidden以外の値との組み合わせ--type NAME、--type-not NAME
ラッパー専用の追加機能
ラッパーには、ast-grep自体にはない便利な機能がいくつかあります。
runの別名scanとrewrite--hiddenフラグ(ast-grepでは--no-ignore hiddenに統合)--dry-run書き換えプレビューの別名--interactive書き換えの確認フロー
制限事項
Grephのsgラッパーは、多くのツールやエージェントが使う構造検索と書き換えの機能をカバーします。現在、次のast-grep機能は公開されていません。
- YAMLルールファイル(
--rule、--config) - PHP以外の複数言語スキャン
- パターンを使わない変換器(
--debug-query、--inspect) - LSP連携
未対応のフラグが見つかった場合は、上流のsgに対して実行したプローブと期待される出力を添えて課題を報告してください。
動作の互換性
このラッパーが目指すのは動作の互換性であり、バイト単位の一致ではありません。出力は意味的に同等ですが、見た目の細部は異なる場合があります。機能マトリクスのプローブでは、バイト列ではなくパーサーが参照するフィールド(ファイルパス、行番号、キャプチャされたコード、キャプチャ、JSON形式)の同等性を確認します。