Test::Perl::Critic その3
Test::Perl::Criticは、Perlベストプラクティスのポリシーをどのていど厳格に守るのか設定が可能。
設定は、Perl::Criticと同じようにできる。
今回のエントリーは、その設定項目について。
設定方法
useにリストとして指定
use Test::Perl::Critic ( -profile => 't/perlcriticrc' );
または、importの引数として指定
Test::Perl::Critic->import( -profile => 't/perlcriticrc' );
-profile
コンフィグファイルへのパスを指定する。
もし、指定されたファイルがない場合はカレントディレクトリから.perlcriticrcを探す。
-severity
厳格さを数値もしくは、厳格さを反映した名前で設定する。
数値の場合、5が最も緩く、1が最も厳しい。デフォルトでは5が設定される。
gentleを指定した場合は、重大な違反のみを報告する。
brutalを指定した場合は、最も軽微な違反も報告する。
数値 | 名前 |
---|---|
5 | gentle *1 |
4 | stern *2 |
3 | harsh *3 |
2 | cruel *4 |
1 | brutal *5 |
Test::Perl::Critic->import( -severity => 'gentle' );
-theme
指定したテーマについてポリシーを適用する。
- severityが指定されていない場合、-severityには1が設定される。
&&演算子や、||演算子を使い複雑なテーマの設定が可能。
使える演算子は、&&, ||, !, and, or, not。
演算子の優先順位はPerlのコードと同じ。
なお、テーマは大文字と小文字を区別されない。
また、テーマを指定しない場合はすべてのポリシーが適用される。
以下の例では、'bugs'と'pbp'のテーマを持っているポリシーが適用される。
Test::Perl::Critic->import( -theme => 'bugs && pbp' );
テーマとは
ポリシーには、1つ以上のテーマが設定されている。
これにより、テーマを設定することで好みのポリシーでPerl::Criticを走らせることができる。
テーマ | 内容 |
---|---|
core | Perl::Criticのすべてのポリシー |
pbp | "Perl Best Practices"由来のポリシー |
bugs | バグを防止または、明らかにするポリシー |
maintenance | コードの長期的な健全さに影響するポリシー |
cosmetic | Policies that only have a superficial effect*6 |
complexity | コードの複雑さに関するポリシー |
security | セキュリティ問題に関するポリシー |
tests | テストプログラムのためのポリシー |
以下のコマンドで使用可能なポリシーとそれに関連付けられているテーマを確認することができる。
$ perlcritic -list
-include
適用させるポリシーを、文字列のリストリファレンスとして指定する。
指定した文字列がixmsオプション付きのパターンマッチにヒットした場合、ポリシーは適用される。
このとき、-severityで設定した厳格さ以上のポリシーも適用される。
Test::Perl::Critic->import(-include => ['layout'] -severity => 4);
-exclude
除外するポリシーを、文字列のリストリファレンスとして指定する。
指定した文字列がixmsオプション付きのパターンマッチにヒットした場合、ポリシーは除外される。
なお、-includeと共に使用した場合、-excludeで設定した項目が優先される。
-single-policy
指定した文字列がimxsオプション付きのパターンマッチに一致する1つのポリシーのみが適用される。
(複数のポリシーに一致しても、適用されるのは1つのみ)
この設定は、-severity, -theme, -include, -exclude, -only よりも優先される。
-top
表示される違反の最大数を設定する。
表示される違反はファイルで発生した順。
severityが指定されない場合は、最も厳格な1が設定される。
-force
コード内の"## no critic"を無視するかどうかの設定値。
真となる値を設定した場合、Perl::Criticはすべてのコードを分析する。
偽となる値を設定した場合は、"## no critic"がつけられたタグを無視する。