Après six ans de développement, la première version stable de PHPStan 1.0, un analyseur statique, est disponible. Il permet de détecter les erreurs dans le code PHP sans l'exécuter ni utiliser de tests unitaires. Le code du projet est écrit en PHP et distribué sous licence MIT.
L'analyseur fournit 10 niveaux de vérification, chaque niveau suivant étendant les capacités du précédent et fournissant des contrôles plus stricts :
Exemples de problèmes sous-jacents identifiés :
- L'existence de classes utilisées dans instanceof, catch, typehints et d'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érifie si une méthode renvoie des données du même type que celles définies dans l'instruction de retour.
- L'existence et la visibilité des propriétés auxquelles on accède, ainsi que la vérification des types de données déclarés et réels utilisés dans les propriétés.
- Nombre correct de paramètres passés aux appels sprintf/printf dans le bloc au format chaîne.
- Existence de variables prenant en compte les blocs formés par les opérateurs de branchement et les boucles.
- Conversions de types inutiles (par exemple "(string) 'foo'") et vérifications strictes ("===" et "!==") sur des données avec différents types et opérandes qui renvoient toujours faux.
Principales fonctionnalités de PHPStan 1.0 :
- Le niveau de validation « 9 » a été implémenté. Il vérifie l'utilisation du type « mixte », conçu pour les fonctions acceptant des paramètres de types différents. Le niveau 9 détecte les utilisations non sécurisées du type « mixte », telles que le passage de valeurs de type « mixte » à un autre type, l'appel de méthodes de type « mixte » et l'accès à ses propriétés, car elles peuvent ne pas exister.
- Contrôle de la vérification des valeurs de retour identiques pour les appels de fonction identiques à l'aide des annotations @phpstan-pure et @phpstan-impure.
- Analyse de type 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.
- Transmission de rappels incompatibles aux fonctions de gestion de tableaux telles que array_map et usort.
- Inspectez les types pour détecter les annotations typehint manquantes.
- Les descriptions de type sont désormais compatibles avec PHPDocs, vous permettant d'utiliser les types des messages d'erreur dans PHPDocs.
Source: opennet.ru
