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 themodules
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 ofTrue
orFalse
--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 formfoo=None
, addBaz
, imported frombar
, as the type. For example, use--annotate-optional uid:my_types.Uid
to annotate anyuid
in your codebase with aNone
default asOptional[my_types.Uid]
.--annotate-named-param foo:bar.Baz
: annotate any parameter with no default that is namedfoo
withbar.Baz
. For example, use--annotate-named-param uid:my_types.Uid
to annotate anyuid
parameter in your codebase with no default asmy_types.Uid
.
- Annotating magical methods:
--annotate-magics
: add type annotation to certain magic methods. Currently this does the following:__str__
returnsstr
__repr__
returnsstr
__len__
returnsint
__init__
returnsNone
__del__
returnsNone
__bool__
returnsbool
__bytes__
returnsbytes
__format__
returnsstr
__contains__
returnsbool
__complex__
returnscomplex
__int__
returnsint
__float__
returnsfloat
__index__
returnsint
__exit__
: the three parameters areOptional[Type[BaseException]]
,Optional[BaseException]
, andOptional[TracebackType]
__aexit__
: same as__exit__
--annotate-imprecise-magics
: add imprecise type annotations for some additional magic methods. Currently this addstyping.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 hashes)
Built Distribution
Close
Hashes for autotyping-21.12.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 789ae2b74897aabfb138b705169b4bb19ab0dfc8c66a5b5fc22dcecca714dfae |
|
MD5 | dc0a8b071d3d7b0f7ab7e67caec10879 |
|
BLAKE2b-256 | 2b94497fda81d4b546dcee060bd151a6089facd7079cfe77fd0a27a75e24eef2 |