Laravel Pint

Actualités
Publié par Mathieu De Gracia

Dernier petit nouveau dans l'écosystème des packages de Laravel, la V1.0.0 de laravel/pint fut tag ce 14 juillet.

Le package se décrit comme un "réparateur de style dogmatique", voyons ensemble de quoi il en découle !

Installation

Pint nécessite au minimum une version 8 de PHP et s'installe simplement depuis composer :

composer require laravel/pint

Le package est propulsé par laravel-zero/framework, un framework principalement maintenu par Nuno Maduro, développeur de la core team de Laravel, et basé sur Illuminate.

Ça sert à quoi ?

Pint est une surcouche "dogmatique" d'un robuste package d'analyse et de correction automatique de code : FriendsOfPHP/PHP-CS-Fixer.

Créé à l'origine par Fabien Potencier (aka le créateur de Symfony), le package permet de standardiser rapidement votre code en seulement quelques lignes de commande.

Par exemple, si vous souhaitez standardiser votre code en PSR 12, il suffira de lancer la commande suivante :

 php php-cs-fixer.phar fix /path/to/project --rules=@PSR12

Respecter des conventions est important pour rendre votre code consistant.

PHP-CS-Fixer est par nature agnostique, cela signifie qu'il n'a pas été créé pour corriger spécifiquement une architecture, un projet ou un framework ... dans notre cas Laravel.

Pint s'additionne donc à PHP-CS-Fixer en fournissant tout un lot de règles préconstruites adaptées à un projet Laravel d'où son sobriquet "dogmatique".

Voyons désormais plus concrètement le fonctionnement de Pint !

Simple usage

En exécutant la commande suivante, Pint corrigera automatiquement toutes les erreurs à partir de son preset par défaut : Laravel.

vendor/bin/pint

Nous verrons un peu plus tard ce que sont les presets.

Si vous souhaitez exécuter Pint sans pour autant effectuer les modifications, juste pour prévisualiser les erreurs, la commande suivante est disponible :

vendor/bin/pint --test

Les presets

Un preset est une configuration préétablie contenant un ensemble de rule, il en existe 3 dans pint : laravel, psr12 & symfony.

Par défaut, le preset utilisé en exécutant les commandes précédentes était celui de Laravel, il est toutefois possible de préciser manuellement le preset à utiliser lors de l'utilisation du bin :

vendor/bin/pint --preset laravel
vendor/bin/pint --preset psr12
vendor/bin/pint --preset symfony

Vous trouverez un détail des presets à cette URL.

Ces presets contiennent donc des rules, chaque rule étant une contrainte à appliquer à votre code, voici par exemple un extrait du preset laravel :

// pint/resources/presets/laravel.php 
return ConfigurationFactory::preset([
    'array_indentation' => true,
    'array_syntax' => ['syntax' => 'short'],
    'binary_operator_spaces' => [
        'default' => 'single_space',
    ],
    'blank_line_after_namespace' => true,
    [...]

La rule array_indentation s'assure que tous les elements d'un array dispose de la même indentation, array_syntax standardise le style d'écriture de tous vos array, blank_line_after_namespace garantit qu'un saut de ligne est présent après la déclaration du namespace ...

Il existe énormément de rules différentes que vous trouverez dans ce dictionnaire !

Modifier un preset

Si une rule d'un preset est manquante ou ne vous convient pas, vous pouvez facilement le modifier en créant un fichier pint.json à la racine de votre projet.

{
    "preset": "laravel",
    "rules": {
        "array_syntax": {
            "syntax": "long"
        }
    }
}

Ce fichier s'additionnera au preset sélectionné et vous permettra d'ajouter ou bien de modifier une règle existante !

Conclusion

Pint est un outil encore jeune qui manque de véritables nouveautés pour se démarquer de ses ainés.

Toutefois, il propose une surcouche simplifiant l'utilisation de PHP-CS-Fixer et peut constituer une première approche painless de la correction automatique de code !