From 7897678777982e942aa6c22b823aced7ffd07095 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 11 Apr 2017 23:44:17 +0900 Subject: [PATCH] Fix #3618: autodoc crashes with tupled arguments --- CHANGES | 1 + sphinx/ext/autodoc.py | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index e192bf5b7..4035a50ce 100644 --- a/CHANGES +++ b/CHANGES @@ -14,6 +14,7 @@ Bugs fixed ---------- * #3614: Sphinx crashes with requests-2.5.0 +* #3618: autodoc crashes with tupled arguments Testing -------- diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 9e513276f..9203e673b 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -380,10 +380,19 @@ def formatargspec(function, args, varargs=None, varkw=None, defaults=None, for i, arg in enumerate(args): arg_fd = StringIO() - 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])) + if isinstance(arg, list): + # support tupled arguments list (only for py2): def foo((x, y)) + arg_fd.write('(') + 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()) if varargs: