summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2020-05-09 14:25:29 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2020-05-09 18:15:41 +0900
commit1fbfb7281e6298311fde3403558d6a8a3c03372f (patch)
tree1a85784258e57a31167443c056bac2cf1db541f5
parentd670214403eb09372ef5b2e1dd1cf04258b84e56 (diff)
downloadsphinx-git-1fbfb7281e6298311fde3403558d6a8a3c03372f.tar.gz
Suppress arguments if all system defined TypeVars on py39
-rw-r--r--CHANGES1
-rw-r--r--sphinx/util/typing.py9
2 files changed, 9 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index eaa9a0760..77e4189d7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,7 @@ Bugs fixed
----------
* #7567: autodoc: parametrized types are shown twice for generic types
+* #7637: autodoc: system defined TypeVars are shown in Python 3.9
* #7611: md5 fails when OpenSSL FIPS is enabled
Testing
diff --git a/sphinx/util/typing.py b/sphinx/util/typing.py
index 4644b1378..08bf7203b 100644
--- a/sphinx/util/typing.py
+++ b/sphinx/util/typing.py
@@ -39,6 +39,12 @@ TitleGetter = Callable[[nodes.Node], str]
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):
@@ -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__)