PHP_CodeSnifferはPHPのコーディングスタイルをチェックするツールとして有名ですが、現在開発中の2.0系ではチェックだけでなく修正もできるようです。
Fixing Errors Automatically · squizlabs/PHP_CodeSniffer Wiki
インストール
2.0系ではpharも提供されているので、 https://github.com/squizlabs/PHP_CodeSniffer/releases からphpcs.pharとphpcbf.pharをダウンロードしましょう。
$ curl -LO https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.0.0RC1/phpcs.phar
$ curl -LO https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.0.0RC1/phpcbf.phar
使い方
チェックはphpcs.pharで行います。
$ cat test.php
<?php
if($a==2)
echo $a;
else
echo '3';
$ php phpcs.phar --standard=PSR2 test.php
FILE: C:\Users\ishida\src\test.php
--------------------------------------------------------------------------------
FOUND 7 ERRORS AFFECTING 4 LINES
--------------------------------------------------------------------------------
1 | ERROR | [x] Expected 1 space after closing brace; 0 found
2 | ERROR | [x] Expected 1 space after IF keyword; 0 found
2 | ERROR | [x] Inline control structures are not allowed
2 | ERROR | [x] Whitespace found at end of line
4 | ERROR | [x] Expected 1 space after ELSE keyword; newline found
4 | ERROR | [x] Inline control structures are not allowed
5 | ERROR | [x] Expected 1 blank line at end of file; 2 found
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 7 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
Time: 90ms; Memory: 2.5Mb
$ php phpcs.phar --standard=PSR2 --report=diff test.php
--- test.php
+++ PHP_CodeSniffer
@@ -1,6 +1,6 @@
<?php
-if($a==2)
+if ($a==2) {
echo $a;
-else
+} else {
echo '3';
-
+}
修正はphpcbf.pharで行います。
$ php phpcbf.phar --standard=PSR2 test.php
Patched 1 file
Time: 182ms; Memory: 2.5Mb
$ cat test.php
<?php
if ($a==2) {
echo $a;
} else {
echo '3';
}
面白い機能としては、誰が問題を混入したかを調べるgitblameという(またはsvnblame、hgblame)レポート形式があります。
$ php phpcs.phar --report=gitblame src
PHP CODE SNIFFER GIT BLAME SUMMARY
--------------------------------------------------------------------------------
AUTHOR (Author %) (Overall %) COUNT
--------------------------------------------------------------------------------
ISHIDA Akio (16.18) (100) 11
--------------------------------------------------------------------------------
A TOTAL OF 11 SNIFF VIOLATIONS WERE COMMITTED BY 1 AUTHOR
--------------------------------------------------------------------------------
Time: 164ms; Memory: 2.75Mb
はい。本当に申し訳ありませんでした!
なお似たようなことを行うツールとして、PHP Coding Standards Fixerもあります。