Skip to content

Commit 7eb9210

Browse files
committed
Start to track line breaks on lists
1 parent f430b0d commit 7eb9210

File tree

3 files changed

+72
-21
lines changed

3 files changed

+72
-21
lines changed
415 Bytes
Binary file not shown.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Show off indentation based on source code indentation
2+
# New lines are influenced by source-code new lines
3+
opts = {'highlight':
4+
True,
5+
'start_line':
6+
-1,
7+
'end_line':
8+
None, 'a': 1, 'b': 2,
9+
}
10+
x = 5
11+
bar = (1,2,3,4,x,6,7,8,9,
12+
10,11,12,13,14,15,16,
13+
17,18)
14+
print(opts, bar)

uncompyle6/semantics/pysource.py

Lines changed: 58 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)