J'avais évoqué il y a un an PHP_CodeSniffer, une application PHP disponible dans PEAR permettant de vérifier automatiquement le respect de normes de programmation (type d'indentation, nommage des variables, etc). A l'époque, je ne l'avais pas testé, car il n'était compatible qu'avec les standards PEAR, et la création des fichiers pour lui faire reconnaître d'autres normes n'avait pas l'air triviale.

Aujourd'hui les choses ont changé : la V1 approche à grand pas, CodeSniffer intègre à présent les normes de programmation Zend, et justement j'interviens en ce moment sur un projet qui utilise le Zend Framework. Une bonne occasion de tester CodeSniffer et PHPDocumentor en lien avec Eclipse pour essayer d'obtenir du code un peu mieux écrit.

L'installation est simple : les deux programmes sont disponibles dans PEAR, un coup de pear install suffit à les installer. On dispose alors de deux nouvelles commandes, utilisable en console : phpcs et phpdoc. L'intégration de phpcs avec Zend n'est malheureusement pas native, elle nécessite la présence sur la machine d'un petit utilitaire, zca, fournis avec Zend Studio et non libre. Après l'installation de zca, il faut indiquer à phpcs où il se trouve :

$ phpcs --config-set zend_ca_path /path/to/ZendCodeAnalyzer

L'utilisation est ensuite très simple : phpcs --standard=Zend {fichier}

PHP Documentor permet quant à lui de créer la documentation d'un projet à partir des commentaires du code source. Il suffit que ces commentaires respectent la syntaxe de phpDocumentor.

J'utilise ces 2 programmes directement depuis Eclipse pour vérifier que mon code respecte bien les standards de programmation du projet et est correctement documenté. Pour ce faire j'ai créé un petit script que j'appelle depuis Eclipse:

$ cat check_syntax.sh 
#/bin/bash
/usr/bin/phpcs --standard=Zend $1
/usr/bin/phpdoc -f $1 -t /dev/null | grep "WARNING\|ERROR"

Pour appeler ce script depuis l'IDE, il suffit de l'exécuter comme un outil externe: dans le menu Run choisissez External Tools / Open External Tools Dialog et créez un nouvel outil avec ces paramètres:

  • name : check syntax
  • location : le chemin de votre script (pensez à faire un chmod pour le rendre exécutable)
  • argument : ${resource_loc}

Pour appeler le script il vous suffit ensuite de choisir votre outil via la barre d'outil External Tools. La sortie du script s'affichera dans la console.

Cela demande évidemment la discipline d'exécuter ce script à la main sur chaque fichier modifié. Une étape suivante pourrait être de créer un pre-commit hook dans Subversion pour n'autoriser le commit que des fichiers syntaxiquement corrects. Ou d'ajouter ces vérifications aux scripts d'intégration continue du projet. Un jour quand j'aurai un peu de temps...

Références