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"がつけられたタグを無視する。

-verbose

1から11までの正の整数。もしくは、リテラルで書式を設定できる。
CPAN本によると、8がちょうどいいらしい。

*1:優しい、穏やかな

*2:厳格な、厳しい、断固たる、容赦のない、人を寄せ付けない、いかめしい

*3:厳しい、手厳しい、とげとげしい、辛辣な

*4:残酷な、むごい、残虐な、無慈悲な、非情な

*5:残忍な、厳しい、荒々しい

*6:コードの見た目に関するポリシーの模様