檢查程式碼是否符合 PSR-2 的工具:PHP_CodeSniffer (phpcs)

PHP_CodeSniffer 是套檢查 PHP 程式碼是否符合規範的工具。


WordPress 3.8.1 的 index.php 跑 PSR-2 測試。

想要測試的人可以用 Vagrant 安裝測試,我用 Docker 弄了老半天弄不起來,就跑去用 Vagrant 測試了...

(話說回來,Vagrant 與 Docker 真的是測試的神器,反正要弄一個 Ubuntu 平台上測試就是拿這兩個東西出來測...)

由於系統內的 PHP_CodeSniffer 不一定夠新,舉例來說,Ubuntu 12.04 的 php-codesniffer 只有 1.1.0,而掃 PSR-1 的程式出現在 1.3.5,PSR-2 出現在 1.4.0

安裝 c9s 所維護的 phpbrew 通常是還蠻常見的選擇。裝完後再用 pear install PHP_CodeSniffer 裝進去就有 phpcs 可以用了。

phpcs 預設是用 PEAR standard,可以指定 --standard=PSR2 強迫他使用 PSR-2 規則:

phpcs --standard=PSR2 foo.php

也可以直接強迫換成 PSR-2,然後再看設定有沒有改成功:

phpcs --config-set default_standard PSR2
phpcs --config-show

除了可以檢查單一檔案外,也可以丟路徑進去整個檢查:

phpcs foo/

用 php-cs-fixer 自動將程式碼以 PSR-2 規則修正

PHP Coding Standards Fixer 是在不破壞相容性的情況下,將 PHP 的程式碼往 PSR-2 的方向修正。

安裝的方式很簡單,直接抓下來:

wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O php-cs-fixer
chmod a+x php-cs-fixer

看是要丟到 /usr/local/bin 下,還是丟到自己的目錄裡都可以。

裝完後就玩:

php-cs-fixer fix foo.php

如果 PHP 程式碼有進版本控制系統,在執行後就可以用 diff 看看改了什麼。

也可以對整個目錄修正:

php-cs-fixer fix foo/

預設是 PSR-2 以及一些作者自訂的規則,如果要強制只用 PSR-2 的話可以用 --level=psr2

By default, all PSR-2 fixers and some additional ones are run.

有一些要注意的地方是,php-cs-fixer 因為是在不破壞相容性的前提下修正的,所以有些 method naming 的規則就無法修。不過比起手動修正 legacy code,可以省下不少時間...