[PHP] PHP_CodeSniffer + WordPress-Coding-Standards をインストールする
WordPress のコーディングスタンダードをチェックするツールを知ったのでインストールします。
Note
この記事には改訂版があります。
Composer で PHP_CodeSniffer + WordPress-Coding-Standards をかんたんインストールする | deadwood
こちらを参考にさせて頂きました。
Contents
事前準備
事前に composer で PHP_CodeSniffer をインストールしておきます。
インストールとつかいかた
git clone
git clone でファイルを配置するよう。
ぱっと見わからなかったのですが、firegoby さんによると、php_codesniffer/CodeSniffer/Standards
以下に配置するとオプションで呼べるようになりそうなので実行します。
% git clone git@github.com:WordPress-Coding-Standards/WordPress-Coding-Standards.git \
~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/WordPress
こうなりました。
オプションには Zend
などもあるようですね。
% ls .composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/
AbstractPatternSniff.php Generic/ PEAR/ PSR2/ Zend/
AbstractScopeSniff.php IncorrectPatternException.php PHPCS/ Squiz/
AbstractVariableSniff.php MySource/ PSR1/ WordPress/
phpcs –config-set installed_paths
phpcs -i
で登録されたかを確認します。
% phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz and Zend
git clone したディレクトリ直下に ruleset.xml が無いからなのか、どうもインストールしたパスを登録しなければならないよう。
登録します。
% phpcs --config-set installed_paths ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/WordPress
こんどはOK。
(登録すれば設置場所はどこでもいいのかもしれません)
% phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz, Zend, WordPress, WordPress-Core, WordPress-Extra and WordPress-VIP
あわせてエイリアスも設定しておきます。
alias wpcs="phpcs -p -s -v --standard=WordPress"
Subset standards
エイリアスを設定したので、下記で実行します。
しかし、あきらかにへんな記述をしてチェックしても、エラーにならないです。
% wpcs ./*.php
vccw 環境で同じファイルをチェックしてみるとエラーが出ました。
コマンドを確認すると、違うサブセットを呼んでいました。
[vagrant@wordpress]$ which wpcs
alias wpcs='phpcs -p -s -v --standard=WordPress-Core'
~/.composer/vendor/bin/phpcs
ローカルでも同じオプションで実行すると、同じ振る舞いとなりました。
alias wpcs="phpcs -p -s -v --standard=WordPress-Core"
このあたりの違いや経緯は分かりませんが、WordPress
が元々の規約で WordPress-Core
というより厳しい規約に変わったように読み取れます。
規約違反を自動修正する
現在開発中の Ver.2.0 から、規約違反を自動修正する機能が付くようです。
確認すると 2.0RC1 がありました。
インストールしてみます。
インストール
composer.json を書き換えます。
{
"require": {
"squizlabs/php_codesniffer": "2.0.0RC1"
}
}
update します。
% cd ~/.composer/
% composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Removing squizlabs/php_codesniffer (1.5.4)
- Installing squizlabs/php_codesniffer (2.0.0RC1)
Downloading: 100%
Writing lock file
Generating autoload files
アップデートすると、以下のディレクトリの内容も変わってしまいました。
~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/
上述のとおり、あらためて適当なディレクトリに git clone
して設定し直します。
WordPress-Coding-Standards
へのパスはフルパスで書きます。
% git clone git@github.com:WordPress-Coding-Standards/WordPress-Coding-Standards.git
% phpcs --config-set installed_paths /Users/****/projects_github/WordPress-Coding-Standards
% phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz, Zend, WordPress, WordPress-Core, WordPress-Extra and WordPress-VIP
つかいかた
チェックは phpcs
、修正は phpcbf
コマンドで行うとのこと。
チェックしてみます。
% phpcs -p -s -v --standard=WordPress-Core functions.php
:
FILE: /Users/****/projects/****/src/functions.php
--------------------------------------------------------------------------------
FOUND 31 ERRORS AFFECTING 15 LINES
--------------------------------------------------------------------------------
9 | ERROR | [x] Inline control structures are not allowed
| | (Generic.ControlStructures.InlineControlStructure.NotAllowed)
30 | ERROR | [x] TRUE, FALSE and NULL must be lowercase; expected "null" but
| | found "NULL" (Generic.PHP.LowerCaseConstant.Found)
84 | ERROR | [ ] No space before closing parenthesis is prohibited
| | (WordPress.WhiteSpace.ControlStructureSpacing)
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
上記、省略していますが、チェックの付いたものを phpcbf
で修正してくれそうです。
コマンドを実行すると、diff 付きで結果を教えてくれました。
% phpcbf -p -s -v --standard=WordPress-Core functions.php
Registering sniffs in the WordPress Core standard... DONE (20 sniffs registered)
Creating file list... DONE (1 files in queue)
Changing into directory /Users/****/projects/****/src
Processing functions.php [PHP => 484 tokens in 90 lines]... DONE in 17ms (31 errors, 0 warnings)
--- functions.php
+++ PHP_CodeSniffer
@@ -6,7 +6,7 @@
-if ( ! isset( $content_width ) ) $content_width = 630;
+if ( ! isset( $content_width ) ) { $content_width = 630; }
@@ -27,7 +27,7 @@
function frontpage_slides() {
$header_images = get_uploaded_header_images();
if ($header_images) {
- $str = NULL;
+ $str = null;
foreach ($header_images as $key => $value) {
$str .= '{image: "' . $value['url'] . '"},';
}
Patched 1 file
Time: 193ms; Memory: 3.5Mb
のこっている ERROR がちょっと分からないんですが、こんな形でしょうか。