Fix #3618: autodoc crashes with tupled arguments

This commit is contained in:
Takeshi KOMIYA 2017-04-11 23:44:17 +09:00
parent 317c86e9b9
commit 7897678777
2 changed files with 14 additions and 4 deletions

View File

@ -14,6 +14,7 @@ Bugs fixed
---------- ----------
* #3614: Sphinx crashes with requests-2.5.0 * #3614: Sphinx crashes with requests-2.5.0
* #3618: autodoc crashes with tupled arguments
Testing Testing
-------- --------

View File

@ -380,10 +380,19 @@ def formatargspec(function, args, varargs=None, varkw=None, defaults=None,
for i, arg in enumerate(args): for i, arg in enumerate(args):
arg_fd = StringIO() arg_fd = StringIO()
arg_fd.write(format_arg_with_annotation(arg)) if isinstance(arg, list):
if defaults and i >= defaults_start: # support tupled arguments list (only for py2): def foo((x, y))
arg_fd.write(' = ' if arg in annotations else '=') arg_fd.write('(')
arg_fd.write(object_description(defaults[i - defaults_start])) arg_fd.write(format_arg_with_annotation(arg[0]))
for param in arg[1:]:
arg_fd.write(', ')
arg_fd.write(format_arg_with_annotation(param))
arg_fd.write(')')
else:
arg_fd.write(format_arg_with_annotation(arg))
if defaults and i >= defaults_start:
arg_fd.write(' = ' if arg in annotations else '=')
arg_fd.write(object_description(defaults[i - defaults_start]))
formatted.append(arg_fd.getvalue()) formatted.append(arg_fd.getvalue())
if varargs: if varargs: