mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
bpo-36287: Make ast.dump() not output optional fields and attributes with default values. (GH-18843)
The default values for optional fields and attributes of AST nodes are now set as class attributes (e.g. Constant.kind is set to None).
This commit is contained in:
parent
85f5a69ae1
commit
b7e9525f9c
6 changed files with 226 additions and 134 deletions
|
|
@ -353,9 +353,11 @@ class AST_Tests(unittest.TestCase):
|
|||
'kw_defaults', 'kwarg', 'defaults'))
|
||||
|
||||
with self.assertRaises(AttributeError):
|
||||
x.vararg
|
||||
x.args
|
||||
self.assertIsNone(x.vararg)
|
||||
|
||||
x = ast.arguments(*range(1, 8))
|
||||
self.assertEqual(x.args, 2)
|
||||
self.assertEqual(x.vararg, 3)
|
||||
|
||||
def test_field_attr_writable(self):
|
||||
|
|
@ -650,18 +652,18 @@ class ASTHelpers_Test(unittest.TestCase):
|
|||
node = ast.parse('spam(eggs, "and cheese")')
|
||||
self.assertEqual(ast.dump(node),
|
||||
"Module(body=[Expr(value=Call(func=Name(id='spam', ctx=Load()), "
|
||||
"args=[Name(id='eggs', ctx=Load()), Constant(value='and cheese', kind=None)], "
|
||||
"args=[Name(id='eggs', ctx=Load()), Constant(value='and cheese')], "
|
||||
"keywords=[]))], type_ignores=[])"
|
||||
)
|
||||
self.assertEqual(ast.dump(node, annotate_fields=False),
|
||||
"Module([Expr(Call(Name('spam', Load()), [Name('eggs', Load()), "
|
||||
"Constant('and cheese', None)], []))], [])"
|
||||
"Constant('and cheese')], []))], [])"
|
||||
)
|
||||
self.assertEqual(ast.dump(node, include_attributes=True),
|
||||
"Module(body=[Expr(value=Call(func=Name(id='spam', ctx=Load(), "
|
||||
"lineno=1, col_offset=0, end_lineno=1, end_col_offset=4), "
|
||||
"args=[Name(id='eggs', ctx=Load(), lineno=1, col_offset=5, "
|
||||
"end_lineno=1, end_col_offset=9), Constant(value='and cheese', kind=None, "
|
||||
"end_lineno=1, end_col_offset=9), Constant(value='and cheese', "
|
||||
"lineno=1, col_offset=11, end_lineno=1, end_col_offset=23)], keywords=[], "
|
||||
"lineno=1, col_offset=0, end_lineno=1, end_col_offset=24), "
|
||||
"lineno=1, col_offset=0, end_lineno=1, end_col_offset=24)], type_ignores=[])"
|
||||
|
|
@ -677,7 +679,7 @@ Module(
|
|||
func=Name(id='spam', ctx=Load()),
|
||||
args=[
|
||||
Name(id='eggs', ctx=Load()),
|
||||
Constant(value='and cheese', kind=None)],
|
||||
Constant(value='and cheese')],
|
||||
keywords=[]))],
|
||||
type_ignores=[])""")
|
||||
self.assertEqual(ast.dump(node, annotate_fields=False, indent='\t'), """\
|
||||
|
|
@ -688,7 +690,7 @@ Module(
|
|||
\t\t\t\tName('spam', Load()),
|
||||
\t\t\t\t[
|
||||
\t\t\t\t\tName('eggs', Load()),
|
||||
\t\t\t\t\tConstant('and cheese', None)],
|
||||
\t\t\t\t\tConstant('and cheese')],
|
||||
\t\t\t\t[]))],
|
||||
\t[])""")
|
||||
self.assertEqual(ast.dump(node, include_attributes=True, indent=3), """\
|
||||
|
|
@ -713,7 +715,6 @@ Module(
|
|||
end_col_offset=9),
|
||||
Constant(
|
||||
value='and cheese',
|
||||
kind=None,
|
||||
lineno=1,
|
||||
col_offset=11,
|
||||
end_lineno=1,
|
||||
|
|
@ -762,7 +763,7 @@ Module(
|
|||
src = ast.parse('1 + 1', mode='eval')
|
||||
src.body.right = ast.copy_location(ast.Num(2), src.body.right)
|
||||
self.assertEqual(ast.dump(src, include_attributes=True),
|
||||
'Expression(body=BinOp(left=Constant(value=1, kind=None, lineno=1, col_offset=0, '
|
||||
'Expression(body=BinOp(left=Constant(value=1, lineno=1, col_offset=0, '
|
||||
'end_lineno=1, end_col_offset=1), op=Add(), right=Constant(value=2, '
|
||||
'lineno=1, col_offset=4, end_lineno=1, end_col_offset=5), lineno=1, '
|
||||
'col_offset=0, end_lineno=1, end_col_offset=5))'
|
||||
|
|
@ -777,7 +778,7 @@ Module(
|
|||
self.assertEqual(ast.dump(src, include_attributes=True),
|
||||
"Module(body=[Expr(value=Call(func=Name(id='write', ctx=Load(), "
|
||||
"lineno=1, col_offset=0, end_lineno=1, end_col_offset=5), "
|
||||
"args=[Constant(value='spam', kind=None, lineno=1, col_offset=6, end_lineno=1, "
|
||||
"args=[Constant(value='spam', lineno=1, col_offset=6, end_lineno=1, "
|
||||
"end_col_offset=12)], keywords=[], lineno=1, col_offset=0, end_lineno=1, "
|
||||
"end_col_offset=13), lineno=1, col_offset=0, end_lineno=1, "
|
||||
"end_col_offset=13), Expr(value=Call(func=Name(id='spam', ctx=Load(), "
|
||||
|
|
@ -792,8 +793,8 @@ Module(
|
|||
src = ast.parse('1 + 1', mode='eval')
|
||||
self.assertEqual(ast.increment_lineno(src, n=3), src)
|
||||
self.assertEqual(ast.dump(src, include_attributes=True),
|
||||
'Expression(body=BinOp(left=Constant(value=1, kind=None, lineno=4, col_offset=0, '
|
||||
'end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1, kind=None, '
|
||||
'Expression(body=BinOp(left=Constant(value=1, lineno=4, col_offset=0, '
|
||||
'end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1, '
|
||||
'lineno=4, col_offset=4, end_lineno=4, end_col_offset=5), lineno=4, '
|
||||
'col_offset=0, end_lineno=4, end_col_offset=5))'
|
||||
)
|
||||
|
|
@ -801,8 +802,8 @@ Module(
|
|||
src = ast.parse('1 + 1', mode='eval')
|
||||
self.assertEqual(ast.increment_lineno(src.body, n=3), src.body)
|
||||
self.assertEqual(ast.dump(src, include_attributes=True),
|
||||
'Expression(body=BinOp(left=Constant(value=1, kind=None, lineno=4, col_offset=0, '
|
||||
'end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1, kind=None, '
|
||||
'Expression(body=BinOp(left=Constant(value=1, lineno=4, col_offset=0, '
|
||||
'end_lineno=4, end_col_offset=1), op=Add(), right=Constant(value=1, '
|
||||
'lineno=4, col_offset=4, end_lineno=4, end_col_offset=5), lineno=4, '
|
||||
'col_offset=0, end_lineno=4, end_col_offset=5))'
|
||||
)
|
||||
|
|
@ -821,7 +822,7 @@ Module(
|
|||
self.assertEqual(next(iterator).value, 23)
|
||||
self.assertEqual(next(iterator).value, 42)
|
||||
self.assertEqual(ast.dump(next(iterator)),
|
||||
"keyword(arg='eggs', value=Constant(value='leek', kind=None))"
|
||||
"keyword(arg='eggs', value=Constant(value='leek'))"
|
||||
)
|
||||
|
||||
def test_get_docstring(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue