マクロまたはファイルを使用した指摘の除去
Klocwork 2022.2 の時点で、外部の .sconf ファイルを使用して、マクロ、ファイル、およびディレクトリを抑制できます。他の構成ファイルと同様に、kwcheck または kwciagent で構成ファイルをインポートできます。kwbuildproject の実行中に、--exclude-issues オプションで .sconf ファイルを準備することも、接続されたプロジェクトの実行中に、それをポータルからインポートすることもできます。
kwbuildproject で --replace-path オプションを使用するときに、抑制は、置換されたパスではなく元のパスを使用します。したがって、--replace-path オプションで指摘の抑制を使用している場合は、パスパターンを使用することをお勧めします。完全なパスを使用する場合は、新しいパスではなく元のパスを使用してください。
それらのすべてを同じ .sconf ファイルに追加することで、複数の抑制構成を使用して指摘を抑制できます。複数の .sconf ファイルを準備することもできます。
サンプルの .sconf ファイル
以下は、特定の指摘を抑制するために上記のメソッドをパススルーできる、典型的な .sconf ファイルの例です。
{ "issue_suppressions": [ { "kind": "macro", "name": "MAP_FAILED", "issue_codes" : [ "MISRA.CAST.VOID_PTR_TO_INT.2012" ], "filter": true } , { "kind": "file", "name": "dir1/file.c", "all_issue_codes": true, "filter": true } ] }
この抑制構成は、パスにパターン "dir1/file.cpp" が含まれているすべてのファイルで指摘を抑制します。たとえば、/space/folder1/dir1/file.c または /space/folder1/folder2/dir1/file.cpp です。フィルター処理する指摘を指定するには、all_issue_codes = true/false を準備するか、または issue_codes を含む指摘コードのリストを準備する必要があります。特定の指摘に対してフィルターが false の場合、抑制はスキップされます。
{ "issue_suppressions": [ { "kind": "macro", "name": "MAP_FAILED", "issue_codes" : [ "MISRA.CAST.VOID_PTR_TO_INT.2012" ], "filter": true } , { "kind": "file", "name": "dir1/file.cpp", "all_issue_codes": false, "filter": true }, { "kind": "directory", "name": "dir2", "all_issue_codes": true, "filter": true } ] }
ディレクトリ 'dir' に、さらにディレクトリ 'dir/file.cpp' 内のファイルにも、抑制構成を準備する場合、順序に関係なく、ディレクトリよりもファイルに対する構成が優先されます。例:
{ "issue_suppressions": [ \{ "kind": "file", "name": "dir/file.cpp", "all_issue_codes": false, "filter": true } , { "kind": "directory", "name": "dir", "all_issue_codes": true, "filter": true } ] }
この例の場合、パスにパターン 'dir' が含まれているすべてのファイルで指摘を抑制します。そのファイルに対して all_issue_codes を false に設定しているため、パターン dir/file.cpp が含まれているファイルには、指摘は抑制されません。
Klocwork 2022.3 の時点で、ファイルとディレクトリ内の指摘を抑制する場合、最適化を有効にすることもできます。最適化が有効になっている場合、そのファイルから翻訳単位全体がスキップされますが、その対象はパスチェッカーのみです。構成にコメントを追加することもできます (それはどこにも出力されません)。例:
{ "issue_suppressions": [ { "kind": "file", "name": "foo.cpp", "all_issue_codes": true, "filter": true, "allow_optimization": true, "comment": "add comment here" } ] }
Klocwork 2022.4 の時点で、指摘の抑制は、パスのパターンだけでなく、ファイルまたはディレクトリへのフルパスにも対応しています。アスタリスクをワイルドカードとして使用することもできます (非再帰検索には *、再帰検索には **)。以下の例を参照してください。
例 1
たとえば、以下のサンプルのファイル パスがあるとします: /space/workspaces/cvs/ccvs.1.11.18/diff/diff.c
フィールド以下のパターンを使用すると、
diff
パスの一部に 'diff' というテキストが含まれるあらゆるパスを含みます。
フィールド以下のパターンを使用すると、
**/ccvs.1.11.18/diff/diff.c
一致が返されます。これは、二重のアスタリスクでは、どんな数のパス (この場合は /space/workspaces/cvs
) とも一致照合するためです。一方、次のパターン: では、
*/ccvs.1.11.18/diff/diff.c
一致は返されません。「*」では、1 つのファイルまたはディレクトリしか一致照合しないためです。
もう 1 つ見てみましょう。
**/diff/**
このパターンでは、先頭に '**' を置くことで /space/workspaces/cvs/ccvs.1.11.18
を照合し、'**' を続けることで 'diff' ディレクトリ下のすべてのファイルを照合します。
例 2
マイナー バージョン番号に関わらず、パス /space/workspaces/cvs/ccvs.1.11.18/
にある特定のファイルと一致照合させるには、次のパターンを使用します:
/space/workspaces/cvs/ccvs.1.11.*/diff/diff.c
「*」が「18」と一致するためです。または、このパスにあるすべてのファイルと一致照合させるには、次のパターンを使用します:
/space/workspaces/cvs/ccvs.1.11.**
例 3
ccvs.1.11.18
または任意の中間ディレクトリに存在する、's' で始まるファイルをすべて照合するには、次のパターンを使用します。
**/ccvs.1.11.18/**/s*
最後に、ccvs.1.11.18
または任意の中間ディレクトリに存在する、名前に 's' が含まれるファイルをすべて照合するには、次のパターンを使用します。
**/ccvs.1.11.18/**/*s*