mcpField
A
ast-grep

ast-grep

github.com/poteto開発590268 回インストール33 週間前に更新
リポジトリ

ast-grep について

ast-grep の構文検索ルールを作成・デバッグするスキルです。テスト用コードからルールを組み立て、`--stdin` で検証し、AST クエリを調べる手順を説明します。

主な機能

  1. 01テストコードからルールを作成
  2. 02`--stdin` によるルールのテスト
  3. 03`--debug-query` によるクエリ確認
  4. 04リレーショナルルールの走査設定
  5. 05シェル内のメタ変数のエスケープ

活用シーン

  1. 01コードベース内の構文パターンを検索
  2. 02全体検索の前にルールを検証
  3. 03ネストしたノードを検出できないルールをデバッグ

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/poteto/noodle --skill ast-grep

インストール後、Claude Code で/ast-grepを入力して読み込まれたか確認します。

同梱ファイルreferences/rule_reference.md

詳細

ast-grep

ワークフロー

  1. 対象コードを表すテスト用スニペットを作成します
  2. ルールを作成します(patternから始め、必要に応じてkindとhas/insideに進みます)
  3. コードベースを検索する前に、--stdinでテストします
  4. ルールが一致したら、コードベースを検索します

重要な注意点

リレーショナルルールでは常にstopBy: endを使用します

これを指定しないと、has/insideはサブツリー全体をたどらず、最初に一致しないノードで探索を停止します。

# WRONG — will miss deeply nested matches
has:
  pattern: await $EXPR

# RIGHT
has:
  pattern: await $EXPR
  stopBy: end
シェルではメタ変数をエスケープします

$VARはシェルによって解釈されます。エスケープするか、シングルクォートで囲んでください。

# Double-quoted: escape with backslash
ast-grep scan --inline-rules "id: test
language: javascript
rule:
  pattern: await \$EXPR" .

# Single-quoted: no escaping needed
ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  pattern: await $EXPR' .
メタ変数はASTノードの内容全体である必要があります

次の例は動作しません:obj.on$EVENT、"Hello $WORLD"、a $OP b、$jq

名前のないノード(演算子、句読点)には$$OPを使用します。ノード数が0個以上の場合は$$$ARGSを使用します。

--stdinでのテスト

echo "async function test() { await fetch(); }" | ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  kind: function_declaration
  has:
    pattern: await $EXPR
    stopBy: end' --stdin

--debug-queryでのデバッグ

ルールが一致しない場合は、ASTを調べて正しいkindの値を見つけます。

ast-grep run --pattern 'your code here' --lang javascript --debug-query=cst

形式:cst(すべてのノード)、ast(名前付きノードのみ)、pattern(ast-grepによるパターンの解釈)。

ルールの構文

ルールの全リファレンス(アトミックルール、リレーショナルルール、複合ルール、メタ変数)については、references/rule_reference.mdを参照してください。

コメント