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