Composer - Un test avec un linter pour php

Par nbergeron, 15 février, 2025
Utilisation de composer
Installer un linter PHP pour enfin mettre de l'ordre dans son code

L'article précédent portait sur l'installation de composer et celui-ci porte sur une expérimentation concrète afin de pouvoir l'utiliser afin d'installer un linter ou un vérificateur de conformité au standard de code pour php qui est PHP_CodeSniffer (phpcs pour les intimes ;) ).

Il s'agit d'un projet sous la license BSD-3 disponible sur GitHub. Cette licence permet essentiellement de redistribuer avec ou sans modifications mais il faut garder la notice de la license et les développeurs se dégagent de toutes responsabilités en cas de problèmes causés par leurs logiciels. Par ailleurs, j'ai cru comprendre que le créateur du projet est moins impliqué mais la maintenance du projet aurait été pris en charge par des nouveaux développeurs !

1) Installation

Vous pouvez l'installer globalement :

  • composer global require squizlabs/php_codesniffer

Ou localement :

  • composer require --dev squizlabs/php_codesniffer

L'installation par projet demande de se déplacer dans la dossier de votre projet avant. Cela devrait un résultat similaire à l'exemple montré dans l'image de l'article.

2) Utilisation

Compte tenu que j'utilise l'installation locale et que j'en ai une globale, alors je vais appeler phpcs directement en référence au chemin absolu plutôt qu'en utilisant le raccourcis dans le path (ou la liste des répertoires d'exécutables).

Comme ceci : cheminVersLeDossier % ./vendor/bin/phpcs phpfaute.php

Et le résultat ressemble à ceci :

FILE: cheminVersLeDossier/phpcstest/phpfaute.php
--------------------------------------------------------------------------------
FOUND 18 ERRORS AFFECTING 10 LINES
--------------------------------------------------------------------------------
  2 | ERROR | [ ] You must use "/**" style comments for a file comment
  4 | ERROR | [ ] Class name must begin with a capital letter
  4 | ERROR | [ ] You must use "/**" style comments for a class comment
  4 | ERROR | [x] Opening brace of a class must be on the line after the
    |       |     definition
  6 | ERROR | [ ] Private member variable "age" must be prefixed with an
    |       |     underscore
  9 | ERROR | [ ] Missing doc comment for function __construct()
  9 | ERROR | [x] Opening brace should be on a new line
 15 | ERROR | [ ] Missing doc comment for function displayinfo()
 22 | ERROR | [ ] Missing doc comment for function setEmail()
 22 | ERROR | [x] Opening brace should be on a new line
 26 | ERROR | [ ] Private method name "myclass::calculateAge" must be prefixed
    |       |     with an underscore
 26 | ERROR | [ ] Missing doc comment for function calculateAge()
 26 | ERROR | [x] Opening brace should be on a new line
 30 | ERROR | [ ] Missing doc comment for function validateEmail()
 30 | ERROR | [x] Opening brace should be on a new line
 32 | ERROR | [ ] Expected "if (...) {\n"; found "if (...){\n"
 32 | ERROR | [x] There must be a single space between the closing parenthesis
    |       |     and the opening brace of a multi-line IF statement; found 0
    |       |     spaces
 38 | ERROR | [ ] You must use "/**" style comments for a function comment
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 6 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------

Time: 32ms; Memory: 6MB

Les plus perspicaces d'entre-vous auront peut-être remarqués que je n'ai pas précisé quel standard de code utiliser. En effet, par défaut, phpcs utilise PSR-2 (PHP Standard Recommendation 2).

Alors vérifions avec la commande phpcs (ou le chemin relatif vers le fichier binaire) et l'option i : ./vendor/bin/phpcs -i

Le résultat devrait être comme suit : The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz and Zend 

Si vous souhaitez changer de standard de code : ./vendor/bin/phpcs --standard=Zend 

Par contre, vous aurez sûrement ce message : ERROR: You must supply at least one file or directory to process.

La solution est de spécifier le standard par défaut parmi les standards déjà présents avec cette commande : ./vendor/bin/phpcs --config-set default_standard Zend

Le résultat attendu :


Config value "default_standard" added successfully

Ensuite, vous devriez en théorie pouvoir appliquer ce standard de code au même fichier, bien que j'ai eu à spécifier le standard dans la commande : ./vendor/bin/phpcs --standard=Zend phpfaute.php

FILE: cheminVersDossier/phpcstest/phpfaute.php
--------------------------------------------------------------------------------
FOUND 9 ERRORS AFFECTING 9 LINES
--------------------------------------------------------------------------------
  4 | ERROR | [x] Opening brace of a class must be on the line after the
    |       |     definition
  6 | ERROR | [ ] Private member variable "age" must contain a leading
    |       |     underscore
  7 | ERROR | [ ] Protected member variable "email" must contain a leading
    |       |     underscore
  9 | ERROR | [x] Opening brace should be on a new line
 22 | ERROR | [x] Opening brace should be on a new line
 26 | ERROR | [x] Opening brace should be on a new line
 30 | ERROR | [x] Opening brace should be on a new line
 32 | ERROR | [ ] Expected "if (...) {\n"; found "if (...){\n"
 51 | ERROR | [x] A closing tag is not permitted at the end of a PHP file
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 6 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------

Time: 36ms; Memory: 4MB

Hypothèse

Le problème vient probablement du fait que mon installation locale entre en conflit avec l'installation globale lorsque vient le temps de changer le standards de code par défaut. À voir !

Conclusion

Le déboggage sera au prochain article question de vous garder en suspens. Merci d'avoir pris le temps de lire et au prochain article et n'hésitez pas à laisser un petit commentaire !

Sources

Github, squizlabs, PHP_CodeSniffer, https://github.com/squizlabs/PHP_CodeSniffer (consulté le 14 février 2025)

Commentaires