momh

Installer « globalement » PHP_CodeSniffer

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.