checkers.xml: C/C++ チェッカーの設定Java KAST 構成

kwcreatechecker を実行すると、--code オプションで指定した <CHECKER.CODE> ディレクトリに checkers.xml ファイルが作成されます。

<checkers version> の値 (1.3) を除き、以下にリストしたタグの値はすべて変更できます。

デフォルトでは、checkers.xml ファイルは 1 つのチェッカーの構造を作成します。同じファイル内に複数のチェッカーグループ、チェッカー ID、エラー ID が必要な場合は、適切なタグを手動でコピーして貼り付け、それらの値が一意になるように編集することができます。例: 1 つのファイル内の複数の Java KAST チェッカー。

次のテーブルは、checkers.xml ファイル内の要素に関する詳細を示します。

要素 デフォルト値 説明
<checkers version> 1.3 このバージョンは、現在の Klocwork チェッカーバージョンが使用されていることを反映しています。値は 1.3 です。 変更しないでください。
<categories>   指摘の分類方法を示します。最高レベルのカテゴリは言語です。下の <category name> を参照してください。
<category name> Java この値は変更することができますが、この要素を削除してカスタムチェッカーを別の方法で分類することもできます。サーバープロジェクトまたはデスクトッププロジェクトの場合、指摘カテゴリは指摘の Configuration Editor に表示されます。Configuration Editor では、指摘の解析をオンまたはオフにします。統合ビルド解析用チェッカーの設定を参照してください。
<error id> <CHECKER.CODE> kwcreatechecker--code オプションで指定した指摘コードを反映します。チェッカー ID に複数のエラー ID がある場合は、各エラー ID は、展開時に Configuration Editor で正しく分類されるように、独自の <error id> タグを使用して示す必要があります。カテゴリ名の詳細については、上述の <category name> を参照してください。注意: エラー ID (チェッカー名) では、マルチバイト文字はサポートされていません。また、255 文字までという制限があります。
<checkergroup language> Java チェッカーは Java プログラム用であることを示します。1 つの checkers.xml に、複数の checkergroup を含めることができます。これは手動のプロセスです。例: 1 つのファイル内の複数の Java KAST チェッカー。
<api> tree_pattern kwcreatechecker--type <path or kast> オプションで指定したチェッカータイプを反映します。KAST タイプは tree_pattern として表示されます。
<checker id> <CHECKER.CODE> この ID は、チェッカーによって指摘が検出された場合に解析結果に表示されます。各チェッカー ID には、それぞれ独自の <error id> セクションで示される複数のエラー ID を含めることができます。これは手動のプロセスです。例: 1 つのファイル内の複数の Java KAST チェッカー。
<libraries> <KAST library name> KAST チェッカーが依存する動的ライブラリのリストを格納します。--kast-library オプションによって作成されたカスタム関数を使用するチェッカーのみに適用します。
<library-path> Your_library 動的ライブラリへのパスを指定します。
<error id> <CHECKER.CODE> この ID は、チェッカーによって指摘が検出された場合に解析結果に表示されます。各チェッカー ID には、それぞれ独自の <error id> セクションで示される複数のエラー ID を含めることができます。これは手動のプロセスです。例: 1 つのファイル内の複数の Java KAST チェッカー。
<enabled> true 新しいチェッカーはデフォルトで有効になっていますが、値を false に変更することで無効にすることができます。Configuration Editor (Klocwork サーバープロジェクトおよびデスクトッププロジェクト) では、プロジェクトの複数のチェッカーを簡単に有効化または無効化できます。
<severity> 4 指摘重要度を参照してください。
<title> "Unexpected semicolon after else" チェッカータイトルは Configuration Editor に表示されます。サンプルタイトルが表示されるので、カスタムチェッカーを反映するように変更する必要があります。
<message> "Unexpected semicolon after else" このチェッカーによって指摘が検出された場合に解析結果に表示するメッセージを指定します。サンプルメッセージが表示されるので、カスタムチェッカーを反映するように変更する必要があります。
<pattern> // IfElseStat [ ElseStat::EmptyStat ] 1 つのチェッカーに複数の KAST 式を含めることができます。各 KAST 式は、<pattern> タグおよび </pattern> タグ内に含める必要があります。KAST 式は、それがテストされ、チェッカーをビルドする準備ができるまでは、checkers.xml ファイルに含めないでください。統合ビルドの詳細については、「KAST 式について」を参照してください。KAST 式にカスタム関数が含まれている場合、KAST 式内のカスタム関数が反映されるように plugin_function.xml ファイルを更新する必要があります。plugin_functions.xml: を参照してください。カスタム関数の使用 plugin_functions.xml: カスタム関数および Java カスタム関数の使用。

