summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sphinx/ext/autodoc.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py
index 967beada0..208a228f0 100644
--- a/sphinx/ext/autodoc.py
+++ b/sphinx/ext/autodoc.py
@@ -263,6 +263,8 @@ def format_annotation(annotation):
"""
if typing and isinstance(annotation, typing.TypeVar):
return annotation.__name__
+ if annotation == Ellipsis:
+ return '...'
if not isinstance(annotation, type):
return repr(annotation)
@@ -281,7 +283,12 @@ def format_annotation(annotation):
# arguments are in __parameters__.
params = None
if hasattr(annotation, '__args__'):
- params = annotation.__args__
+ if len(annotation.__args__) <= 2:
+ params = annotation.__args__
+ else: # typing.Callable
+ args = ', '.join(format_annotation(a) for a in annotation.__args__[:-1])
+ result = format_annotation(annotation.__args__[-1])
+ return '%s[[%s], %s]' % (qualified_name, args, result)
elif hasattr(annotation, '__parameters__'):
params = annotation.__parameters__
if params is not None: