PHP Code Sniffer
PHP Code Sniffer permet de vérifier que le code obéit au standard sélectionné. C'est l'équivalent PHP de Checkstyle pour Java.
Pour l'installer sur Ubuntu :
sudo pear install PHP_CodeSniffer
Pour analyser un répertoire :
phpcs /repertoire/de/code
Par défaut, c'est le standard PEAR qui est utilisé pour la vérification. Pour utiliser un autre standard :
phpcs --standard=NomDuStandard /repertoire/de/code
Pour savoir quels standards sont disponibles :
phpcs -i
Le standard PEAR, utilisé par défaut par PHP Code Sniffer, est relativement strict et impose de commenter chaque fichier, classe et méthode.
Sur Ubuntu, les standards sont installés dans /usr/share/php/PHP/CodeSniffer/Standards/
Pour créer un nouveau standard moins contraignant, il suffit d'y créer un nouveau répertoire contenant le fichier ruleset.xml suivant :
<?xml version="1.0"?>
<ruleset name="TDebatty">
<description>Thibault Debatty</description>
<!-- Tests du standard Generic -->
<rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
<rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
<rule ref="Generic.PHP.LowerCaseConstant"/>
<rule ref="Generic.PHP.DisallowShortOpenTag"/>
<rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
<!-- Tests du standard PEAR -->
<rule ref="PEAR.Classes.ClassDeclaration"/>
<rule ref="PEAR.ControlStructures.ControlSignature"/>
<rule ref="PEAR.ControlStructures.MultiLineCondition"/>
<rule ref="PEAR.Files.IncludingFile"/>
<rule ref="PEAR.Formatting.MultiLineAssignment"/>
<rule ref="PEAR.Functions.FunctionCallSignature"/>
<rule ref="PEAR.Functions.ValidDefaultValue"/>
<rule ref="PEAR.NamingConventions.ValidClassName"/>
<rule ref="PEAR.NamingConventions.ValidFunctionName"/>
<rule ref="PEAR.NamingConventions.ValidVariableName"/>
<rule ref="PEAR.WhiteSpace.ObjectOperatorIndent"/>
<rule ref="PEAR.WhiteSpace.ScopeClosingBrace"/>
<rule ref="PEAR.WhiteSpace.ScopeIndent"/>
<!-- Lignes de max 85 caractères -->
<rule ref="Generic.Files.LineLength">
<properties>
<property name="lineLimit" value="85"/>
<property name="absoluteLineLimit" value="0"/>
</properties>
</rule>
<!-- Unix newlines -->
<rule ref="Generic.Files.LineEndings">
<properties>
<property name="eolChar" value="\n"/>
</properties>
</rule>
<rule ref="Generic.Functions.FunctionCallArgumentSpacing.TooMuchSpaceAfterComma">
<severity>0</severity>
</rule>
<!-- Warnings pour les structures contrôles internes -->
<rule ref="Generic.ControlStructures.InlineControlStructure">
<properties>
<property name="error" value="false"/>
</properties>
</rule>
</ruleset>
Il existe également un plugin qui permet d'effectuer les tests directement dans NetBeans : NB Coding Standard Validator plugin.