Hatena::ブログ(Diary)

ちゃまぐの備忘録

2011-12-11

[] 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を指定した場合は、最も軽微な違反も報告する。

数値名前
5gentle *1
4stern *2
3harsh *3
2cruel *4
1brutal *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を走らせることができる。

テーマ内容
corePerl::Criticのすべてのポリシー
pbp"Perl Best Practices"由来のポリシー
bugsバグを防止または、明らかにするポリシー
maintenanceコードの長期的な健全さに影響するポリシー
cosmeticPolicies 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:コードの見た目に関するポリシーの模様