PHPStan, un outil d’analyse statique de code PHP, vient de sortir en version 1.0. Pour l’occasion, un nouveau niveau de criticité a été créé.
PHPStan est une bibliothèque en PHP permettant de faire de l’analyse statique de code PHP. Elle permet de détecter des erreurs dans du code, sans avoir besoin de l’exécuter (à la différence des outils de débogage ou de profiling, qui se basent sur une vraie exécution du code). Créé il y a 6 ans, PHPStan est devenu depuis un outil de référence pour ceux qui souhaitent surveiller la qualité de leur code.
Pour rappel, les niveaux de criticité couvrent les cas suivants (tirés de la documentation officielle) :
- 0 : vérifications basiques, classes ou fonctions inconnues, méthodes inconnues appelées par
$this
, nombre d’arguments passés pour ces méthodes ou fonctions incorrect, variables jamais définies - 1 : variables potentiellement non définies, méthodes magiques et propriétés sur des classes avec
__call
et__get
- 2 : méthodes inconnues vérifiées sur toutes les expressions (pas seulement sur
$this
), validation de PHPDocs - 3 : types de retour, types assignés à des propriétés
- 4 : vérification basique de code inutilisé -
instanceof
toujours à « false » et autres vérifications de type, brancheselse
inutilisées, code injoignable après unreturn;
, etc. - 5 : vérification du type des arguments passés aux méthodes et aux fonctions
- 6 : reporter les indices de type
- 7 : reporter les types d’union en partie erronées - Si vous appelez une méthode qui existe seulement pour certains types dans un type d’union le niveau 7 commence à vous en informer; autres situations potentiellement incorrectes
- 8 : reporter les méthodes d’appel et les propriétés d’accès sur des types nullable
- 9 : être strict sur le type
mixed
- la seule opération que vous pouvez faire ce type est de le passer vers un autre typemixed
C’est ce niveau 9 qui a donc été ajouté, avec la version 1.0 : il permet de limiter l’usage du type mixed
(un type indiquant que le retour d’une fonction peut être de différents types).
Goodies from Bleeding Edge
Pour fêter la sortie de cette première version stable, l’équipe propose quelques produits dérivés (t-shirts et badges).
Larastan aussi est en version 1.0
Larastan, un wrapper autour de PHPStan spécifiquement développé pour le framework Laravel passe lui aussi en version 1.0.
Et vous, vous en êtes à quel niveau ?
Aller plus loin
- Site officiel (188 clics)
- Dépôt Github (51 clics)
- L'annonce officielle (21 clics)
- Larastan passe aussi en version 1.0 (19 clics)
# Ils sont partout
Posté par Philippe F (site web personnel) . Évalué à 3. Dernière modification le 08 novembre 2021 à 14:46.
Quel langage dynamique n'a pas son vérificateur de type statique maintenant ? Ils sont partout ces vérificateurs. Et c'est une bonne chose pour notre industrie, on va enfin pouvoir se hisser au niveau de fiabilité du C++. Arf !!
[^] # Re: Ils sont partout
Posté par xoddark . Évalué à 4.
Et pendant ce temps là, Rust pousse le bouchon encore plus loin. :)
[^] # Re: Ils sont partout
Posté par windu.2b . Évalué à 4.
Moi qui n'ai jamais codé en Rust, j'aimerais bien que tu nous en dises plus.
[^] # Re: Ils sont partout
Posté par Thomas Douillard . Évalué à 4.
Un article comme celui là est un bon aperçu sans doute : https://polyfloyd.net/post/how-rust-helps-you-prevent-bugs/
Rust permet par conception de quasiment éliminer certaines classes de bug de langages comme C/C++ , en plus de toutes les erreurs qui sont impossibles à faire dans un langage à typage statique.
Par exemple le langage est conçu de manière à ce que les utilisations de pointeurs après avoir détruit sur l’objet sur lequel ils pointent est impossible. Le compilateur est capable de détecter une telle erreur du programmeur, le programme est incorrect et ne compilera pas.
[^] # Re: Ils sont partout
Posté par xoddark . Évalué à 2. Dernière modification le 11 novembre 2021 à 13:27.
Je n'ai pas encore assez pratiqué et pas assez réfléchi à la question pour pouvoir bien l'expliquer. Mais je vais tenter une formulation (partielle) :
Pour quelqu'un qui vient du C/C++, c'est un peu comme si tu avais le compilateur avec le niveau max de warning + un analyseur statique d'activer à la compilation.
Genre c'est pas un plus, c'est obligatoire de corrigé les erreurs remontées.
Mais j'ai dit un peu, car en fait le langage est beaucoup moins permissif notamment niveau gestion mémoire (ex: il impose le paradigme RAII), mais du coup le compilateur est aussi capable de mieux analyser/suivre le code qui est écrit, et donc détecter s'il y a des erreurs.
Bien sur il ne va pas dire si l’algorithme ne fait pas ce que le nom de la fonction dit. Mais par contre il est capable de dire si le programmeur essaie d'utiliser une variable avant qu'elle soit initialisée, après quel soit détruite, mais aussi si deux bouts de code essaient de modifier la même variable indépendamment.
Bien sur pour du code synchrone il y a des outils pour permettre la synchro et le partage de variable/donnée. Mais il faut utiliser des types spécifiques et qui du coup explicite l'intention.
J'aime aussi la séparation Safe/Non-safe qui permet d'expliciter et d'encadrer les parties ou la gestion mémoire est faite de façon moins stricte (nécessaire pour certain conteneurs/types de base).
Et ce n'est que quelques exemples non exhaustifs.
L'avant-propos et l'introduction de la doc officielle peut apporter d'autres éléments également :
En anglais : https://doc.rust-lang.org/book/foreword.html
Ou en Français : https://jimskapt.github.io/rust-book-fr/foreword.html
[^] # Re: Ils sont partout
Posté par windu.2b . Évalué à 3.
Merci à Thomas Douillard et toi pour ces explications.
Juste une petite remarque/question : je suppose que tu voulais dire "Bien sur pour du code asynchrone" ?
[^] # Re: Ils sont partout
Posté par xoddark . Évalué à 2.
Euh, oui bien entendu 😄
# Coquilles
Posté par windu.2b . Évalué à 2.
C'est bien évidemment une fois publiée que je découvre que j'ai laissé passer des coquilles…
Quelqu'un peut corriger, svp ?
* à la différence des outils de débogage ou de profiling, qui se basent sur une vraie exécution du code
* Créé il y a 6 ans, PHPStan est devenu
* être strict sur le type
mixed
type[^] # Re: Coquilles
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Corrigé, merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.