Skip to main content

A tool for autoadding simple type annotations.

Project description

When I refactor code I often find myself tediously adding type annotations that are obvious from context: functions that don't return anything, boolean flags, etcetera. That's where autotyping comes in: it automatically adds those types and inserts the right annotations.

It is built as a LibCST codemod; see the LibCST documentation for more information on how to use codemods.

Here's how to use it:

  • pip install autotyping
  • Make sure you have a .libcst.codemod.yaml with 'autotyper' in the modules list. For an example, see the .libcst.codemod.yaml in this repo.
  • Run python -m libcst.tool codemod autotyping.AutotypeCommand /path/to/my/code

By default it does nothing; you have to add flags to make it do more transformations. The following are supported:

  • Annotating return types:
    • --none-return: add a -> None return type to functions without any return, yield, or raise in their body
    • --scalar-return: add a return annotation to functions that only return literal bool, str, bytes, int, or float objects.
  • Annotationg parameter types:
    • --bool-param: add a : bool annotation to any function parameter with a default of True or False
    • --int-param, --float-param, --str-param, --bytes-param: add an annotation to any parameter for which the default is a literal int, float, str, or bytes object
    • --annotate-optional foo:bar.Baz: for any parameter of the form foo=None, add Baz, imported from bar, as the type. For example, use --annotate-optional uid:my_types.Uid to annotate any uid in your codebase with a None default as Optional[my_types.Uid].
    • --annotate-named-param foo:bar.Baz: annotate any parameter with no default that is named foo with bar.Baz. For example, use --annotate-named-param uid:my_types.Uid to annotate any uid parameter in your codebase with no default as my_types.Uid.
  • Annotating magical methods:
    • --annotate-magics: add type annotation to certain magic methods. Currently this does the following:
      • __str__ returns str
      • __repr__ returns str
      • __len__ returns int
      • __init__ returns None
      • __del__ returns None
      • __bool__ returns bool
      • __bytes__ returns bytes
      • __format__ returns str
      • __contains__ returns bool
      • __complex__ returns complex
      • __int__ returns int
      • __float__ returns float
      • __index__ returns int
      • __exit__: the three parameters are Optional[Type[BaseException]], Optional[BaseException], and Optional[TracebackType]
      • __aexit__: same as __exit__
    • --annotate-imprecise-magics: add imprecise type annotations for some additional magic methods. Currently this adds typing.Iterator return annotations to __iter__, __await__, and __reversed__. These annotations should have a generic parameter to indicate what you're iterating over, but that's too hard for autotyping to figure out.

Things to add:

  • Infer -> bool as the return type if all return statements are boolean expressions like ==.

Changelog

21.12.0 (December 21, 2021)

  • Initial PyPI release

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

autotyping-21.12.0.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

autotyping-21.12.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file autotyping-21.12.0.tar.gz.

File metadata

  • Download URL: autotyping-21.12.0.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.3 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.10

File hashes

Hashes for autotyping-21.12.0.tar.gz
Algorithm Hash digest
SHA256 0b862a0597fbda0f7a17978d17eae4751d1581a7ec04bce18224172a7ee86018
MD5 70b431fb96db02f7da52c1d5bac3e11b
BLAKE2b-256 f60d617e3561c376a23fa095163544b3b3687873076af77921a3f3e2da22ba7a

See more details on using hashes here.

File details

Details for the file autotyping-21.12.0-py3-none-any.whl.

File metadata

  • Download URL: autotyping-21.12.0-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.8.3 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.10

File hashes

Hashes for autotyping-21.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 789ae2b74897aabfb138b705169b4bb19ab0dfc8c66a5b5fc22dcecca714dfae
MD5 dc0a8b071d3d7b0f7ab7e67caec10879
BLAKE2b-256 2b94497fda81d4b546dcee060bd151a6089facd7079cfe77fd0a27a75e24eef2

See more details on using hashes here.

Supported by

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