@@ -1626,7 +1626,6 @@ def n_mapexpr(self, node):
16261626 self .prec = 100
16271627
16281628 self .indentMore (INDENT_PER_LEVEL )
1629- line_seperator = ',\n ' + self .indent
16301629 sep = INDENT_PER_LEVEL [:- 1 ]
16311630 self .write ('{' )
16321631 line_number = self .line_number
@@ -1643,16 +1642,15 @@ def n_mapexpr(self, node):
16431642 name = self .traverse (l [i ], indent = '' )
16441643 if i > 0 :
16451644 if (line_number != self .line_number ):
1646- self .write ("\n " + self .indent + " " )
1645+ self .write ("\n " + self .indent + INDENT_PER_LEVEL [: - 1 ] )
16471646 pass
1648- pass
16491647 line_number = self .line_number
16501648 self .write (name , ': ' )
16511649 value = self .traverse (l [i + 1 ], indent = self .indent + (len (name )+ 2 )* ' ' )
16521650 self .write (value )
16531651 sep = ","
16541652 if line_number != self .line_number :
1655- sep += "\n " + self .indent + " "
1653+ sep += "\n " + self .indent + INDENT_PER_LEVEL [: - 1 ]
16561654 line_number = self .line_number
16571655 i += 2
16581656 pass
@@ -1671,7 +1669,7 @@ def n_mapexpr(self, node):
16711669 name = self .traverse (l [i + 1 ], indent = '' )
16721670 if i > 0 :
16731671 if (line_number != self .line_number ):
1674- self .write ("\n " + self .indent + " " )
1672+ self .write ("\n " + self .indent + INDENT_PER_LEVEL [: - 1 ] )
16751673 pass
16761674 pass
16771675 line_number = self .line_number
@@ -1680,7 +1678,7 @@ def n_mapexpr(self, node):
16801678 self .write (value )
16811679 sep = ","
16821680 if line_number != self .line_number :
1683- sep += "\n " + self .indent + " "
1681+ sep += "\n " + self .indent + INDENT_PER_LEVEL [: - 1 ]
16841682 line_number = self .line_number
16851683 else :
16861684 sep += " "
@@ -1693,22 +1691,57 @@ def n_mapexpr(self, node):
16931691 assert node [- 1 ].type .startswith ('kvlist' )
16941692 kv_node = node [- 1 ] # goto kvlist
16951693
1694+ first_time = True
16961695 for kv in kv_node :
16971696 assert kv in ('kv' , 'kv2' , 'kv3' )
16981697 # kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR
16991698 # kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR
17001699 # kv3 ::= expr expr STORE_MAP
1700+
1701+ # FIXME: DRY this and the above
17011702 if kv == 'kv' :
1703+ self .write (sep )
17021704 name = self .traverse (kv [- 2 ], indent = '' )
1705+ if first_time :
1706+ if (line_number != self .line_number ):
1707+ self .write ("\n " + self .indent + " " )
1708+ pass
1709+ first_time = False
1710+ pass
1711+ line_number = self .line_number
1712+ self .write (name , ': ' )
17031713 value = self .traverse (kv [1 ], indent = self .indent + (len (name )+ 2 )* ' ' )
17041714 elif kv == 'kv2' :
1715+ self .write (sep )
17051716 name = self .traverse (kv [1 ], indent = '' )
1717+ if first_time :
1718+ if (line_number != self .line_number ):
1719+ self .write ("\n " + self .indent + " " )
1720+ pass
1721+ first_time = False
1722+ pass
1723+ line_number = self .line_number
1724+ self .write (name , ': ' )
17061725 value = self .traverse (kv [- 3 ], indent = self .indent + (len (name )+ 2 )* ' ' )
17071726 elif kv == 'kv3' :
1727+ self .write (sep )
17081728 name = self .traverse (kv [- 2 ], indent = '' )
1729+ if first_time :
1730+ if (line_number != self .line_number ):
1731+ self .write ("\n " + self .indent + " " )
1732+ pass
1733+ first_time = False
1734+ pass
1735+ line_number = self .line_number
1736+ self .write (name , ': ' )
1737+ line_number = self .line_number
17091738 value = self .traverse (kv [0 ], indent = self .indent + (len (name )+ 2 )* ' ' )
1710- self .write (sep , name , ': ' , value )
1711- sep = line_seperator
1739+ pass
1740+ self .write (value )
1741+ sep = ","
1742+ if line_number != self .line_number :
1743+ sep += "\n " + self .indent + " "
1744+ line_number = self .line_number
17121745 if sep .startswith (",\n " ):
17131746 self .write (sep [1 :])
17141747 self .write ('}' )
@@ -1755,24 +1788,22 @@ def n_build_list(self, node):
17551788 flat_elems .append (elem )
17561789
17571790 self .indentMore (INDENT_PER_LEVEL )
1758- if lastnode .attr > 3 :
1759- line_separator = ',\n ' + self .indent
1760- else :
1761- line_separator = ', '
1762- sep = INDENT_PER_LEVEL [:- 1 ]
1791+ sep = ''
17631792
1764- # FIXME:
1765- # if flat_elems > some_number, then group
1766- # do automatic wrapping
17671793 for elem in flat_elems :
17681794 if elem == 'ROT_THREE' :
17691795 continue
17701796 assert elem == 'expr'
1797+ line_number = self .line_number
17711798 value = self .traverse (elem )
1772- self .write (sep , value )
1773- sep = line_separator
1799+ if line_number != self .line_number :
1800+ sep += '\n ' + self .indent + INDENT_PER_LEVEL [:- 1 ]
1801+ else :
1802+ if sep != '' : sep += ' '
17741803 if have_star :
17751804 sep += '*'
1805+ self .write (sep , value )
1806+ sep = ','
17761807 if lastnode .attr == 1 and lastnodetype .startswith ('BUILD_TUPLE' ):
17771808 self .write (',' )
17781809 self .write (endchar )
@@ -1859,9 +1890,15 @@ def engine(self, entry, startnode):
18591890 raise
18601891
18611892 if typ == '%' : self .write ('%' )
1862- elif typ == '+' : self .indentMore ()
1863- elif typ == '-' : self .indentLess ()
1864- elif typ == '|' : self .write (self .indent )
1893+ elif typ == '+' :
1894+ self .line_number += 1
1895+ self .indentMore ()
1896+ elif typ == '-' :
1897+ self .line_number += 1
1898+ self .indentLess ()
1899+ elif typ == '|' :
1900+ self .line_number += 1
1901+ self .write (self .indent )
18651902 # Used mostly on the LHS of an assignment
18661903 # BUILD_TUPLE_n is pretty printed and may take care of other uses.
18671904 elif typ == ',' :
0 commit comments