Pylyzer - Une analyse statique Python 100 fois plus rapide !
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) ! đ
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.
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 ?