なぜ ast-grep か
「ここでこの関数を呼ばない」「このオプションを必ず渡す」のように、構造的な規約があります。モデルはそれを見つけられますが、見落としたり、存在しない違反を想像したりもします。ast-grep のルールは構文木に対してマッチするので、マッチは証拠になります。実行でマッチしたルールを引用する指摘は、モデルのチェックをスキップして投稿されます。 例はチェックアウトサービスで、規約は 1 つです:金額はMoney ヘルパーで扱う整数のセントであり、浮動小数点数にはしない。
ステップ1 — リポジトリにルールを書く
ルールファイルをデフォルトブランチにコミットします。Kodus は各プルリクエストのターゲットブランチからこれを読むため、プルリクエストが自分をチェックするルールを緩めることはできません。rules/money.yml
message が、コメントでルールとして引用されます。プルリクエストを読む人に向けて書いてください。
パターンでは捉えられないケースのために、理由を doc にも書いておきます。
docs/money.md
ステップ2 — エージェントを作成する
New agent → Templates → Blank の後:Name
Instructions
ステップ3 — ルールを指定する
Tools → Advanced → Structural search (ast-grep rules) に、パスを 1 行で入力します。2 rules in rules/money.yml: no-parsefloat-amount, no-tofixed-amount。パスの代わりに YAML をインラインで貼り付けることもできます。その場合、ルールはリポジトリではなくエージェントに保存されます。
ステップ4 — コメント
Save をクリックします。
ステップ5 — Try it
価格にparseFloat を追加するプルリクエストで Try it を実行します。指摘は kept になり、コメントはルールを引用します。
docs/money.md から出した指摘は doc を引用し、ターゲットブランチの doc にその引用がなければ破棄されます。
チェックリスト
- ルールファイルをデフォルトブランチにコミットした
- 各ルールに
id、rule、読みやすいmessageがある - フィールドのヒントにすべてのルールが表示される
- glob が規約の対象コードだけをカバーしている
- 既知の違反を含むプルリクエストで試した