推断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中找到大部分逻辑。简而言之
- 某些节点的类型很容易推断。例如,
13
始终是int
。 - 某些节点也可以推断,但前提是我们做出一些假设。我们做出的假设是99%情况下都是真实的。例如,我们假设
list(x)
返回类型list
。如果您用其他内容遮蔽了list
,则可能不正确。 - 如果仅通过查看节点就无法假设类型,我们尝试使用astroid来推断类型。
- 如果返回值是一个函数调用,我们使用astroid查找函数的定义。函数的注解返回注解是我们需要的。
- 如果解析的函数没有注解,我们使用typeshed_client从typeshed获取其注解。例如,对于所有内置函数。
项目详情
下载文件
下载您平台对应的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。
源代码分发
astypes-0.2.6.tar.gz (13.6 kB 查看哈希)
构建分发
astypes-0.2.6-py3-none-any.whl (10.3 kB 查看哈希)
关闭
astypes-0.2.6.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7bfb49dc207890587cd3d1b2fe57c61aa378fb0603a3590ab5e1c1c78b24e387 |
|
MD5 | d95e6c6ba559b9b899f6e8f6302dc367 |
|
BLAKE2b-256 | 41807028efe25d789b020170cc5937f6d2162a2a53604aa3914d9b03707f9390 |
关闭
astypes-0.2.6-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4274e83a80c616f400d05678f9b8bc8143a94e544bbfa02906cc5805d990bf13 |
|
MD5 | eceaa5c55aae032fc7aedec855af8ed0 |
|
BLAKE2b-256 | 1c9f087a31145a2b63ce01deb60e160eac29c700562921b43a7cfbbd0daf3bce |