auto-optional: adds the Optional type-hint to arguments where the default value is None
Source Code: github.com/luttik/auto-optional
What does auto-optional do¶
The basic purpose of auto-optional is ensuring that whenever a default argument is
None the type annotation is Optional.
def foo(bar: str = None): ...
Would turn into
from typing import Optional def foo(bar: Optional[str] = None): ...
Why would you want this¶
- Easily modify external libraries that didn't pay attention to proper use of optional to improve mypy linting.
- Force consistency in your own code-base:
Noneparameter implies an
- Explicit is better than implicit — pep 20
In the media:¶
auto-optional was covered on PythonBytes #251
I love these little tools that you can run against your code that will just reformat them to be better.
— Michael Kennedy
pip install auto-optional.
After installing you can run auto-optional using
(if no path is provided it'll process the current working directory).
You can run auto-optional via pre-commit.
Add the following text to your repositories
repos: - repo: https://github.com/luttik/auto-optional rev: v0.2.0 # The version of auto-optional to use hooks: - id: auto-optional
Things of note¶
Things that are handled well¶
- The alternatives to
Optionalare supported, that means both;
x | None(allowed since python 3.10+).
- Existing imports are reused.
from typing import ...statements are properly handled.
Things that need improvement¶
For all these points you can leave a thumbs-up if you want it. Also, I welcome pull-requests for these issues.