lines = [(prefix + line).rstrip() for line in text.split('\n')]
return '\n'.join(lines)
+ def _format_doc(self, text, width=68):
+ """Wraps the single-line summary if it is too long."""
+ if not text: return ''
+ lines = text.split('\n', 2)
+ if len(lines) > 1 and lines[1]:
+ return text
+ lines[:1] = textwrap.wrap(lines[0], width,
+ break_long_words=False,
+ break_on_hyphens=False)
+ return '\n'.join(lines)
+
def section(self, title, contents):
"""Format a section with a given heading."""
clean_contents = self.indent(contents).rstrip()
doc = getdoc(object)
if doc:
+ doc = self._format_doc(doc)
push(doc + '\n')
# List the mro, if non-trivial.
return decl + '\n'
else:
doc = getdoc(object) or ''
+ doc = self._format_doc(doc)
return decl + '\n' + (doc and self.indent(doc).rstrip() + '\n')
def docdata(self, object, name=None, mod=None, cl=None, *ignored):
push('\n')
doc = getdoc(object) or ''
if doc:
+ doc = self._format_doc(doc)
push(self.indent(doc))
push('\n')
return ''.join(results)
if not doc:
doc = getdoc(object)
if doc:
- line += '\n' + self.indent(str(doc)) + '\n'
+ doc = self._format_doc(str(doc))
+ line += '\n' + self.indent(doc) + '\n'
return line
class _PlainTextDoc(TextDoc):
--- /dev/null
+class C:
+ """This is a class summary that consists of a very long single line, exceeding the recommended PEP 8 limit.
+
+ The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+ """
+ def meth(self):
+ """This is a method summary that consists of a very long single line, exceeding the recommended PEP 8 limit.
+
+ The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+ """
+
+ @property
+ def prop(self):
+ """This is a property summary that consists of a very long single line, exceeding the recommended PEP 8 limit.
+
+ The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+ """
+
+def func(self):
+ """This is a function summary that consists of a very long single line, exceeding the recommended PEP 8 limit.
+
+ The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+ """
+
+data = C()
+data.__doc__ = """This is a data summary that consists of a very long single line, exceeding the recommended PEP 8 limit.
+
+The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+"""
<lambda> lambda very_long_parameter_name_that_should_not_fit_into_a_single_line, second_very_long_parameter_name
''' % __name__)
+ @requires_docstrings
+ def test_long_summaries(self):
+ from . import longsummary
+ doc = pydoc.render_doc(longsummary)
+ doc = clean_text(doc)
+ self.assertEqual(doc, '''Python Library Documentation: module test.test_pydoc.longsummary in test.test_pydoc
+
+NAME
+ test.test_pydoc.longsummary
+
+CLASSES
+ builtins.object
+ C
+
+ class C(builtins.object)
+ | This is a class summary that consists of a very long single line,
+ | exceeding the recommended PEP 8 limit.
+ |
+ | The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+ |
+ | Methods defined here:
+ |
+ | meth(self)
+ | This is a method summary that consists of a very long single line,
+ | exceeding the recommended PEP 8 limit.
+ |
+ | The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+ |
+ | ----------------------------------------------------------------------
+ | Readonly properties defined here:
+ |
+ | prop
+ | This is a property summary that consists of a very long single line,
+ | exceeding the recommended PEP 8 limit.
+ |
+ | The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+ |
+ | ----------------------------------------------------------------------
+ | Data descriptors defined here:
+ |
+ | __dict__
+ | dictionary for instance variables
+ |
+ | __weakref__
+ | list of weak references to the object
+
+FUNCTIONS
+ func(self)
+ This is a function summary that consists of a very long single line,
+ exceeding the recommended PEP 8 limit.
+
+ The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+
+DATA
+ data = <test.test_pydoc.longsummary.C object>
+ This is a data summary that consists of a very long single line,
+ exceeding the recommended PEP 8 limit.
+
+ The rest of the docstring body, separated from the summary by a blank line, can also contain very long lines.
+
+FILE
+ %s
+
+''' % inspect.getabsfile(longsummary))
+
def test__future__imports(self):
# __future__ features are excluded from module help,
# except when it's the __future__ module itself
--- /dev/null
+:mod:`pydoc` now wraps long single-line summary in text output.