Sortie de PHPStan 1.0, un analyseur statique pour le code PHP

Après six ans de développement, la première version stable de l'analyseur statique PHPStan 1.0 a eu lieu, qui permet de rechercher des erreurs dans le code PHP sans l'exécuter et sans utiliser de tests unitaires. Le code du projet est écrit en PHP et distribué sous licence MIT.

L'analyseur propose 10 niveaux de contrôle, dans lesquels chaque niveau suivant étend les capacités du précédent et fournit des contrôles plus stricts :

  • Vérifications de base, définition de classes, fonctions et méthodes inconnues ($this), variables non définies et transmission d'un nombre incorrect d'arguments.
  • Identifier des variables éventuellement non définies, des méthodes magiques inconnues et des propriétés de classes avec __call et __get.
  • Détection de méthodes inconnues dans toutes les expressions, sans se limiter aux appels via $this. Vérification de PHPDocs.
  • Vérification des types de retour et attribution de types aux propriétés.
  • Identification de base du code « mort » (jamais appelé). Identifiez les instances d'appels qui renvoient toujours false, les blocs "else" qui ne se déclenchent jamais et le code après le retour.
  • Vérification des types d'arguments transmis aux méthodes et fonctions.
  • Avertissement concernant les annotations d'informations de type manquantes.
  • Avertissement concernant les types d'union incorrects qui définissent des collections de deux types ou plus.
  • Avertissement concernant l'appel de méthodes et l'accès aux propriétés de type "nullable".
  • Vérification de l'utilisation du type "mixte".

    Exemples de problèmes sous-jacents identifiés :

    • L'existence de classes utilisées dans instanceof, catch, typehints et autres constructions de langage.
    • L'existence et la disponibilité des méthodes et fonctions appelées, ainsi que le nombre d'arguments passés.
    • Vérifier que la méthode renvoie des données du même type que celui défini dans l'expression de retour.
    • L'existence et la visibilité des propriétés accessibles, et la vérification des types de données déclarés et réels utilisés dans les propriétés.
    • Le nombre de paramètres transmis aux appels sprintf/printf dans le bloc de formatage de chaîne est correct.
    • L'existence de variables prenant en compte les blocs formés par les opérateurs de branchement et les boucles.
    • Conversions de type inutiles (par exemple "(string) 'foo'") et tests stricts ("===" et "!==") sur des données avec différents types et opérandes qui renvoient toujours false.

    Principales innovations de PHPStan 1.0 :

    • On a implémenté le niveau de contrôle « 9 », qui vérifie l'utilisation du type « mixte », destiné à organiser la réception par la fonction de paramètres de différents types. Le niveau XNUMX identifie les utilisations dangereuses de « mixte », telles que transmettre des valeurs de type « mixte » à un autre type, appeler des méthodes de type « mixte » et accéder à ses propriétés car elles peuvent ne pas exister.
    • Contrôlez si les valeurs de retour sont identiques pour des appels de fonction identiques à l'aide des annotations @phpstan-pure et @phpstan-impure.
    • Tapez l'analyse dans les constructions try-catch-finally à l'aide des annotations @throws.
    • Identification des propriétés, méthodes et constantes internes (privées) définies mais inutilisées.
    • Passer des rappels incompatibles aux fonctions de tableau telles que array_map et usort.
    • Inspection de type pour les annotations de typehint manquantes.
    • Création de déclarations de types compatibles avec PHPDocs, permettant d'utiliser les types des messages d'erreur dans PHPDocs.

    Source: opennet.ru

  • Ajouter un commentaire