I'm looking for a tool that will automatically modernize my python code. Something that will take a python version as configuration, and automatically modernize the code for that version.
For example, with python 3.9+ we can convert all
from typing import List
my_list:List[str] = []
to
my_list:list[str] = []
And with python 3.10+ we can convert all
from typing import Optional
my_optional: Optional[str] = None
to
my_optional: str | None = None
I'm sure there are other syntax updates that can also be done.
Is there some tool that does this? I've looked into mypy, black, and flake8 and I can't see anything that will convert automatically for me, or even warn me about these so that I can update them manually.
pyupgrade with the --py311-plus
option seems to do what I want.
It seems to leave in the unused imports, but using autoflake I can correct them.
Another option is ruff which does EXACTLY what I want.