例: 1 つのファイル内の複数の Java KAST チェッカー

次の例ではカスタム関数を使用しないため、ライブラリは含まれていません。

1 つの checkers.xml ファイルに、複数の checkergroup を含めることができます。各 checkergroup には複数のチェッカー ID を含めることができ、さらにそれぞれのチェッカー ID に複数のエラー ID を含めることもできます。そのためには、該当するセクション (タグ) をコピーして貼り付け、それらの値が一意になるように編集します。

以下の例を参照してください。

<checkers version="1.3">

    <checkergroup id="JTreePatternCheckers" language="java" api="tree_pattern">

        <checker id="JXPATH.SEMICOL">

            <error id="JXPATH.SEMICOL.THEN" message="unexpected semicolon after then" enabled="false" severity="8" title="JXPATH.SEMICOL.THEN">

                <pattern>

                        // IfStat [ ThenStat::EmptyStat]

                </pattern>

            </error>
            <error id="JXPATH.SEMICOL.ELSE" message="unexpected semicolon after else" enabled="false" severity="8" title="JXPATH.SEMICOL.ELSE">

                <pattern>

                        // IfElseStat [ ElseStat::EmptyStat ]

                </pattern>

            </error>

        </checker>
        <checker id="JXPATH.MISRA.12.4">

            <error id="JXPATH.MISRA.12.4" message="assignment in right operand of boolean operation" enabled="false" severity="8" title="JXPATH.MISRA.12.4">

                <pattern>

                        // ExprBinary [ @Op=OP_ASSIGN

                            @Op=OP_STARASSIGN |
                            @Op=OP_DIVASSIGN
                            @Op=OP_MODASSIGN |
                            @Op=OP_PLUSASSIGN
                            @Op=OP_MINUSASSIGN |
                            @Op=OP_SLASSIGN
                            @Op=OP_SRASSIGN |
                            @Op=OP_BANDASSIGN
                            @Op=OP_BXORASSIGN |
                            @Op=OP_BORASSIGN ]
                            / ancestor::ExprBinary [ @Op=OP_LAND | @Op=OP_LOR ]

                </pattern>
                <pattern>

                        // ExprPrefix [ @Op=OP_INC | @Op=OP_DEC ]

                            / ancestor::ExprBinary [ @Op=OP_LAND | @Op=OP_LOR ]

                </pattern>
                <pattern>

                        // ExprPostfix [ @Op=OP_INC | @Op=OP_DEC ]

                            / ancestor::ExprBinary [ @Op=OP_LAND | @Op=OP_LOR ]

                </pattern>

            </error>

        </checker>

    </checkergroup>

</checkers>

この例から次のことがわかります。

  • JTreePatternCheckers という checkergroup が 1 つあります。
  • checkergroup にある 2 つのチェッカーは、JXPATH.SEMICOL と JXPATH.MISRA.12.4 です。
  • JXPATH.SEMICOL チェッカーには 2 つのエラータイプ JXPATH.SEMICOL.THEN とJXPATH.SEMICOL.ELSE が含まれ、それぞれ <pattern> タグ内に 1 つの KAST 式を持っています。
  • JXPATH.MISRA.12.4 チェッカーには、2 つの KAST 式を含む 1 つのエラーが含まれています。

各チェッカーライブラリには複数のチェッカーグループを含めることができ、各チェッカーグループには複数のチェッカーを含めることができます。 また、各チェッカーは複数のサブタイプ (エラー ID) を定義でき、各エラー ID には複数の KAST 式を含めることができます。