Pylyzer - Une analyse statique Python 100 fois plus rapide !

par Korben ✹ -

Vous en aviez marre des analyseurs de code Python plus lents qu’un escargot sous Xanax ? Et bien dites bonjour à pylyzer, la nouvelle star de l’analyse statique ! 🚀

Ce p’tit truc est Ă©crit en Rust, ce qui lui permet d’ĂȘtre en moyenne 100 fois plus rapide que ses concurrents comme pytype ou pyright. En plus de la vitesse, pylyzer se distingue par son analyse ultra dĂ©taillĂ©e. On parle pas juste de type checking basique lĂ , pylyzer est capable de dĂ©tecter les accĂšs hors limites Ă  des listes ou les accĂšs Ă  des clĂ©s inexistantes dans des dictionnaires.

D’ailleurs, contrairement Ă  ce qu’on pourrait penser, pylyzer n’est pas qu’un simple type checker. C’est un vĂ©ritable couteau suisse de l’analyse statique ! Il fait aussi office de linter pour vous aider Ă  garder un code propre et consistant.

Bon aprĂšs, faut pas se leurrer, pylyzer a ses limites. DĂ©jĂ , il suppose que votre code est potentiellement statiquement typĂ©, donc oubliez les exec, setattr et compagnie. Ah et le typage de l’API standard de Python n’est pas complet donc vous risquez de voir des erreurs du genre “cette API n’existe pas”, soyez prĂ©venus ! Enfin, vu que le type checking de pylyzer est conservatif dans son approche, vous risquez de voir pas mal de faux positifs. Si ça vous saoule, dĂ©sactivez les diagnostics, on ne vous en voudra pas (mais je vous le dĂ©conseille quand mĂȘme) ! 😅

Soutenir Korben

En parlant d’accĂšs, vous n’aurez aucun mal Ă  accĂ©der aux rapports d’erreur de pylyzer car contrairement Ă  certains, ils sont clairs comme de l’eau de roche ! Fini le charabia illisible, on vous montre exactement oĂč se situe l’erreur et on vous explique le problĂšme sans prise de tĂȘte. Et cĂŽtĂ© fonctionnalitĂ©s, pylyzer ne fait pas les choses Ă  moitiĂ©. Le support LSP est hyper riche, de la complĂ©tion au renommage en passant par plein d’autres features bien cool. Tout ça grĂące Ă  l’adaptation du serveur de langage de Erg. Et si vous voulez en profiter directement dans VSCode, pas de souci ! L’extension est dispo sur le Marketplace et hop, c’est rĂ©glĂ© ! 😎

Maintenant vous allez me dire “OK c’est bien beau tout ça, mais pylyzer il sert Ă  quoi comparĂ© Ă  Ruff par exemple ?”. Alors oui, Ruff est aussi un outil d’analyse statique pour Python Ă©crit en Rust, mais lui se concentre uniquement sur le linting tandis que pylyzer fait du type checking et sert de serveur de langage. En gros, on ne mĂ©lange pas les torchons et les serviettes !

Si vous voulez savoir comment ça marche dans le dĂ©tail, sachez que pylyzer utilise le type checker de Erg en interne, en plus de ses propres capacitĂ©s de vĂ©rification de type. Il convertit l’AST Python en AST Erg avant de le passer au type checker, puis il adapte les rĂ©sultats pour Python. Malin ! 😏 Par contre, Erg n’est pas un langage transpilĂ© en Python comme on pourrait le croire, il peut tourner directement sur la machine cible.

Soutenir Korben

MalgrĂ© ces petits dĂ©fauts, pylyzer gĂšre quand mĂȘme un paquet de trucs : type checking sur les variables, opĂ©rateurs, fonctions, mĂ©thodes et classes, infĂ©rence de type, rĂ©solution des modules et packages, les types des collections (list, dict, tuple), une bonne partie de typing, les types gĂ©nĂ©riques et variance, les type guards, le type narrowing (qui peut se faire avec is et isinstance mais pas que), les assertions de type (via typing.cast par exemple)
 Bref, ça en fait des belles jambes dis donc ! 🩿

Alors vous attendez quoi pour tester ce petit bijou ?