Skip to content

Commit 386e6d8

Browse files
authored
betting wrapping of string and bytes (#32)
1 parent 9ae804a commit 386e6d8

File tree

2 files changed

+24
-21
lines changed

2 files changed

+24
-21
lines changed

devtools/prettier.py

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ def __init__(self,
5050
self._width = width
5151
self._type_lookup = [
5252
(dict, self._format_dict),
53-
(str, self._format_str),
54-
(bytes, self._format_bytes),
53+
(str, self._format_str_bytes),
54+
(bytes, self._format_str_bytes),
5555
(tuple, self._format_tuples),
5656
((list, set, frozenset), self._format_list_like),
5757
(Generator, self._format_generators),
@@ -125,11 +125,11 @@ def _format_tuples(self, value: tuple, value_repr: str, indent_current: int, ind
125125
# normal tuples are just like other similar iterables
126126
return self._format_list_like(value, value_repr, indent_current, indent_new)
127127

128-
def _format_str(self, value: str, value_repr: str, indent_current: int, indent_new: int):
128+
def _format_str_bytes(self, value: Union[str, bytes], value_repr: str, indent_current: int, indent_new: int):
129129
if self._repr_strings:
130130
self._stream.write(value_repr)
131131
else:
132-
lines = value.splitlines(True)
132+
lines = list(self._wrap_lines(value, indent_new))
133133
if len(lines) > 1:
134134
self._stream.write('(\n')
135135
prefix = indent_new * self._c
@@ -139,20 +139,14 @@ def _format_str(self, value: str, value_repr: str, indent_current: int, indent_n
139139
else:
140140
self._stream.write(value_repr)
141141

142-
def _format_bytes(self, value: bytes, value_repr: str, indent_current: int, indent_new: int):
143-
wrap = self._width - indent_new - 3
144-
if len(value) < wrap:
145-
self._stream.write(value_repr)
146-
else:
147-
self._stream.write('(\n')
148-
prefix = indent_new * self._c
149-
start, end = 0, wrap
150-
while start < len(value):
151-
line = value[start:end]
152-
self._stream.write(prefix + repr(line) + '\n')
153-
start = end
154-
end += wrap
155-
self._stream.write(indent_current * self._c + ')')
142+
def _wrap_lines(self, s, indent_new):
143+
width = self._width - indent_new - 3
144+
for line in s.splitlines(True):
145+
start = 0
146+
for pos in range(width, len(line), width):
147+
yield line[start:pos]
148+
start = pos
149+
yield line[start:]
156150

157151
def _format_generators(self, value: Generator, value_repr: str, indent_current: int, indent_new: int):
158152
if self._repr_generators:

tests/test_prettier.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,20 @@ def test_generator_no_yield():
104104
def test_str():
105105
pformat_ = PrettyFormat(width=12)
106106
v = pformat_(string.ascii_lowercase + '\n' + string.digits)
107+
print(repr(v))
107108
assert v == (
108109
"(\n"
109-
" 'abcdefghijklmnopqrstuvwxyz\\n'\n"
110-
" '0123456789'\n"
111-
")")
110+
" 'abcde'\n"
111+
" 'fghij'\n"
112+
" 'klmno'\n"
113+
" 'pqrst'\n"
114+
" 'uvwxy'\n"
115+
" 'z\\n"
116+
"'\n"
117+
" '01234'\n"
118+
" '56789'\n"
119+
")"
120+
)
112121

113122

114123
def test_str_repr():

0 commit comments

Comments
 (0)