From b3aa4aa81bb7311136587c134f805b86d2435fb3 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 2 Jul 2014 00:09:11 +0900 Subject: [PATCH] * In autodoc, fix display of parameter defaults containing backslashes. Closes #1502 --- CHANGES | 1 + sphinx/ext/autodoc.py | 5 ++++- tests/test_autodoc.py | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 7133c9b83..cf43b420f 100644 --- a/CHANGES +++ b/CHANGES @@ -17,6 +17,7 @@ Bugs fixed * #1441: autosummary can't handle nested classes correctly. * #1499: With non-callable `setup` in a conf.py, now sphinx-build emits user-friendly error message. +* #1502: In autodoc, fix display of parameter defaults containing backslashes. Release 1.2.2 (released Mar 2, 2014) ==================================== diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 34197a39f..b6343171e 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -1225,7 +1225,10 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): argspec = getargspec(self.object) if argspec[0] and argspec[0][0] in ('cls', 'self'): del argspec[0][0] - return inspect.formatargspec(*argspec) + args = inspect.formatargspec(*argspec) + # escape backslashes for reST + args = args.replace('\\', '\\\\') + return args def document_members(self, all_members=False): pass diff --git a/tests/test_autodoc.py b/tests/test_autodoc.py index 0be694f38..a7b2cee0d 100644 --- a/tests/test_autodoc.py +++ b/tests/test_autodoc.py @@ -163,10 +163,13 @@ def test_format_signature(): # test for functions def f(a, b, c=1, **d): pass + def g(a='\n'): + pass assert formatsig('function', 'f', f, None, None) == '(a, b, c=1, **d)' assert formatsig('function', 'f', f, 'a, b, c, d', None) == '(a, b, c, d)' assert formatsig('function', 'f', f, None, 'None') == \ '(a, b, c=1, **d) -> None' + assert formatsig('function', 'g', g, None, None) == r"(a='\\n')" # test for classes class D: @@ -206,9 +209,12 @@ def test_format_signature(): pass def foo2(b, *c): pass + def foo3(self, d='\n'): + pass assert formatsig('method', 'H.foo', H.foo1, None, None) == '(b, *c)' assert formatsig('method', 'H.foo', H.foo1, 'a', None) == '(a)' assert formatsig('method', 'H.foo', H.foo2, None, None) == '(b, *c)' + assert formatsig('method', 'H.foo', H.foo3, None, None) == r"(d='\\n')" # test exception handling (exception is caught and args is '') assert formatsig('function', 'int', int, None, None) == ''