Skip to content

Commit fe0e78a

Browse files
committed
Paper over the differences in newline and indent of docstrings between Python versions
1 parent 6b4ba4a commit fe0e78a

2 files changed

Lines changed: 14 additions & 10 deletions

File tree

src/attr/_make.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import itertools
1111
import linecache
1212
import sys
13+
import textwrap
1314
import types
1415
import unicodedata
1516
import weakref
@@ -567,17 +568,21 @@ def _make_cached_property_uncached(original_cached_property_func, cls):
567568
doc = original_cached_property_func.__doc__
568569
doc_lines = []
569570
if doc is not None:
570-
doc_lines = doc.splitlines(True)
571+
doc_lines = doc.splitlines()
571572
if len(doc_lines) == 1:
572573
doc_lines = [' """' + doc_lines[0] + '"""']
573574
else:
574-
doc_lines[0] = ' """' + doc_lines[0].rstrip()
575+
line0 = ' """' + doc_lines[0].strip()
575576
for i, line in enumerate(doc_lines[1:], start=1):
576-
if line.strip():
577-
doc_lines[i] = " " + line.rstrip()
577+
line = line.strip()
578+
if line:
579+
doc_lines[i] = " " + line
578580
else:
579-
doc_lines[i] = line.rstrip()
580-
doc_lines.append(' """')
581+
doc_lines[i] = ""
582+
if len(doc_lines) > 2 and doc_lines[-2] == doc_lines[-1] == "":
583+
doc_lines = [line0] + doc_lines[1:-1] + [' """']
584+
else:
585+
doc_lines = [line0] + doc_lines[1:] + [' """']
581586

582587
annotation = inspect.signature(
583588
original_cached_property_func

tests/test_slots.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -788,10 +788,9 @@ def f(self):
788788
"""
789789
return self.x
790790

791-
assert (
792-
textwrap.dedent(A.f.__doc__)
793-
== """This function is so well documented,\n\nI had to put newlines in\n\n"""
794-
)
791+
docstring_lines = A.f.__doc__.splitlines()
792+
docstring_lines_dedented = [line.lstrip() for line in docstring_lines]
793+
assert docstring_lines_dedented[:4] == ["This function is so well documented,", "", "I had to put newlines in", ""]
795794

796795

797796
def test_slots_cached_property_class_does_not_have__dict__():

0 commit comments

Comments
 (0)