Utiliser PHP MESS DETECTOR, PHP CODE SNIFFER et PHP CODING STANDARDS FIXER pour vos projets php
Jenkins, c’est bien. Que chaque développeur s’assure que son code soit propre avant de livrer à ses collègues, c’est mieux.
Voici donc quelques outils à installer sur son poste pour pouvoir vérifier la qualité de son code. PHP Mess Detector, PHP Code Sniffer et PHP Coding Standards Fixer sont là pour vous aider.
Installation des outils
Prérequis : PHP et pear accessibles en ligne de commande. Pour nos amis sur Windows, nous partirons du principe que vous disposez de la ligne de commande via Git Bash (voir ici notre article pour l’installer).
Installation de PHPMD et PHP CodeSniffer
pear channel-discover pear.phpmd.org
pear channel-discover pear.pdepend.org
pear install --alldeps phpmd/PHP_PMD
pear install PHP_CodeSniffer
# Configutation de CodeSniffer pour Symfony2
#
# Localiser le répertoire d'installation de PEAR
pear config-show | grep php_dir
cd /path/to/pear/PHP/CodeSniffer/Standards
git clone git://github.com/opensky/Symfony2-coding-standard.git Symfony2
phpcs --config-set default_standard Symfony2
# Installation de PHP Coding Standard Fixer
# Pour utiliser CURL plutôt que wget, utiliser la commande ci-dessous
# curl http://cs.sensiolabs.org/get/php-cs-fixer.phar -o /usr/local/bin/php-cs-fixer
# Pour les personnes sur Windows, utiliser un répertoire accessible dans votre PATH
wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O /usr/local/bin/php-cs-fixer
# Donner ensuite les droits d'exécution à php-cs-fixer
chmod a+x /usr/local/bin/php-cs-fixer
Une fois ces commandes exécutées, vous devriez disposer dans votre terminal des commandes phpcs, phpmd, php-cs-fixer
Utilisation des outils
PHP Mess Detector
PHP Mess Detector applique certaines règles pour vérifier la qualité de votre code. La liste des règles peut se trouver ici.
Les règles peuvent être contenues dans un fichier XML, dont voici un exemple :
<!-- Fichier phpmd.xml -->
<?xml version="1.0"?>
<ruleset name="PHPMD ACSEO RULESET"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>Règles PHP MD basées sur les règles de Sebastian Bergmann</description>
<!--
<rule ref="rulesets/codesize.xml/CyclomaticComplexity" />
<rule ref="rulesets/codesize.xml/NPathComplexity" />
-->
<rule ref="rulesets/codesize.xml/ExcessiveClassComplexity" />
<rule ref="rulesets/codesize.xml/ExcessiveClassLength" />
<rule ref="rulesets/codesize.xml/ExcessiveMethodLength" />
<rule ref="rulesets/codesize.xml/ExcessiveParameterList" />
<rule ref="rulesets/design.xml/EvalExpression" />
<rule ref="rulesets/design.xml/ExitExpression" />
<rule ref="rulesets/design.xml/GotoStatement" />
<rule ref="rulesets/naming.xml/ConstructorWithNameAsEnclosingClass" />
<rule ref="rulesets/unusedcode.xml/UnusedFormalParameter" />
<rule ref="rulesets/unusedcode.xml/UnusedLocalVariable" />
<rule ref="rulesets/unusedcode.xml/UnusedPrivateField" />
<rule ref="rulesets/unusedcode.xml/UnusedPrivateMethod" />
</ruleset>
Pour générer le rapport de PHPMD avec ce jeu de règles :
cd /path/to/myproject
#lance phpmd sur le répertoire src avec les règles contenues dans phpmd.xml et génère le rapport myrepport.html au format HTML
phpmd src html /path/to/phpmd.xml > /path/to/myreport.html
PHP Code Sniffer
PHP Code Sniffer a été configuré pour suivre le standard de Symfony2. Pour tester un fichier
phpcs /path/to/myrpoject/src/FunkyBundle/Controller/FunkyController.php
PHP Coding Standard Fixer
Mis à disposition par Sensio, cet outil permet de fixer un certain nombre de standards de développement pour vos fichiers sources.
Voici un exemple de commandes à utiliser. La liste des règles et des fixers disponibles peut se trouver ici
# Passe les tabulations en 4 espaces
php-cs-fixer fix /path/to/dir --fixers=indentation # Analyse du code selon le Standard PSR2 (standard par défaut)
php-cs-fixer fix /path/to/dir --level=psr2 # Analyse du code selon le Standard Symfony 2.0
php-cs-fixer fix /path/to/dir --config=sf20 # Analyse du code selon le Standard Symfony 2.1
php-cs-fixer fix /path/to/dir --config=sf21
En conclusion
Ces outils, simples d’utilisation, permettent d’augmenter la qualité du code produit, et facilitent ainsi sa maintenance, sa réutilisation et sa diffusion.
Tout au long du cycle de projet, Jenkins automatisera ces tests de façon à ajouter une qualité supplémentaire aux travaux livrés.