コンテンツにスキップ

Baseline Key Derivation

Rigor::Analysis::Baselineは、ライブのdiagnosticストリームを記録済みの.rigor-baseline.ymlに照らしてフィルタリングします。これにより、プロジェクトは既存の検出結果をすべて一度に修正しなくてもRigorを採用できます(ADR-22)。このページはバケットキーの導出――diagnosticがどのように格納行へマップされるか――を確定させます。これはベースライン(baseline)ファイルのフォーマットが依存する永続的な契約(contract)です。運用ガイド(ファイルの生成・更新・編集)はユーザーマニュアル§「ベースライン」にあり、設計上の根拠(ルールIDかメッセージ粒度か)はADR-22 WD1にあります。

ベースラインフィルタリングは最後の抑制レイヤーであり、インラインの# rigor:disableマーカーの後、かつ深刻度解決 (diagnostic-policy.md)の後に適用されます。

ベースライン行(Baseline::Bucket)はタプルでキー付けされます。

[ file, rule, message_regex ]
  • file ── diagnosticのパス、プロジェクトルートからの相対パスrigorの実行時の作業ディレクトリ)。相対パスを格納することで、生成されるファイルはマシンやチェックアウト場所をまたいで可搬になります。ライブのdiagnosticの絶対パスは、ルックアップ前に相対パスへ正規化されます。
  • rule ── diagnosticのqualified_rulediagnostic-shape.md)。qualified_rulenilのdiagnostic(抑制不能なパースエラー/内部エラー)や、pathnilのdiagnosticは決してベースライン化されません。
  • message_regex ── ルールモードではnil、メッセージモード(後述)ではRegexp

各バケットはcountも保持します。これはPHPStan互換の、そのキーについて記録された出現回数です。これによりベースラインは記録された多重度ちょうどまでを許容し、カウントが増えたときに回帰を顕在化させます。

match_modeはキーの粒度を選択します。

  • :rule ── キーのmessage_regexnilなので、(file, qualified_rule)ペアに対するすべてのdiagnosticがメッセージにかかわらず1つのバケットに寄与します。より粗く、変動に強いモードです。
  • :message ── キーはdiagnosticのメッセージから導出されたmessage_regexを保持するので、メッセージが異なるごとに独自のバケットを持ちます。ジェネレータはRegexp.escape(message)を書き込むため、YAMLのラウンドトリップはリテラルのメッセージにマッチします。行を手で編集するユーザーは、エスケープされた形をよりゆるいパターンに置き換えてもよい(MAY)。よりタイトなモードであり、同じルールの下でundefined method 'foo'undefined method 'bar'を区別します。

格納されるファイルフォーマットのバージョンはBaseline::CURRENT_VERSION1)です。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.