Skip to main content

なぜ 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 が規約の対象コードだけをカバーしている
  • 既知の違反を含むプルリクエストで試した
フィールドの詳細は ast-grep rules を参照してください。