Utiliser PHP_codeSniffer : les bases

, par clem

Usage : quelques exemples de commandes

Tester un fichier php seul :

  1. phpcs dossier/fichier_truc.php

Tester un dossier complet : par ex à la racine d’un répertoire de plugin
(/ !\ attention ! lancer phpcs sur un gros dossier avec beaucoup de fichiers (php / css / js) sans faire de restrictions via la configuration peut entraîner une GROSSE charge pour votre processeur !)

  1. phpcs dossier/

devrait retourner tout un tas d’erreurs à corriger, pour à peu près tous les types de fichiers (js, css, php)

Restreindre la portée du scan aux fichiers PHP, exclure des dossiers :
En ajoutant le fichier `phpcs.xml` à la racine du répertoire avec le contenu proposé dans momh.fr, on doit restreindre la détection des erreurs aux fichiers .html et .php
Le contenu du fichier :

  1. <?xml version="1.0"?>
  2. <ruleset>
  3.         <file>./</file>
  4.         <exclude-pattern>**/*.js</exclude-pattern>
  5.         <exclude-pattern>**/*.css</exclude-pattern>
  6.         <exclude-pattern>**/*.scss</exclude-pattern>
  7.         <exclude-pattern>node_modules/*</exclude-pattern>
  8.         <exclude-pattern>vendor/*</exclude-pattern>
  9.         <arg name="colors"/>
  10.         <rule ref="SPIP41"/>
  11. </ruleset>

Télécharger

Tester uniquement avec les coding-standard de SPIP :

  1. phpcs  --standard=SPIP41 dossier/fichier_truc.php

Ne pas afficher les warnings (uniquement les erreurs) :

  1. phpcs -n dossier/fichier_truc.php

Colorer la sortie :

  1. phpcs --colors dossier/fichier_truc.php

Compléments de configuration : l’option —config-set

Utilisation de l’option —config-set :
par exemple si vous n’utilisez phpcs/phpcbf que pour les standards SPIP, pour éviter d’ajouter l’option `—standard=SPIP41` à chaque appel de la commande, vous pouvez passer ce paramètre en option par défaut avec :

  1. phpcs --config-set default_standard SPIP41

NB : cela donne une configuration écrite dans le fichier ...Composer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf qu’il est possible de bricoler directement aussi
La syntaxe de cette option est de la forme :

  1. phpcs --config-set clé  valeur

par ex pour avoir la coloration par défaut

  1. phpcs --config-set colors 1

La documentation pour les configurations possibles avec l’option —config-set :
https://github.com/squizlabs/PHP_CodeSniffer/wiki/Configuration-Options

Exemple de fichier de configuration CodeSniffer.conf pour colorer systématiquement, utiliser les standards SPIP41 et ignorer les warnings :

  1. <?php
  2.  $phpCodeSnifferConfig = array (
  3.   'installed_paths' => 'C:/Users/VOTRE_USER/AppData/Roaming/Composer/vendor/phpcompatibility/php-compatibility,C:/Users/VOTRE_USER/AppData/Roaming/Composer/vendor/spip/coding-standards/src',
  4.   'default_standard' => 'SPIP41',
  5.   'colors' => 1,
  6.   'show_warnings' => 0,
  7. );
  8. ?>

Télécharger

Spécifique installation sous Windows :

Adaptations du post de https://momh.fr/installer-globalement-php_codesniffer
On suppose :

1/ Installation globale :

  1. composer global --dev require squizlabs/php_codesniffer
  2. composer global --dev require spip/coding-standards

Télécharger

Tester que c’est OK :

  1. phpcs --help
  2. phpcbf --help

Télécharger

doivent retourner le Help avec toutes les options de la commande

2/ Déclarer le répertoire des standards SPIP à PHP_CodeSniffer :

  1. phpcs --config-set installed_paths C:/Users/VOTRE_USER/AppData/Roaming/Composer/vendor/phpcompatibility/php-compatibility,C:/Users/VOTRE_USER/AppData/Roaming/Composer/vendor/spip/coding-standards/src

cette commande devrait retourner :

  1. Using config file: C:\Users\VOTRE_USER\AppData\Roaming\Composer\vendor\squizlabs\php_codesniffer\CodeSniffer.conf

Pour tester que la config est OK la commande :

  1. phpcs -i

devrait retourner quelque chose comme :

  1. The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz, Zend, PHPCompatibility, SCS1, SPIP40 and SPIP41

Références :