Support for Python3.9 type hint syntax #2795
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
In python 3.9 and onwards, some generics are type hinted differently (Dict, List should be lowercase dict, list instead) as well as some syntax changes (Optional[Type] syntax replaced with Type | None syntax, along with Union[Type1, Type2] replaced with Type1 | Type2)
I added a new option to pythonOptions.features, a boolean "builtinGenerics". In python 3.9 it's enabled, and disabled for the previous versions. I use pretty simple logic to do it, just a couple of if statements and ternary operators to account for the new syntax.
Some ways quotes are handled around types was changed to support wrapping around unions. (see _suppressQuotes in PythonRenderer's
namedType
method)Motivation and Context
To keep up with newer Python syntax.
How Has This Been Tested?
Tested with python 3.7 and python 3.9 using the scripted tests that use mypy (confirms that the syntax is valid, and that with python 3.7, it's not trying to use any of the new syntax) along with looking at the outputs manually and confirming that 3.9 uses the newer syntax.