PHP_CodeSniffer est un outil de contrôle de votre code PHP afin d’en garantir la conformité au standard de votre choix.
Plutôt que de l’installer dans chacun de vos projets, il est possible de l’installer « globalement » et de le configurer pour permettre d’autres standards que ceux fournis de base, ceux de SPIP par exemple.
Préalables
Si vous n’avez pas de répertoire ~/bin/
dans votre /home, on commence par le créer :
mkdir ~/bin
Puis, on installe composer
de façon « globale » dans ce répertoire ~/bin
qui se trouve dans notre $PATH ; on commence par suivre les instructions de la documentation de Composer mais la troisième commande devient :
php composer-setup.php --install-dir=~/bin --filename=composer
Installation de PHP_CodeSniffer
Une fois cela fait, on peut installer « globalement » PHP_CodeSniffer :
composer global require squizlabs/php_codesniffer
composer global require spip/coding-standards
Par défaut, chez moi, on retrouve les packages dans ~/.config/composer/vendor/
et les exécutables dans ~/.config/composer/vendor/bin/
Ne nous reste plus qu’à créer des liens symboliques dans notre ~/bin/
des exécutables de PHP_CodeSniffer :
ln -s ~/.config/composer/vendor/bin/phpcs ~/bin
ln -s ~/.config/composer/vendor/bin/phpcbf ~/bin
On relance Bash et on peut alors déclarer le répertoire des standards SPIP à PHP_CodeSniffer :
phpcs --config-set installed_paths /home/$USER/.config/composer/vendor/spip/coding-standards/src/,/home/$USER/.config/composer/vendor/phpcompatibility/php-compatibility
Vous pouvez vérifier que la configuration est bien correcte en éditant le fichier ~/.config/composer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf
.
Utilisation
Il est alors possible de lancer les commandes phpcs
et phpcbf
où que vous soyez.
Il peut alors être intéressant de profiter d’une configuration locale, propre à votre projet : cela se passe dans le fichier phpcs.xml
placé à la racine de votre projet :
<?xml version="1.0"?>
<ruleset>
<file>./</file>
<exclude-pattern>**/*.js</exclude-pattern>
<exclude-pattern>**/*.css</exclude-pattern>
<exclude-pattern>**/*.scss</exclude-pattern>
<exclude-pattern>node_modules/*</exclude-pattern>
<exclude-pattern>vendor/*</exclude-pattern>
<arg name="colors"/>
<rule ref="SPIP40"/>
</ruleset>
Pour découvrir plus précisément les possibilités de configuration, je vous laisse consulter le fichier phpcs.xml.dist
de PHP_CodeSniffer.
Un message, un commentaire ?