Linters PHP, Javascript et CSS

Utilisation de PHP Code Sniffer, ESLint et Stylelint
Utilisation d'un standard personnalisé dans PHPCS
22/12/2015

Linters PHP, Javascript et CSS

PHP Code Sniffer (PHPCS)

Nous avons développé notre propre jeu de règles, basées sur le standard Symfony2. Il est disponible sur Github : https://github.com/umanit/phpcs-umanit-standard.

Configuration

Créer un fichier XML :

<?xml version="1.0"?>
<ruleset name="UmanIT Symfony2">
    <description>UmanIT coding standards for Symfony2</description>
    <rule ref="Symfony2"><!-- surcharger une règle existante -->
        <exclude name="Symfony2.Commenting.FunctionComment.SpacingBeforeTags"/><!-- désactiver une règle -->
        <exclude name="Symfony2.Commenting"/><!-- désactiver toutes les règles filles de Symfony2.Comenting -->
    </rule>
</ruleset>

L'intérêt d'utiliser un fichier de configuration réside dans la possibilité de surcharger (désactiver, prioriser) certaines règles que l'on juge trop strictes. Il n'est malheureusement pas prévu de pouvoir modifier le niveau d'une erreur : une erreur (bloquante) ne peut pas être transformée en warning (non bloquant), et vice versa.

Il n'existe pas non plus de liste des rulesets, seul le code source peut donner une indication. Pour des besoins spécifiques, PHPCS prévoit tout de même de pouvoir créer de nouvelles règles et implémenter une correction automatique. Je vous invite à consulter la documentation officielle et à regarder comment nous avons fait dans le standard UmanitPhp.

Utilisation
phpcs --standard=[standard] --colors -s path/to/file/or/directory

[standard] représente le standard à utiliser. On peut ainsi passer soit le chemin vers le fichier de règles XML, soit le nom d'un standard installé. Les standards disponibles peuvent être listés par la commande phpcs -i. L'option -s permet d'indiquer pour chaque erreur quelle règle en est à l'origine. Pour un projet Symfony2 chez UmanIT, on utilisera donc :

phpcs --standard=UmanitSymfon2 --colors -s path/to/file/or/directory

Ce qui nous fournira un retour personnalisé tel que :

38 | WARNING | [x] Double slash comments must start with a space
   |         |     (UmanitPhp.Commenting.SingleLineComment.LeadingSpaceNeeded)
38 | WARNING | [ ] Todo should be followed by the uppercased
   |         |     developer's trigram. Expected something like "@todo ABC"
   |         |     where ABC is the trigram, but found "@todo"
   |         |     (UmanitPhp.Commenting.Todo.TrigramSuffix)
38 | ERROR   | [x] Todo is missing @ prefix
   |         |     (UmanitPhp.Commenting.Todo.MissingAtSignPrefix)

Les lignes marquées d'une croix (troisième colonne) peuvent être fixées automatiquement avec l'outil PHPCBF. Fourni avec PHPCS, il permet de corriger certaines erreurs dont les règles prévoient une correction automatique :

phpcbf --standard=[standard] path/to/file/or/directory

ESLint

Configuration

Créer un fichier JSON :

{"extends": "eslint:recommended", "rules": {}}

où rules contient une liste de règles à vérifier. Les règles sont disponibles ici : http://eslint.org/docs/rules/

Utilisation
eslint --config path/to/eslintrc.json path/to/file/or/directory

Stylelint

Configuration

Créer un fichier JSON :

{"rules": {}}

où rules contient une liste de règles à vérifier. Les règles sont disponibles ici : http://stylelint.io/?docs/user-guide/rules.md

Utilisation
stylelint --config path/to/stylelintrc.json path/to/file/or/directory

A noter que pour scanner un répertoire entier, il faudra utiliser un joker : path/to/file/or/directory/*.css.