diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 9c6575f52..c15726b48 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -862,7 +862,7 @@ class DocstringSignatureMixin(object): """ def _find_signature(self, encoding=None): - docstrings = Documenter.get_doc(self, encoding, 2) + docstrings = Documenter.get_doc(self, encoding) if len(docstrings) != 1: return doclines = docstrings[0] @@ -877,6 +877,9 @@ class DocstringSignatureMixin(object): # the base name must match ours if not self.objpath or base != self.objpath[-1]: return + # re-prepare docstring to ignore indentation after signature + docstrings = Documenter.get_doc(self, encoding, 2) + doclines = docstrings[0] # ok, now jump over remaining empty lines and set the remaining # lines as the new doclines i = 1 diff --git a/tests/test_autodoc.py b/tests/test_autodoc.py index 965064c37..6dedaad8f 100644 --- a/tests/test_autodoc.py +++ b/tests/test_autodoc.py @@ -518,6 +518,12 @@ def test_generate(): 'test_autodoc.DocstringSig.meth') assert_result_contains( ' rest of docstring', 'method', 'test_autodoc.DocstringSig.meth') + assert_result_contains( + '.. py:method:: DocstringSig.meth2()', 'method', + 'test_autodoc.DocstringSig.meth2') + assert_result_contains( + ' indented line', 'method', + 'test_autodoc.DocstringSig.meth2') assert_result_contains( '.. py:classmethod:: Class.moore(a, e, f) -> happiness', 'method', 'test_autodoc.Class.moore') @@ -660,6 +666,13 @@ First line of docstring rest of docstring """ + def meth2(self): + """First line, no signature + Second line followed by indentation:: + + indented line + """ + class StrRepr(str): def __repr__(self): return self diff --git a/tests/test_only_directive.py b/tests/test_only_directive.py index 10683613c..2396046e4 100644 --- a/tests/test_only_directive.py +++ b/tests/test_only_directive.py @@ -39,7 +39,6 @@ def test_sectioning(app): def testsects(prefix, sects, indent=0): title = sects[0] - sprint(' ' * indent + title) parent_num = title.split()[0] assert prefix == parent_num, \ 'Section out of place: %r' % title @@ -56,7 +55,6 @@ def test_sectioning(app): parts = [getsects(n) for n in filter(lambda n: isinstance(n, nodes.section), doctree.children)] - sprint('\nChecking headings in only.txt:') for i, s in enumerate(parts): testsects(str(i+1) + '.', s, 4) assert len(parts) == 4, 'Expected 4 document level headings, got:\n%s' % \