From f189cdd4f5d9fe21cf7944b7463050df940acbc1 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Fri, 27 Mar 2026 15:12:01 +0200 Subject: [PATCH 1/2] Move recursive_indent calculation into helper --- Lib/pprint.py | 77 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/Lib/pprint.py b/Lib/pprint.py index b66ccb6c96e80a..6bc6416fc1739b 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -227,6 +227,11 @@ def _format_block_end(self, end_str, indent): return f"\n{' ' * indent}{end_str}" return end_str + def _child_indent(self, indent, prefix_len): + if self._expand: + return indent + return indent + prefix_len + def _pprint_dataclass(self, object, stream, indent, allowance, context, level): # Lazy import to improve module import time from dataclasses import fields as dataclass_fields @@ -282,12 +287,14 @@ def _pprint_ordered_dict(self, object, stream, indent, allowance, context, level return cls = object.__class__ stream.write(cls.__name__ + '(') - if self._expand: - recursive_indent = indent - else: - recursive_indent = indent + len(cls.__name__) + 1 - self._format(list(object.items()), stream, recursive_indent, - allowance + 1, context, level) + self._format( + list(object.items()), + stream, + self._child_indent(indent, len(cls.__name__) + 1), + allowance + 1, + context, + level, + ) stream.write(')') _dispatch[_collections.OrderedDict.__repr__] = _pprint_ordered_dict @@ -467,12 +474,14 @@ def _pprint_bytearray(self, object, stream, indent, allowance, context, level): def _pprint_mappingproxy(self, object, stream, indent, allowance, context, level): stream.write('mappingproxy(') - if self._expand: - recursive_indent = indent - else: - recursive_indent = indent + 13 - self._format(object.copy(), stream, recursive_indent, allowance + 1, - context, level) + self._format( + object.copy(), + stream, + self._child_indent(indent, 13), + allowance + 1, + context, + level, + ) stream.write(')') _dispatch[_types.MappingProxyType.__repr__] = _pprint_mappingproxy @@ -507,13 +516,14 @@ def _format_dict_items(self, items, stream, indent, allowance, context, rep = self._repr(key, context, level) write(rep) write(': ') - if self._expand: - recursive_indent = indent - else: - recursive_indent = indent + len(rep) + 2 - self._format(ent, stream, recursive_indent, - allowance if last else 1, - context, level) + self._format( + ent, + stream, + self._child_indent(indent, len(rep) + 2), + allowance if last else 1, + context, + level, + ) if not last: write(delimnl) @@ -530,13 +540,14 @@ def _format_namespace_items(self, items, stream, indent, allowance, context, lev # recursive dataclass repr. write("...") else: - if self._expand: - recursive_indent = indent - else: - recursive_indent = indent + len(key) + 1 - self._format(ent, stream, recursive_indent, - allowance if last else 1, - context, level) + self._format( + ent, + stream, + self._child_indent(indent, len(key) + 1), + allowance if last else 1, + context, + level, + ) if not last: write(delimnl) @@ -627,12 +638,14 @@ def _pprint_counter(self, object, stream, indent, allowance, context, level): if self._indent_per_level > 0 and self._expand: stream.write(self._indent_per_level * ' ') items = object.most_common() - if self._expand: - recursive_indent = indent - else: - recursive_indent = indent + len(cls.__name__) + 1 - self._format_dict_items(items, stream, recursive_indent, allowance + 2, - context, level) + self._format_dict_items( + items, + stream, + self._child_indent(indent, len(cls.__name__) + 1), + allowance + 2, + context, + level, + ) stream.write(self._format_block_end('})', indent)) _dispatch[_collections.Counter.__repr__] = _pprint_counter From 9cdf93894370a431ad10adb1fcde65a80637c03c Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Fri, 27 Mar 2026 15:15:27 +0200 Subject: [PATCH 2/2] Move indent padding into helper --- Lib/pprint.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Lib/pprint.py b/Lib/pprint.py index 6bc6416fc1739b..230cdff2309b4b 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -232,6 +232,13 @@ def _child_indent(self, indent, prefix_len): return indent return indent + prefix_len + def _write_indent_padding(self, write): + if self._expand: + if self._indent_per_level > 0: + write(self._indent_per_level * " ") + elif self._indent_per_level > 1: + write((self._indent_per_level - 1) * " ") + def _pprint_dataclass(self, object, stream, indent, allowance, context, level): # Lazy import to improve module import time from dataclasses import fields as dataclass_fields @@ -251,10 +258,7 @@ def _pprint_dataclass(self, object, stream, indent, allowance, context, level): def _pprint_dict(self, object, stream, indent, allowance, context, level): write = stream.write write(self._format_block_start('{', indent)) - if self._indent_per_level > 1 and not self._expand: - write((self._indent_per_level - 1) * ' ') - if self._indent_per_level > 0 and self._expand: - write(self._indent_per_level * ' ') + self._write_indent_padding(write) length = len(object) if length: if self._sort_dicts: @@ -554,10 +558,7 @@ def _format_namespace_items(self, items, stream, indent, allowance, context, lev def _format_items(self, items, stream, indent, allowance, context, level): write = stream.write indent += self._indent_per_level - if self._indent_per_level > 1 and not self._expand: - write((self._indent_per_level - 1) * ' ') - if self._indent_per_level > 0 and self._expand: - write(self._indent_per_level * ' ') + self._write_indent_padding(write) delimnl = ',\n' + ' ' * indent delim = '' width = max_width = self._width - indent + 1 @@ -633,10 +634,7 @@ def _pprint_counter(self, object, stream, indent, allowance, context, level): return cls = object.__class__ stream.write(self._format_block_start(cls.__name__ + '({', indent)) - if self._indent_per_level > 1 and not self._expand: - stream.write((self._indent_per_level - 1) * ' ') - if self._indent_per_level > 0 and self._expand: - stream.write(self._indent_per_level * ' ') + self._write_indent_padding(stream.write) items = object.most_common() self._format_dict_items( items,