From b014c34586beeeeb9522769b4d7deea8ac5ba75d Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Wed, 2 Nov 2016 20:06:30 +0900 Subject: [PATCH] Fix #3111: autodoc crashes with python3.6b3 Since 3.6b3, structure of typing.Callable has been changed. --- sphinx/ext/autodoc.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 890f65646..98783cfdb 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -270,6 +270,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) @@ -288,7 +290,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: