Infer types for AST nodes.
Project description
astypes
Python library to statically detect types for AST nodes.
A good use case is a linter that needs to run some rules only for particular types. For instance, to check arguments of something.format(a=b)
only if something
has type str
.
python3 -m pip install astypes
Usage
Astypes uses astroid to infer definitions of nodes. So, if your code works with ast nodes, you'll need to convert them into astroid first:
import astroid
import astypes
module = astroid.parse(source_code)
node = astypes.find_node(module, ast_node)
And when you have an astroid node, you can get its type:
node_type = astype.get_node(node)
print(node_type.annotation)
Example:
import astroid
import astypes
node = astroid.extract_node('1 + 2.3')
t = astypes.get_type(node)
print(t.annotation) # 'float'
For a real-world usage example, check out infer-types. It is a CLI tool that automatically adds type annotations into Python code using astypes.
How it works
You can find most of the logic in astypes/_handlers.py. In short:
- There are some nodes that are easy to infer type of. For example,
13
is alwaysint
. - Some nodes are also to infer, but only if to make some assumptions. Assumptions that we make are the ones that are true in 99% of cases. For example, we assume that
list(x)
returns typelist
. It might be not true if you shadowlist
with something else. - If the type cannot be assumed just looking at the node, we try to use astroid to infer the type.
- If the returned value is a function call, we use astroid to find the definition of the function. The annotated return annotation of the function is what we need.
- If resolved function doesn't have annotation, we use typeshed_client to get its annotation from typeshed. For example, for all built-in functions.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file astypes-0.2.0.tar.gz
.
File metadata
- Download URL: astypes-0.2.0.tar.gz
- Upload date:
- Size: 9.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.25.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 924d947bdc0b37b39a87badd0aa229f6f8891ff58ea9bb357b36fa0e9f64c485 |
|
MD5 | 55009d2f8fd67bbb852b36b56e81f69c |
|
BLAKE2b-256 | 809a117b7919ccfc11e840e1a1f86d18d524a1a3bec65f213d62ee4a77b2d2e3 |
File details
Details for the file astypes-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: astypes-0.2.0-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.25.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 82c2d33a034ee608e2dea2e5e5755b7d77c5e9fc4fa5b8246b2e7891c080b753 |
|
MD5 | da7f3117a514569636b326a18882f100 |
|
BLAKE2b-256 | 57787abc961b1f50de9b26ad501d3697f0a3b405bd731d81506ff9b288284550 |