Skip to content

Commit

Permalink
Merge pull request #7637 from tk0miya/suppress_system_defined_TypeVars
Browse files Browse the repository at this point in the history
Suppress arguments if all system defined TypeVars on py39
  • Loading branch information
tk0miya committed May 9, 2020
2 parents 62711bc + a48da56 commit f37fa14
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGES
Expand Up @@ -86,6 +86,7 @@ Bugs fixed
* #7562: autodoc: a typehint contains spaces is wrongly rendered under
autodoc_typehints='description' mode
* #7551: autodoc: failed to import nested class
* #7637: autodoc: system defined TypeVars are shown in Python 3.9
* #7551: autosummary: a nested class is indexed as non-nested class
* #7535: sphinx-autogen: crashes when custom template uses inheritance
* #7536: sphinx-autogen: crashes when template uses i18n feature
Expand Down
9 changes: 8 additions & 1 deletion sphinx/util/typing.py
Expand Up @@ -39,6 +39,12 @@
Inventory = Dict[str, Dict[str, Tuple[str, str, str, str]]]


def is_system_TypeVar(typ: Any) -> bool:
"""Check *typ* is system defined TypeVar."""
modname = getattr(typ, '__module__', '')
return modname == 'typing' and isinstance(typ, TypeVar) # type: ignore


def stringify(annotation: Any) -> str:
"""Stringify type annotation object."""
if isinstance(annotation, str):
Expand Down Expand Up @@ -96,7 +102,8 @@ def _stringify_py37(annotation: Any) -> str:
return '%s[[%s], %s]' % (qualname, args, returns)
elif str(annotation).startswith('typing.Annotated'): # for py39+
return stringify(annotation.__args__[0])
elif getattr(annotation, '_special', False):
elif all(is_system_TypeVar(a) for a in annotation.__args__):
# Suppress arguments if all system defined TypeVars (ex. Dict[KT, VT])
return qualname
else:
args = ', '.join(stringify(a) for a in annotation.__args__)
Expand Down

0 comments on commit f37fa14

Please sign in to comment.