Convention de codage et PHP CodeSniffer

Présentation

Une convention de codage est un ensemble de règles, normes et bonnes pratiques qui couvrent l’écriture d’une portion de code dans un langage de programmation donné pour une application cible.

Le principal avantage de la mise en place d’une convention de codage lors d’un projet est d’améliorer la lisibilité du code source et de fait, de réduire le coût de maintenance. La reprise du code existant est simplifié et malgré le fait que plusieurs développeurs se succèdent, l’homogénéité de l’ensemble est assurée.

Généralement, la convention couvre :

  • l’organisation des fichiers ;
  • le format et l’encodage des fichiers ;
  • l’indentation du code et la largeur des lignes ;
  • la définition des structures de contrôle ;
  • les déclarations et appels de fonctions ;
  • l’écriture des commentaires ;
  • etc.

PHP CodeSniffer est un script PHP5 sous licence BSD qui permet d’analyser les fichiers sources PHP, CSS ou Javascript afin de détecter les entorses aux conventions de codage choisies.

La version actuelle (1.2.0RC1) propose des règles pour vérifier les standards de codage PHPCS, PEAR, MySource, Squiz et Zend.

Installation

Installer php-pear et php5-cli via le gestionnaire de paquets :

nico@laptop:~$ sudo apt-get install php-pear php5-cli

Installer la dernière version de PHP CodeSniffer via PEAR :

nico@laptop:~$ sudo pear install PHP_CodeSniffer-1.2.0RC1

Utilisation

Analysons le fichier source suivant :

<?php
class IndexController extends Zend_Controller_Action
{
    public function readAction()
    {
        $ma_variable = "toto";
        if($ma_variable="titi"){
	     return 1;
        }
    }
 
    public function createAction(){
    }
}
?>

A première vue, rien de très choquant, pourtant le passage à la moulinette fait ressortir un certains nombres de points à corriger afin de respecter le standard Zend :

nico@laptop:~/test_phpcs/$ phpcs --standard=Zend IndexController.php
FILE: /home/nico/test_phpcs/IndexController.php
--------------------------------------------------------------------------------
FOUND 7 ERROR(S) AND 0 WARNING(S) AFFECTING 5 LINE(S)
--------------------------------------------------------------------------------
  6 | ERROR | Variable "ma_variable" is not in valid camel caps format
  7 | ERROR | Spaces must be used to indent lines; tabs are not allowed
  7 | ERROR | Expected "if (...) {n"; found "if(...){n"
  7 | ERROR | Variable "ma_variable" is not in valid camel caps format
  8 | ERROR | Spaces must be used to indent lines; tabs are not allowed
  9 | ERROR | Closing brace indented incorrectly; expected 5 spaces, found 8
 12 | ERROR | Opening brace should be on a new line
--------------------------------------------------------------------------------

Il est également possible de lancer le script sur le contenu d’un répertoire :

nico@laptop:~/test_phpcs/$ phpcs --standard=Zend ./

Ou encore, d’obtenir un récapitulatif du nombre d’anomalies constatées :

nico@laptop:~/test_phpcs/$ phpcs --standard=Zend --report=summary ./
PHP CODE SNIFFER REPORT SUMMARY
--------------------------------------------------------------------------------
FILE                                                            ERRORS  WARNINGS
--------------------------------------------------------------------------------
/home/nico/test_phpcs/ErrorController.php                      4       3
/home/nico/test_phpcs/IndexController.php                      6       2
/home/nico/test_phpcs/BugController.php                        11      9
--------------------------------------------------------------------------------
A TOTAL OF 21 ERROR(S) AND 14 WARNING(S) WERE FOUND IN 3 FILE(S)
--------------------------------------------------------------------------------

Pour aller plus loin

Le contrôle des productions avec PHP CodeSniffer peut être mis en place via un script shell lancé avant chaque dépôt de fichiers sur le système de gestion de versions.

Il est également possible d’automatiser ce procédé en utilisant le serveur d’intégration continue CruiseControl, son plugin phpUnderControl permet de lancer des batteries de tests unitaires ou encore d’obtenir des indicateurs quand à la qualité du code et de la documentation.

Ressources complémentaires

PHP , , Permalien.

Une réponse pour Convention de codage et PHP CodeSniffer

  1. Romain says:

    Et pour le langage Java, il y a Checkstyle

    :)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">