Home > PHP > PHP_CodeSnifferを試してみる

PHP_CodeSnifferを試してみる

  • 2006-09-21 (木) 17:14
  • PHP
この記事の所要時間: 1540

PHP_CodeSnifferはPHPのコードスタイルをチェックするツールです。0.1.0ではPEARのコーディング基準に適合するかどうかを確認できますので、いくつか試してみました。

まずは簡単にPHP_CodeSnifferの使い方から。

PHP_CodeSnifferを使う

インストール

pearコマンドでインストールするだけです。

$ pear install PHP_CodeSniffer-0.1.0

CLI環境ではPEARパッケージに含まれているphpcsコマンドでチェックができます。

使用例

まずありがちなサンプルファイルでチェックしてみます。チェックするソースは以下です。

< ?php
class Hello {
  var $message = null;

  function __construct($message) {
    $this->message = $message;
  }
  function hello() {
    echo("Hello! PHP");
    echo($this->message);
  }
}
$obj = new Hello("Cake is sweet.");
$obj->hello();
?>

phpcsでチェックします。

$ phpcs -v hello.php
Registering sniffs... DONE
Processing hello.php [93 tokens in 17 lines]... DONE in < 1 second

FILE: hello.php
--------------------------------------------------------------------------------
FOUND 8 ERROR(S) AND 0 WARNING(S) AFFECTING 6 LINE(S)
--------------------------------------------------------------------------------
&#91;LINE 3&#93; ERROR: Line indented incorrectly. Expected at least 4 spaces, but found 2.
&#91;LINE 5&#93; ERROR: Opening function brace should be on a new line.
&#91;LINE 5&#93; ERROR: Line indented incorrectly. Expected 4 spaces but found 2.
&#91;LINE 6&#93; ERROR: Line indented incorrectly. Expected at least 8 spaces, but found 4.
&#91;LINE 9&#93; ERROR: Opening function brace should be on a new line.
&#91;LINE 9&#93; ERROR: Line indented incorrectly. Expected 4 spaces but found 2.
&#91;LINE 10&#93; ERROR: Line indented incorrectly. Expected at least 8 spaces, but found 4.
&#91;LINE 11&#93; ERROR: Line indented incorrectly. Expected at least 8 spaces, but found 4.
--------------------------------------------------------------------------------
&#91;/code&#93;
<p>いろいろ出てきましたが、ほとんどがインデントに関するものです。(PEARではインデントは4スペースが推奨です。)あとメソッド定義で[{]を続けて書くのがまずいようです。ソースを修正して再度チェックします。


$ phpcs -v hello1.php
Registering sniffs... DONE
Processing hello1.php [95 tokens in 19 lines]... DONE in < 1 second
&#91;/code&#93;
<p>無事エラーはなくなりました。
<h2>PEARをチェック</h2>
<p>PEAR.phpで試してみました。これは適合して当たり前でしょう。</p>

$ phpcs -v --report=summary PEAR.php
Registering sniffs... DONE
Processing PEAR.php [5550 tokens in 1101 lines]... DONE in 2 seconds

PHP CODE SNIFFER REPORT SUMMARY
--------------------------------------------------------------------------------
FILE                                                            ERRORS  WARNINGS
--------------------------------------------------------------------------------
PEAR.php                                                        117     30
--------------------------------------------------------------------------------
A TOTAL OF 117 ERROR(S) AND 30 WARNING(S) WERE FOUND IN 1 FILE(S)
--------------------------------------------------------------------------------

出まくってますね。。。エラー内容を見るとさすがにインデント関係は出ていないですが、カンマや条件文でエラーが出ています。あと改行がCR+LFになってますね。これは良いのかな?

PHP_CodeSnifferをチェック

つぎはPHP_CodeSniffer自身です。PHP/CodeSnifferディレクトリ以下をチェックしました。

$ phpcs -v --reort=summary PHP/CodeSniffer
Registering sniffs... DONE
(snip)
PHP CODE SNIFFER REPORT SUMMARY
--------------------------------------------------------------------------------
FILE                                                            ERRORS  WARNINGS
--------------------------------------------------------------------------------
PHP/CodeSnifferCommentParserAbstractDocElement.php            0       8
PHP/CodeSnifferCommentParserAbstractParser.php                0       13
PHP/CodeSnifferCommentParserClassCommentParser.php            0       7
PHP/CodeSnifferCommentParserCommentElement.php                0       7
PHP/CodeSnifferCommentParserDocElement.php                    0       0
PHP/CodeSnifferCommentParserFunctionCommentParser.php         0       4
PHP/CodeSnifferCommentParserMemberCommentParser.php           0       2
PHP/CodeSnifferCommentParserPairElement.php                   0       4
PHP/CodeSnifferCommentParserParameterElement.php              0       6
PHP/CodeSnifferCommentParserParserException.php               0       0
PHP/CodeSnifferCommentParserSingleElement.php                 0       4
PHP/CodeSnifferException.php                                   0       0
PHP/CodeSnifferFile.php                                        0       62
PHP/CodeSnifferSniff.php                                       0       4
PHP/CodeSnifferSniffException.php                              0       0
PHP/CodeSnifferStandardsAbstractPatternSniff.php              0       33
PHP/CodeSnifferStandardsAbstractScopeSniff.php                0       15
PHP/CodeSnifferStandardsAbstractVariableSniff.php             0       14
PHP/CodeSnifferStandardsIncorrectPatternException.php         0       0
...ferStandardsPEARSniffsCommentingInlineCommentSniff.php  0       1
...StandardsPEARSniffsConstantsValidConstantNameSniff.php  0       11
...rdsPEARSniffsControlStructuresControlSignatureSniff.php  0       1
...eSnifferStandardsPEARSniffsFilesIncludingFileSniff.php  0       8
...CodeSnifferStandardsPEARSniffsFilesLineLengthSniff.php  0       3
...tandardsPEARSniffsMethodsFunctionCallSignatureSniff.php  0       9
...ardsPEARSniffsMethodsMethodCallArgumentSpacingSniff.php  0       11
...rStandardsPEARSniffsMethodsOpeningMethodBraceSniff.php  0       5
...erStandardsPEARSniffsMethodsValidDefaultValueSniff.php  0       3
...odeSnifferStandardsPEARSniffsMiscShortOpenTagSniff.php  0       5
...dardsPEARSniffsNamingConventionsValidClassNameSniff.php  0       4
...dsPEARSniffsNamingConventionsValidFunctionNameSniff.php  0       19
...nifferStandardsPEARSniffsPHPLowerCaseConstantSniff.php  0       2
...StandardsPEARSniffsStatementsMultipleStatementSniff.php  0       21
...StandardsPEARSniffsWhiteSpaceScopeClosingBraceSniff.php  0       5
...ifferStandardsPEARSniffsWhiteSpaceScopeIndentSniff.php  0       13
PHP/CodeSnifferTokens.php                                      0       0
--------------------------------------------------------------------------------
A TOTAL OF 0 ERROR(S) AND 304 WARNING(S) WERE FOUND IN 36 FILE(S)
--------------------------------------------------------------------------------

WARNINGは出ていますが、ERRORは無いです。さすがです。

CakePHPをチェック

おまけでCakePHPです。CakePHPのソースは荒っぽいところが残っているので興味津々です。(エラーが多く出そうで:-P)[cake/dispatcher.php]をチェックしてみました。

$ phpcs -v --report=summary cake/dispatcher.php
Registering sniffs... DONE
Processing dispatcher.php [3450 tokens in 430 lines]... DONE in 1 second

PHP CODE SNIFFER REPORT SUMMARY
--------------------------------------------------------------------------------
FILE                                                            ERRORS  WARNINGS
--------------------------------------------------------------------------------
cakedispatcher.php                                             301     26
--------------------------------------------------------------------------------
A TOTAL OF 301 ERROR(S) AND 26 WARNING(S) WERE FOUND IN 1 FILE(S)
--------------------------------------------------------------------------------

301 ERROR(S)!!と期待(?)を裏切らない結果になったのですが、エラー内容を見るとほとんどはインデントのエラーでした。なのでそれを除外するとエラーは26個になりました。[エラー内容(除くインデントエラー)]

エラーはif文、foreach文のスペース、メソッド宣言でのブレース位置くらいですね。まあCakePHPはPEARコーディング規約で書かれているわけではないですけど、わりと適合していたのは意外でした。

PEAR標準ソースを書く

こうしていくつかのソースを見てみるとおおよそひっかかりそうな箇所が見えてきます。PEARコーティング規約に適合するソースを書くにあたってとりあえず気をつけておく点を並べてみました。

  • インデントは4スペース
  • メソッド定義にてブレース[{]は次の行に書く
  • if,foreachなので制御構造ではキーワードと[(]の間にスペースを入れる
  • 改行はLF?
  • 一行85桁まで。
  • 変数の代入式を並べる時は値が縦に並ぶようにスペースを入れる。

 

cvsやsvnにコミットする時に自動的にチェックするとかunitテストに盛り込むなどアイデア次第で面白い事ができそうです。

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
/blog/2006/09/php_codesniffer.html/trackback
Listed below are links to weblogs that reference
PHP_CodeSnifferを試してみる from Shin x blog

Home > PHP > PHP_CodeSnifferを試してみる

検索
フィード
メタ情報

Return to page top