Vérifier en masse la syntaxe des fichiers PHP
Tags: hooks, integration continue, PHP, subversion
Si vous utilisez un gestionnaire de version (SVN, CVS, git, …) et que votre intégration continue joue de manière automatisée vos différents tests, cette commande peut vous être utile. En effet, il ne vous est jamais arrivé d’avoir vos tests dans le rouges pour la simple raison que la syntaxe d’un de vos fichiers est incorrecte ?
Voici la formule magique :
# for i in `find . -print | grep -P ".*\php$."` ; do php -lf $i ; done
Explication morceau par morceau :
-
find . -print | grep -P ".*\php$." permet de récupérer tous les fichiers .php
du répertoire courant (.) et de ses répertoires enfants.
- Cette liste est traitée fichier par fichier (for i in … ; do … done) via php -lf,
qui effectue une analyse syntaxique.
Voilà pour la base. Vous pouvez n’afficher que les fichiers effectivement erronés
en envoyant l’affichage dans la commande grep -v -i ‘no syntax errors’ via un pipe,
ce qui donne :
# for i in `find . -print | grep -P ".*\php$."` ; do php -lf $i | grep -v -i 'no syntax errors' ; done
Si vous utilisez un framework, vous pouvez aussi l’exclure de l’analyse en agrémentant
la commande de recherche des fichiers PHP d’un | grep -v suivi du nom du framework, par exemple :
# for i in `find . -print | grep -P ".*\php$." | grep -v symfony` ; do php -lf $i | grep -v -i 'no syntax errors' ; done
Une petite astuce : copiez cette chaîne dans un fichier script commençant par #!/bin/bash (ou tout autre interpréteur de votre choix), puis placez-le dans le répertoire hooks de votre dépôt Subversion, sous le nom pre-commit, et rendez-le exécutable (chmod +x).
Ce script sera alors invoqué à chaque commit de votre équipe, et fera échouer celui-ci en cas d’erreurs de syntaxe, ce qui vous permet de « sécuriser » l’exécution de vos tests unitaires.
Amusez-vous bien !
momochii said:
mai 21, 11 at 23 h 15 minGreat information! I’ve been looking for something like this for a while now. Thanks!