Après six ans de développement, la première version stable de l'analyseur statique PHPStan 1.0 a été publiée, permettant de détecter des erreurs dans le code PHP sans exécution ni utilisation de tests unitaires. Le code du projet est écrit en PHP et est distribué sous licence MIT.
L'analyseur propose 10 niveaux de vérification, chaque niveau suivant élargissant les capacités du précédent et offrant des contrôles plus stricts :
Exemples de problèmes de base détectés :
- Existence de classes utilisées dans instanceof, catch, typehints et autres constructions du langage.
- Existence et accessibilité des méthodes et fonctions appelées, ainsi que du nombre d'arguments transmis.
- Vérification du retour de données par la méthode du même type que celui spécifié dans l'expression return.
- Existence et visibilité des propriétés appelées, ainsi que vérification des types déclarés et réels des données utilisées dans les propriétés.
- Validité du nombre de paramètres passés aux appels sprintf/printf dans le bloc de formatage des chaînes.
- Existence de variables en tenant compte des blocs formés par des opérateurs de branchement et des boucles.
- Conversions de types inutiles (par exemple, « (string) 'foo' ») et vérifications strictes (« === » et « !== ») des données avec des types et des opérandes différents, renvoyant toujours false.
Les principales nouveautés de PHPStan 1.0 :
- Un niveau de vérification « 9 » a été mis en place, effectuant des vérifications sur l'utilisation du type « mixed », destiné à organiser l'acceptation des parameters de différents types par la fonction. Le neuvième niveau identifie des usages non sécurisés du « mixed », tels que le passage de valeurs de type « mixed » à un autre type, l'appel de méthodes avec un type « mixed » et l'accès à ses propriétés, car celles-ci peuvent ne pas exister.
- Gestion de la vérification de l'identité des valeurs de retour pour des appels de fonctions identiques en utilisant les annotations @phpstan-pure et @phpstan-impure.
- Analyse des types dans les constructions try-catch-finally utilisant les annotations @throws.
- Identification de certaines propriétés, méthodes et constantes internes (privées) définies mais non utilisées.
- Transmission d'appels de rappels incompatibles dans les fonctions de traitement des tableaux, telles que array_map et usort.
- Inspection des types pour les annotations typehint manquantes.
- La compatibilité des descriptions de types avec PHPDocs est assurée, permettant d'utiliser dans PHPDocs les types des messages d'erreur.
Source : opennet.ru
