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 :
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