Krazy
Krazy は KDE アプリケーション向けのソースコードチェッカーである。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 アプリケーション向けのソースコードチェッカーとしても使える。