Skip to main content

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:

  1. There are some nodes that are easy to infer type of. For example, 13 is always int.
  2. 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 type list. It might be not true if you shadow list with something else.
  3. If the type cannot be assumed just looking at the node, we try to use astroid to infer the type.
  4. 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.
  5. 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

astypes-0.2.5.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

astypes-0.2.5-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file astypes-0.2.5.tar.gz.

File metadata

  • Download URL: astypes-0.2.5.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.25.1

File hashes

Hashes for astypes-0.2.5.tar.gz
Algorithm Hash digest
SHA256 a3d192557be9ae0eb13359b5965d4d99b47c0d6dddd93dee8f962a4bbfc02ea8
MD5 44a390f0bdd3e0665dafbf36e4c8bc50
BLAKE2b-256 39beddca111da9e3beead918ff9298d6b75ca4b28641f54fbbbb8a12bfccdbc5

See more details on using hashes here.

File details

Details for the file astypes-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: astypes-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.25.1

File hashes

Hashes for astypes-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 fd57644206b6d206cdaf93fbb7bbcc80a7c0dedeedf0c9bdba2c545cef243f8c
MD5 c66b9df89a2d6ca42449ab93f426858c
BLAKE2b-256 ebac465ea160b3b2b4a10ace3f59d62345794f19a6ceeece5fb71a45672551c9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page