From: Serhiy Storchaka Date: Fri, 30 May 2025 15:48:48 +0000 (+0300) Subject: [3.13] gh-134718: Fix ast.dump() for empty non-default values (GH-134926) (GH-134936) X-Git-Tag: v3.13.4~18 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=681856c1949418d7f0a688370e104461a7fc5d86;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-134718: Fix ast.dump() for empty non-default values (GH-134926) (GH-134936) (cherry picked from commit cc344e8dd0a6fdc83a032c229f9b3cf53f76a887) --- diff --git a/Lib/ast.py b/Lib/ast.py index 1a88d23c5852..37b20206b8af 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -151,18 +151,16 @@ def dump( if value is None and getattr(cls, name, ...) is None: keywords = True continue - if ( - not show_empty - and (value is None or value == []) - # Special cases: - # `Constant(value=None)` and `MatchSingleton(value=None)` - and not isinstance(node, (Constant, MatchSingleton)) - ): - args_buffer.append(repr(value)) - continue - elif not keywords: - args.extend(args_buffer) - args_buffer = [] + if not show_empty: + if value == []: + field_type = cls._field_types.get(name, object) + if getattr(field_type, '__origin__', ...) is list: + if not keywords: + args_buffer.append(repr(value)) + continue + if not keywords: + args.extend(args_buffer) + args_buffer = [] value, simple = _format(value, level) allsimple = allsimple and simple if keywords: diff --git a/Lib/test/test_ast/test_ast.py b/Lib/test/test_ast/test_ast.py index db2ea9f546eb..7cedb13e9235 100644 --- a/Lib/test/test_ast/test_ast.py +++ b/Lib/test/test_ast/test_ast.py @@ -1346,12 +1346,24 @@ Module( full="MatchSingleton(value=None)", ) + check_node( + ast.MatchSingleton(value=[]), + empty="MatchSingleton(value=[])", + full="MatchSingleton(value=[])", + ) + check_node( ast.Constant(value=None), empty="Constant(value=None)", full="Constant(value=None)", ) + check_node( + ast.Constant(value=[]), + empty="Constant(value=[])", + full="Constant(value=[])", + ) + check_node( ast.Constant(value=""), empty="Constant(value='')", diff --git a/Misc/NEWS.d/next/Library/2025-05-30-13-07-29.gh-issue-134718.9Qvhxn.rst b/Misc/NEWS.d/next/Library/2025-05-30-13-07-29.gh-issue-134718.9Qvhxn.rst new file mode 100644 index 000000000000..922ab168fdd0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-05-30-13-07-29.gh-issue-134718.9Qvhxn.rst @@ -0,0 +1,2 @@ +:func:`ast.dump` now only omits ``None`` and ``[]`` values if they are +default values.