Py学习  »  Python

Pyright:微软提供的Python静态类型检查器

Python程序员 • 5 年前 • 390 次点击  

速度

Pyright是一个针对大型Python源代码库的快速类型检查器。它可以在“监视(watch)”模式下运行,并在文件修改后执行快速增量更新。

不依赖于Python环境

Pyright不需要Python环境或导入安装的的第三方包。

可配置性

Pyright支持配置文件,它们可以通过设置来提供精细控制。不同的“执行环境”可以在源代码库中关联子目录。每个环境都可以指定不同的模块搜索路径、python语言版本和目标平台。

类型检查特性

Pyright 支持:

  • PEP 484 类型提示,包括泛型

  • PEP 526 变量注释语法

  • PEP 544结构化的子类型

  • 函数返回值、实例变量、类变量和全局变量的类型推断

  • 理解条件代码流结构(如if/else语句)的智能类型约束

内置类型存根

Pyright包含来自Typeshed的stdlib类型存根的最新副本。可以通过配置使其使用另一个Typeshed类型存根副本(可能是最近的或修改过的)。当然,它也可以与作为项目一部分的自定义类型存根文件一起运行。

命令行工具或VS Code扩展

Pyright包括一个命令行工具和一个用于VSCode的语言服务器协议插件。

文档

  • 开始

  • 命令行选项

  • 配置

  • 导入解决方案

  • 构建&调试

  • Pyright内部结构

限制

Pyright目前仅提供对Python 3.0及更新版本的支持。目前还没有支持旧版本的计划。

Pyright项目还在进行中。类型检查功能还没有完全实现。有关未完成功能的列表,请参考下面的TODO列表。

常见问题

问: Pyright和Microsoft Python VS Code 插件有什么区别?

答: Python VS Code插件是VS Code的官方Python支持扩展。它由微软的一个工程师团队正式支持。它支持各种各样的特性,包括调试、linter插件、类型检查插件等等。Pyright完全专注于类型检查。这是一个没有专门团队的次要项目。

问: Pyright和Microsoft Python语言服务器有什么区别?

答: Microsoft Python语言服务器是一个语言服务器协议 (LSP)实现,它与Microsoft Python VS Code插件一起工作,并由Microsoft的一个工程师团队正式支持。它还提供了类型检查功能。Pyright提供了重叠的功能,但也包含一些独特的特性,比如更具可配置性、命令行执行和更好的性能。

安装

您可以直接从VSCode中安装Pyright VS Code扩展的最新发布版本。只需打开extensions面板并搜索pyright

您可以通过npm来安装命令行工具的最新版本:npm i pyright

要全局安装它,请执行:npm i -g pyright

要运行命令行工具,请执行:npx pyright

待办事项

Pyright是一个正在进行中的项目。以下功能尚未完成。如果您想对这些领域做出贡献,请联系repo的维护人员。

  • 对生成器的类型分析支持

  • 协同程序的类型分析支持

  • 对async(异步)函数和lambda的类型分析支持

  • 验证await/async一致性

  • 支持注释中的旧式类型注解

  • 处理代码中的许多TODO注释

  • 更好地处理函数装饰器(不在类型检查上浪费时间)

  • 为类型检查器添加更多测试

  • 验证所有抽象方法都被重载

  • 提供将以下划线开头的实例变量和方法视为私有的switch(开关)

  • 验证魔术函数的参数

  • 在可能的情况下,为lambda合成(synthesize)TypeVar参数并返回类型

  • 验证子类中重写的方法与基类方法具有相同的签名

  • 验证异常类是否继承自Exception基类

  • 添加对在子类中申明的基于方法参数类型的子类型变量的推理支持

  • 在所有声明的方法之间验证子类类型变量的一致性

  • 添加对var-arg参数类型提示的支持

  • 添加对NoReturn类型的支持

  • 将对只读值 (如None, True, False __debug__)的赋值标记为错误

  • 改进对属性的支持——使用描述符协议建模,检测缺失的的setter

  • 将数字代码添加到诊断和配置机制中,用于按代码禁用错误

贡献

本项目欢迎各方面的贡献和建议。大多数贡献需要您同意贡献者许可协议(CLA),来声明您有权(实际上也确实有权)授予我们使用您的贡献的权利。详情请访问https://cla.microsoft.com

当您提交一个推送请求时,CLA-机器人将会自动确定您是否需要提供一个CLA并适当地修饰PR(例如,标签、说明)。您只需遵循机器人提供的指示即可。使用我们的CLA,在我们所有repo(源码仓库)中,您只需要执行这一次。

本项目已采用 微软开源行为守则 如需更多信息,请查看行为准则FAQ,或者您也可以联系opencode@microsoft.com来反馈问题或进行评论。


英文原文:https://github.com/Microsoft/pyright 

 译者:好酒不上头

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31529
 
390 次点击