Fermer

janvier 17, 2023

Drupal – Résoudre les problèmes de codage avec PHPStan

Drupal – Résoudre les problèmes de codage avec PHPStan


PHPStan est un excellent outil de ligne de commande pour voir comment fonctionne votre code PHP sans l’exécuter. C’est idéal pour trouver des bogues potentiels que d’autres outils et tests unitaires n’ont pas pu trouver.

Concernant les projets Drupal, il y a un petit problème que PHPStan ne sait pas interpréter les plugins Drupal, entités, contrôleurs, ou autre architecture Drupal qui va dans les modules Drupal. Pour cette raison, lorsque vous essayez d’exécuter PHPStan sur le code de votre module, vous constaterez qu’il génère de nombreuses erreurs concernant des objets manquants et des paramètres erronés.

Alors, installons ceci dans votre projet Drupal.

Étapes pour installer PHPStan dans le projet Drupal.

Étape 1: Pour installer PHPstan dans votre projet, ouvrez le terminal et exécutez la commande ci-dessous dans le répertoire racine de votre projet.

composer require --dev phpstan/phpstan phpstan/extension-installer mglaman/phpstan-drupal phpstan/phpstan-deprecation-rules

Image 1

Étape 2: Après avoir installé PHPStan, nous devons configurer les paramètres de PHPStan pour trouver des erreurs dans notre code.

Créez un nouveau fichier dans le répertoire racine de votre projet appelé phpstan.neon et ajoutez la configuration ci-dessous.

parameters:
    level: 0
    paths:
        - docroot/modules/custom
    editorUrl: 'phpstorm://open?file=%%file%%&line=%%line%%'

Photo2

Initialement, nous définissons le niveau de vérification des erreurs PHPStan sur 0. Ainsi, il effectuera les vérifications de base dans votre code. Nous pouvons le modifier en fonction de notre niveau de complexité du code.

Voici un aperçu rapide de ce qui est vérifié à chaque niveau. Les niveaux sont cumulatifs. Par exemple, si vous passez au niveau 5, vous obtenez également tous les chèques du niveau 0 à 4.

  1. Vérifications de base, classes inconnues, fonctions inconnues, méthodes inconnues appelées par $this, nombre incorrect d’arguments passés à ces méthodes et fonctions, toujours des variables indéfinies.
  2. Variables potentiellement indéfinies, méthodes magiques inconnues et propriétés de classe avec __call et __get.
  3. Méthodes inconnues vérifiées pour toutes les expressions (pas seulement $this), vérification PHPDocs.
  4. Type de retour, le type affecté à une propriété.
  5. Pour les vérifications de base, le code mort – et les autres instances de vérification de type sont toujours erronées, sinon la branche est morte, dans le code après le retour inaccessible, etc.
  6. Vérifiez les types d’arguments passés aux méthodes et aux fonctions.
  7. Signaler les indications de type manquantes.
  8. Signaler des types d’union partiellement incorrects – certains types de types d’union Le rapport commence au niveau 7 lors de l’appel d’une méthode qui n’existe que dans.
  9. Appels de méthode de rapport et accès aux propriétés de types nullables.
  10. Soyez strict avec les types mixtes – la seule opération légale qui peut être effectuée sur un type mixte est de le passer à un autre type mixte.

Étape 3: Maintenant, exécutez la commande ci-dessous dans le terminal pour générer un rapport d’erreurs PHPStan.

php ./vendor/bin/phpstan

Il générera un rapport d’erreurs PHPStan. Le format par défaut sera le format tableau pour afficher toutes les erreurs.

Photo4

Si vous rencontrez un problème de mémoire, utilisez cette commande avec l’option –memory-limit.

php ./vendor/bin/phpstan --memory-limit=1G

En outre, vous pouvez générer ce rapport d’erreurs dans un format différent. Voici un exemple pour générer ce rapport au format JSON.

php ./vendor/bin/phpstan --error-format=json --no-progress --ansi > phpstan_analysis.json

Ici, phpstan_analysis.json est un nom de fichier dans lequel toutes les erreurs seront générées. Il sera généré dans le répertoire racine du dossier du projet.

Un problème courant lors de l’analyse de code Drupal à l’aide de PHPStan.

Lors de la génération du rapport PHPStan, j’ai trouvé plusieurs problèmes dans les fichiers concernant l’erreur ci-dessous.

Utilisation non sécurisée de new static().

Voir: https://phpstan.org/blog/resolution-phpstan-error-unsafe-usage-of-new-static

Photo7

Photo8

En effet, nous utilisons des services d’injection de dépendance et d’appel à l’aide de ContainerInterface.

public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition
    );
  }

Image9

La raison pour laquelle PHPStan génère cette erreur est que l’extension d’une classe et le remplacement du constructeur par d’autres paramètres peuvent la casser.

Il y a des informations sur pourquoi cela l’utilisation de new static() n’est pas sûre sur le site PHPStan.

Pour ignorer cette erreur dans un rapport, vous devez ajouter la configuration ci-dessous dans phpstan.neon dossier.

Photo10

L’ajout de cette option désactive cette erreur et signifie que nous pouvons nous concentrer sur d’autres éléments importants pour améliorer la qualité du code du code personnalisé.

Conclusion

PHPStan est un excellent outil et devrait faire partie de votre workflow de développement. Grâce à cela, nous pouvons améliorer la qualité et l’efficacité de notre code. Nous avons réussi à générer un rapport d’erreur PHPStan dans le projet Drupal et nous avons appris à exclure les erreurs qui ne sont pas de véritables erreurs.






Source link