PHPではphpcsを使うことでコードがPSR-12などのコーディング規約に従っているかを機械的にチェックすることができます。
通常はエラーのメッセージを見ながらコードを修正すればよいのですが、自動処理を行うなどの都合で、エラーが出力された理由が特定できるルールのIDを取得したい場合があります。
このような場合はphpcsコマンドにに-s
オプションを付ければよいです。
実行例
まずは、オプションなしの出力例です。
./vendor/bin/phpcs
FILE: app/Foobar.php
----------------------------------------------------------------------------------
FOUND 0 ERRORS AND 2 WARNINGS AFFECTING 2 LINES
----------------------------------------------------------------------------------
142 | WARNING | Line exceeds 120 characters; contains 139 characters
----------------------------------------------------------------------------------
オプション-s
を付けると、Generic.Files.LineLength.TooLongのルールIDが表示されます。
./vendor/bin/phpcs -s
FILE: app/Foobar.php
----------------------------------------------------------------------------------
FOUND 0 ERRORS AND 2 WARNINGS AFFECTING 2 LINES
----------------------------------------------------------------------------------
142 | WARNING | Line exceeds 120 characters; contains 139 characters
| | (Generic.Files.LineLength.TooLong)
----------------------------------------------------------------------------------
ルールの一覧を出力する
phpcsコマンドにオプション-e
を付けることで、現在の設定で有効になっているルール一覧を確認できます。
$ ./vendor/bin/phpcs -e
The standard contains 59 sniffs
Generic (15 sniffs)
-------------------
Generic.ControlStructures.InlineControlStructure
Generic.Files.ByteOrderMark
Generic.Files.LineEndings
Generic.Files.LineLength
Generic.Formatting.DisallowMultipleStatements
Generic.Functions.FunctionCallArgumentSpacing
Generic.NamingConventions.UpperCaseConstantName
Generic.PHP.DisallowAlternativePHPTags
Generic.PHP.DisallowShortOpenTag
Generic.PHP.LowerCaseConstant
Generic.PHP.LowerCaseKeyword
Generic.PHP.LowerCaseType
Generic.WhiteSpace.DisallowTabIndent
Generic.WhiteSpace.IncrementDecrementSpacing
Generic.WhiteSpace.ScopeIndent
PEAR (1 sniff)
---------------
PEAR.Functions.ValidDefaultValue
PSR1 (3 sniffs)
---------------
PSR1.Classes.ClassDeclaration
PSR1.Files.SideEffects
PSR1.Methods.CamelCapsMethodName
PSR12 (16 sniffs)
-----------------
PSR12.Classes.AnonClassDeclaration
PSR12.Classes.ClassInstantiation
PSR12.Classes.ClosingBrace
PSR12.ControlStructures.BooleanOperatorPlacement
PSR12.ControlStructures.ControlStructureSpacing
PSR12.Files.DeclareStatement
PSR12.Files.FileHeader
PSR12.Files.ImportStatement
PSR12.Files.OpenTag
PSR12.Functions.NullableTypeDeclaration
PSR12.Functions.ReturnTypeDeclaration
PSR12.Keywords.ShortFormTypeKeywords
PSR12.Namespaces.CompoundNamespaceDepth
PSR12.Operators.OperatorSpacing
PSR12.Properties.ConstantVisibility
PSR12.Traits.UseDeclaration
PSR2 (9 sniffs)
---------------
PSR2.Classes.ClassDeclaration
PSR2.Classes.PropertyDeclaration
PSR2.ControlStructures.ElseIfDeclaration
PSR2.ControlStructures.SwitchDeclaration
PSR2.Files.ClosingTag
PSR2.Files.EndFileNewline
PSR2.Methods.FunctionCallSignature
PSR2.Methods.FunctionClosingBrace
PSR2.Methods.MethodDeclaration
Squiz (15 sniffs)
-----------------
Squiz.Classes.ValidClassName
Squiz.ControlStructures.ControlSignature
Squiz.ControlStructures.ForEachLoopDeclaration
Squiz.ControlStructures.ForLoopDeclaration
Squiz.ControlStructures.LowercaseDeclaration
Squiz.Functions.FunctionDeclaration
Squiz.Functions.FunctionDeclarationArgumentSpacing
Squiz.Functions.LowercaseFunctionKeywords
Squiz.Functions.MultiLineFunctionDeclaration
Squiz.Scope.MethodScope
Squiz.WhiteSpace.CastSpacing
Squiz.WhiteSpace.ControlStructureSpacing
Squiz.WhiteSpace.ScopeClosingBrace
Squiz.WhiteSpace.ScopeKeywordSpacing
Squiz.WhiteSpace.SuperfluousWhitespace
こちらもおススメ