@@ -640,7 +640,8 @@ class Param(expr_context):
640640class _Precedence :
641641 """Precedence table that originated from python grammar."""
642642
643- TUPLE = auto ()
643+ NAMED_EXPR = auto () # <target> := <expr1>
644+ TUPLE = auto () # <expr1>, <expr2>
644645 YIELD = auto () # 'yield', 'yield from'
645646 TEST = auto () # 'if'-'else', 'lambda'
646647 OR = auto () # 'or'
@@ -716,9 +717,9 @@ def fill(self, text=""):
716717 self .maybe_newline ()
717718 self .write (" " * self ._indent + text )
718719
719- def write (self , text ):
720- """Append a piece of text """
721- self ._source .append (text )
720+ def write (self , * text ):
721+ """Add new source parts """
722+ self ._source .extend (text )
722723
723724 @contextmanager
724725 def buffered (self , buffer = None ):
@@ -838,7 +839,7 @@ def visit_Expr(self, node):
838839 self .traverse (node .value )
839840
840841 def visit_NamedExpr (self , node ):
841- with self .require_parens (_Precedence .TUPLE , node ):
842+ with self .require_parens (_Precedence .NAMED_EXPR , node ):
842843 self .set_precedence (_Precedence .ATOM , node .target , node .value )
843844 self .traverse (node .target )
844845 self .write (" := " )
@@ -859,6 +860,7 @@ def visit_ImportFrom(self, node):
859860 def visit_Assign (self , node ):
860861 self .fill ()
861862 for target in node .targets :
863+ self .set_precedence (_Precedence .TUPLE , target )
862864 self .traverse (target )
863865 self .write (" = " )
864866 self .traverse (node .value )
@@ -1030,6 +1032,7 @@ def visit_AsyncFor(self, node):
10301032
10311033 def _for_helper (self , fill , node ):
10321034 self .fill (fill )
1035+ self .set_precedence (_Precedence .TUPLE , node .target )
10331036 self .traverse (node .target )
10341037 self .write (" in " )
10351038 self .traverse (node .iter )
@@ -1315,7 +1318,7 @@ def write_item(item):
13151318 )
13161319
13171320 def visit_Tuple (self , node ):
1318- with self .delimit ( "(" , ")" ):
1321+ with self .require_parens ( _Precedence . TUPLE , node ):
13191322 self .items_view (self .traverse , node .elts )
13201323
13211324 unop = {"Invert" : "~" , "Not" : "not" , "UAdd" : "+" , "USub" : "-" }
@@ -1566,8 +1569,11 @@ def visit_keyword(self, node):
15661569
15671570 def visit_Lambda (self , node ):
15681571 with self .require_parens (_Precedence .TEST , node ):
1569- self .write ("lambda " )
1570- self .traverse (node .args )
1572+ self .write ("lambda" )
1573+ with self .buffered () as buffer :
1574+ self .traverse (node .args )
1575+ if buffer :
1576+ self .write (" " , * buffer )
15711577 self .write (": " )
15721578 self .set_precedence (_Precedence .TEST , node .body )
15731579 self .traverse (node .body )
0 commit comments