Microsoft vient de dévoiler Pyright, un outil open source de vérification de type statique pour Python, plus rapide que les solutions de vérification de type existantes comme Mypy. Écrit en TypeScript et fonctionnant sur Node.js, Pyright ne nécessite pas de runtime Python. Il peut être utilisé comme plug-in Visual Studio Code, mais il peut aussi fonctionner comme outil autonome en ligne de commande. L’éditeur affirme dans le document accompagnant le projet que Pyright est « 5X plus rapide » que d'autres vérificateurs de type Python comme Mypy, Pytype, et Pyre, eux-mêmes écrits en Python. L’écriture de ces outils en Python est pratique, mais ils ne peuvent pas être plus rapides que Python lui-même, et le runtime par défaut de Python n’est pas un foudre de guerre pour ce qui est de la performance. Cela dit, la performance de ces outils n'est pas absolue : elle dépend principalement des systèmes sur lesquels ils fonctionnent et des bases de code qu'ils analysent.

Pyright prend en charge les principales syntaxes de type hinting et les syntaxes liées au type actuellement disponibles dans les typages de Python, les syntaxes de notation de variables et le sous-typage structurel. Il permet également de faire des inférences de type dans de nombreuses situations. Le projet s'appuie sur les informations de type « stub » de Python pour effectuer ses analyses, de sorte qu'il peut être synchronisé avec Python, même s'il n'est pas écrit dans le langage.

Une extension pour Visual Studio Code

Quand il est exécuté comme plug-in Visual Studio Code, Pyright délivre un feedback direct sur les informations de code du type affichées avec des infobulles, des liens de définition de symboles, et ainsi de suite. Une partie des fonctions offertes par Pyright doublonne légèrement avec l'offre Python Language Server de Microsoft. Néanmoins, Pyright est essentiellement focalisé sur la vérification de type et non sur d'autres fonctions de linting de code qui servent à améliorer la qualité de code.

Le projet est toujours qualifié de « travail en cours ». De nombreuses fonctionnalités apparaissent avec l’indication « inachevée » ou « à faire ». C’est le cas par exemple de l'inférence de type pour les générateurs ou la validation pour les déclarations async/await. Par contre, Microsoft ne prévoit clairement pas d’ajouter le support de Python 2, ni prochainement, ni plus tard, ce qui n’est pas le cas de Mypy, et de plusieurs autres outils de vérification de code et de type pour Python.

Le rôle essentiel des vérificateurs de type pour Python est d’assurer la bonne exécution d’un programme, et non pas d’accélérer les applications Python. Cependant, certains projets essayent d’optimiser la compilation Python en l’annotant par type pour rendre le langage plus performant. C’est le cas de Mypyc, par exemple, qui compile un Python annoté en C. Pyright pourrait à terme servir de base à un projet similaire.