--- name: code-fix description: Coverity の警告の修正案を作るときの決まりと手順。C / C++ のコードを、指示ファイルの「修正するコード」のフォルダで直すときに使う。ほかのスキルとサブエージェントが読む手順書で、人が直接頼むものではない。 --- # 修正案の作り方 修正は、指示ファイル(`brief.md`)の「修正するコード」のフォルダのファイルだけを、ふだんのファイルの編集の機能で直します。差分やブランチは、あとでスクリプトが作ります。 ## 決まり 1. **最小限の修正**:警告をなくすのに必要な箇所だけを変える。リファクタリング、整形、関係のない改善はしない。 2. **関数の外から見た動き(外部仕様)を変えない**:引数、戻り値、公開ヘッダ、グローバル変数のインタフェースを変えない。 3. **まわりの書き方に合わせる**:インデント(タブ / 空白)、名前の付け方、括弧の位置、エラー処理の書き方(`goto` での後片付け、戻り値のエラーコードなど)を、まわりのコードに合わせる。 4. 修正によって、MISRA / CERT の別の規則に新しく違反しないようにする(暗黙の型変換を増やさない、関数の出口を増やすなら既存の書き方に従う など)。 5. 修正するコードのフォルダの外のファイル(調べるコード、利用者の作業中のファイル)は変えない。 ## 決まりの中で直せないとき - 決まりを超えた修正案を作る(例:関数の戻り値を変える)。 - 結果ファイルの `fix.exceeded_constraints` に、超えた決まりと理由を書く(例「関数の外部仕様:エラーを戻り値で返す必要がある」)。 - `fix.impact` に、影響を受ける呼び出し元をすべて挙げる。 ## 手順 1. 修正するコードのフォルダで、直す箇所を読む(最新のリビジョンなので、調べたときと行番号がずれていることがある)。 2. ファイルを編集して直す。 - 日本語のコメントを足してよいが、ファイルの文字コードで表せる文字だけを使う。 3. 直したあと読み直し、意図どおりかを確かめる。 4. 結果ファイルに、`fix.summary`(直した内容を 1 行で)と `fix.impact`(どの条件で何が変わるか、影響の範囲)を書く。 最新のリビジョンでもう直っているときは、何も変えずに `fix.already_fixed_on_latest` を true にします。 ## アノテーション(オプション) 指示ファイルに「アノテーションを入れるコード」のフォルダがあるときだけ行います。そのフォルダのファイルに、逸脱案として Coverity の注釈を入れます。 - 警告の行の**すぐ上の行**に、ブロックコメントで入れる。理由は逸脱コメントと同じ文にする(スキル `deviation-comment`)。 - `[...]` の中は、★ のイベントのタグにする。判定で書き分ける(Coverity は `:FALSE` が無い注釈を「意図的」として扱うため)。 | 判定(`verdict.judgement`) | 書き方 | |---|---| | `false_positive`(誤検知) | `/* coverity[<タグ>:FALSE] 誤検知。... */` | | それ以外 | `/* coverity[<タグ>] 意図的。... */` | - インデントは警告の行に合わせる。注釈のほかは何も変えない。