コーディングルール適用も例外ルール設定もXMLファイルを作成して行う。
コーディングルールの適用領域の指定
XMLファイルをゼロから作成
初期記述でひとまず以下だけ書く。
・ルール名称は好みの名称
・
・ディレクトリvendor内はルール適用外の指定
・エラー箇所の文字は着色して表示する指定
・エラーログ内容を表示する指定
<?xml version="1.0"?>
<ruleset name="Custom PSR12">
<description>A custom PSR12</description>
<file>./</file>
<exclude-pattern>./vendor/*</exclude-pattern>
<arg name="colors"/>
<arg value="s"/>
</ruleset>
ターミナルでXMLファイルを指定してコーディングチェックする
これにより、指定した領域のファイル全てにチェックをかけられる。
./vendor/bin/phpcs --standard=cordingRule.xml
例外ルールの設定
※例外ルールは本当に例外にしてはならないものもあるがこれはダミー。
超注意! ルールの例外なくPSR12そのままのルールならばその上のargタグの最後のスラッシュと同じスラッシュを入れて終わりだが、以下のexclude(例外)を入れる場合は
(1)スラッシュを削除する
(2)で閉じるを記述する
開発していると、PSRルールそのものでは厳しすぎると言ったことがよく起こる。
<?xml version="1.0"?>
<ruleset name="Custom PSR12">
<description>A custom PSR12</description>
<file>./</file>
<exclude-pattern>./vendor/*</exclude-pattern>
<arg name="colors"/>
<arg value="s"/>
<rule ref="PSR12">
<exclude name="Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase"/>
<exclude name="PSR1.Files.SideEffects.FoundWithSymbols"/>
<exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/>
<exclude name="PSR2.Classes.ClassDeclaration.OpenBraceNewLine"/>
<exclude name="Squiz.Scope.MethodScope.Missing"/>
</rule>
</ruleset>
exclude要素の例外ルール名は、以下のようなエラー情報を表示させられるがそこに書かれている。
例: Generic.ControlStructures.InlineControlStructure.NotAllowed
FILE: /var/www/html/test.php
------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
------------------------------------------------------------------------------
16 | ERROR | [x] Inline control structures are not allowed
| | (Generic.ControlStructures.InlineControlStructure.NotAllowed)
------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
------------------------------------------------------------------------------
composer.jsonでコマンドを短縮名化
コーディングチェックは高頻度に利用するため、もっとチェック指示作業を簡単にしたい。
よって、compser.jsonで短縮名登録をしておく。
「scripts」欄で、コマンドを「composer phpcs」と打つだけで実行できるようにしている。
{
"name": "root/html",
"autoload": {
"psr-4": {
"Root\\Html\\": "src/"
}
},
"require": {},
"require-dev": {
"squizlabs/php_codesniffer": "3.*"
},
"scripts": {
"phpcs": "./vendor/bin/phpcs --standard=phpcs.xml"
}
}
これで、以下のコマンドだけでコーディングチェックが実行できる。
composer phpcs
真っ赤にハイライトして出力される「error code 2」とは
コーディングチェックのコマンドを実行すると、真っ赤に「error」と表示されるためとても気になるが、気にせずOK。
これは、コーディングルールチェックをして規約違反、つまりエラーがあった場合に、PHP_CodeSnifferが出力する情報なだけ。
エラーがなければ0を返し、表示されない模様。