跳转到主要内容

推断AST节点类型。

项目描述

astypes

用于静态检测AST节点类型的Python库。

一个好的用例是一个需要仅对特定类型运行某些规则的linter。例如,如果something具有类型str,则仅检查something.format(a=b)的参数。

python3 -m pip install astypes

用法

Astypes使用astroid推断节点定义。因此,如果您使用ast节点,您需要先将它们转换为astroid。

import astroid
import astypes

module = astroid.parse(source_code)
node = astypes.find_node(module, ast_node)

当您有一个astroid节点时,您可以获取其类型

node_type = astype.get_node(node)
print(node_type.annotation)

示例

import astroid
import astypes

node = astroid.extract_node('1 + 2.3')
t = astypes.get_type(node)
print(t.annotation)  # 'float'

要查看实际的用例,请查看infer-types。它是一个CLI工具,使用astypes自动将类型注解添加到Python代码中。

它的工作原理

您可以在astypes/_handlers.py中找到大部分逻辑。简而言之

  1. 某些节点的类型很容易推断。例如,13始终是int
  2. 某些节点也可以推断,但前提是我们做出一些假设。我们做出的假设是99%情况下都是真实的。例如,我们假设list(x)返回类型list。如果您用其他内容遮蔽了list,则可能不正确。
  3. 如果仅通过查看节点就无法假设类型,我们尝试使用astroid来推断类型。
  4. 如果返回值是一个函数调用,我们使用astroid查找函数的定义。函数的注解返回注解是我们需要的。
  5. 如果解析的函数没有注解,我们使用typeshed_clienttypeshed获取其注解。例如,对于所有内置函数。

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源代码分发

astypes-0.2.6.tar.gz (13.6 kB 查看哈希)

上传时间 源代码

构建分发

astypes-0.2.6-py3-none-any.whl (10.3 kB 查看哈希)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面