Krazy

KrazyKDE アプリケーション向けのソースコードチェッカーである。C++Perl で実装されている。

ソースコードThe KDE Source Repository から取得する。Anonymous SVN で取得するには Getting Started/Sources/Anonymous SVN を参照すれば分かるように

$ svn co svn://anonsvn.kde.org/home/kde/trunk/quality/krazy2/

でチェックアウトできる。

チェックアウトしたら、ディレクトリを移動して

$ cd krazy2

install.sh を実行する。

$ ./install.sh /path/to/install

./install.sh で引数として与えるパスは、krazy2 のインストール先である。./configure で --prefix オプションに与えるパスに対応する。実行可能ファイル krazy2 が ./install.sh の引数で指定したディレクトリ(指定していなければ /usr/local)内の bin ディレクトリにインストールされる。つまり、一般的な Unix のソフトウェアにおける ./configure --prefix=/path/to/install && make && make install に対応する。

これで krazy2 のコンパイルとインストールが行われる。コンパイルには Qt4 以外にもいくつかの Perl ライブラリが必要である。必要なライブラリがインストールされていないとき、例えば以下のようなエラーメッセージが出る。

$ ./install.sh /path/to/install
MakeMaker FATAL: prerequisites not found.
    Tie::IxHash not installed
    XML::LibXML not installed

このようなメッセージが出たら、指摘されているライブラリを探してインストールする。

Krazy は krazy2 コマンドの引数にファイルを指定して使う。チェックしたいファイルが /path/to/file と /path/to/another/file の場合、krazy2 のあるディレクトリにパス ($PATH) が通っていれば

$ krazy2 /path/to/file /path/to/another/file

となる。従って find コマンドと組み合わせれば、/path/to/dir 以下にある拡張子が cpp または h のファイルを以下のようにして調べられる。

$ krazy2 `find /path/to/dir -name '*.cpp' -or -name '*.h'`

C/C++ のソースファイルの他、デスクトップエントリファイル (.desktop)、Qt Designer が生成するファイル (.ui) や KDE 関連のファイルを調べられる。

ファイル形式ごとにテスト項目が決められており、--extra オプションでテスト項目を追加でき、--exclude オプションで外すことができる。例えば camelcase と defines を追加し、qclasses を外すときは

$ krazy2 --extra camelcase,defines --exclude qclasses /path/to/file

となる。C++ソースファイルのコメントにディレクティブを追加することにより、ファイル単位や行単位で制御することもできる。

//krazy:skip

は、ファイル全体ですべてのテストを飛ばし

//krazy:excludeall=inline

は、ファイル全体で inline 項目のテストを行わないようにし

//krazy:exclude=inline

は、コメントした行で inline 項目のテストを行わないようにする。

指定された項目だけをテストするときは --check オプションを使う。例えば、includes だけを行うときは

$ krazy2 --check includes /path/to/file

とすればいい。テスト項目の一覧は

$ krazy2 --list

で見ることができる。

出力形式は、テキスト や XML などから選ぶことができ、--export オプションで指定する。XML 形式で foo.xml に出力する場合は以下のようになる。

$ krazy2 --export xml /path/to/file > foo.xml

このプログラムは KDE アプリケーションのソースファイルを想定して作られているが、qclasses といったテスト項目を外すことで、単なる Qt アプリケーション向けのソースコードチェッカーとしても使える。