code

Vérifier le respect des normes de codage de votre projet Symfony2 avec PHP Code Sniffe

Le respect des normes de codage est très important, particulièrement en travaillant sur les grands projets avec de nombreux collaborateurs tels que Symfony2. L’impact du non respect sur le coût d’un projet est important, car un code salissant sans cohérence est difficile à lire qui rend sa maintenance et son évolution difficile.

Il y a plusieurs façons d’écriture d’un code uniforme, mais le plus important est que tout le monde impliqué dans le projet applique la même façon. Pour cela les différents projets open source avec un grand nombre de contributeurs tel que Symfony2 propose des conventions de codage à suivre.
La liste détaillée des conventions peut être lu dans la section contribuer de la documentation.

Se rappeler de toute la liste de ces normes est difficile, c’est pour cela que nous faisons appel à un outil tel que PHP Code Sniffe qui permet de détecter les violations de ces conventions.

Installation et Configuration de « PHPCS »

L’installation de PHP_CodeSniffer est simple car il est disponible via PEAR :

pear install PHP_CodeSniffer 

PHPCS est installé avec des standards par défauts, mais ceux de Symfony2 ne font pas partie, nous devons les téléchargés et configurer PHPCS pour les utiliser manuellement.

cd /path/to/pear/PHP/CodeSniffer/Standards
 
git clone git://github.com/escapestudios/Symfony2-coding-standard.git Symfony2

phpcs --config-set default_standard Symfony2

Le ‘/path/to/pear’ peut être récupérer avec la commande :

pear config-show | grep php_dir

Utilisation de « PHPCS »

Pour utiliser PHPCS, il suffit de lancer la commande suivante dans un projet Symfony2 :

phpcs src/

Si vous avez des violations des conventions Symfony2, le résultat ressemblera à ceci :

FILE: .../src/Rocket/FullContactBundle/Service/FullContactManager.php
----------------------------------------------------------------------
FOUND 3 ERRORS AFFECTING 3 LINES
----------------------------------------------------------------------
 31 | ERROR | Doc comment for parameter "$apiKey" missing
 34 | ERROR | Doc comment for parameter $container does not match
    |       | actual variable name $apiKey
 42 | ERROR | Missing function doc comment
----------------------------------------------------------------------
Time: 12.73 secs; Memory: 54.75M

Certaines erreurs et avertissements, peuvent être fixées automatiquement avec l’outil PHPCBF déjà installé avec PHPCS. l’exécution est simple :

phpcbf src/

Utilisation avec Git

Vous aurez remarqué que la vérification du code n’est faite qu’à la demande du développeur et n’est donc pas systématique.
L’idéale sera d’empêcher le développeur de « commiter » son code s’il y a une erreur dans l’un de ses fichiers.
Cette vérification peut être mise en place à travers un hook pre-commit.

Ajoutez ce fichier pre-commit sous le dossier .git/hooks de votre projet Symfony2 et créez aussi un fichier config comme ceci :

# path to phpcs "binary"
PHPCS_BIN=/usr/bin/phpcs

# the coding standard, you can also specify a path to your own standard here 
# e. g. /path/to/my/standard/dir/
PHPCS_CODING_STANDARD=Symfony2

# comma-separated list of file patterns being ignored
PHPCS_IGNORE=

# egrep compatible pattern of  files to be checked
PHPCS_FILE_PATTERN="\.(php|phtml)$"

# ignore warnings
PHPCS_IGNORE_WARNINGS=1

# encoding
PHPCS_ENCODING=utf-8

Et enfin autoriser l’exécution de fichier :

chmod a+x .git/hooks/pre-commit

Maintenant, avant chaque nouvelle commit PHPCS sera lancé, en cas de violations la commit sera bloquée.