|
@@ -28,12 +28,13 @@ def fix_formatting(filesource):
|
|
|
def walk_tree(node, children):
|
|
|
for item in children:
|
|
|
if item.type == syms.dictsetmaker:
|
|
|
- walk_dict_tree(item, item.children)
|
|
|
+ indent = item.parent.children[-1].column
|
|
|
+ walk_dict_tree(item, item.children, indent)
|
|
|
else:
|
|
|
walk_tree(item, item.children)
|
|
|
|
|
|
|
|
|
-def walk_dict_tree(node, children):
|
|
|
+def walk_dict_tree(node, children, indent):
|
|
|
for item in children:
|
|
|
prev = item.prev_sibling
|
|
|
if isinstance(prev, Leaf) and prev.value == ':':
|
|
@@ -47,10 +48,10 @@ def walk_dict_tree(node, children):
|
|
|
elif six.text_type(item).strip()[0] in ('[', '{'):
|
|
|
walk_tree(item, item.children)
|
|
|
else:
|
|
|
- walk_dedent_tree(item, item.children)
|
|
|
+ walk_dedent_tree(item, item.children, indent)
|
|
|
|
|
|
|
|
|
-def walk_dedent_tree(node, children):
|
|
|
+def walk_dedent_tree(node, children, indent):
|
|
|
force_split_next = False
|
|
|
for item in children:
|
|
|
prev = item.prev_sibling
|
|
@@ -74,60 +75,54 @@ def walk_dedent_tree(node, children):
|
|
|
# different stringformat tactic
|
|
|
force_split_next = True
|
|
|
elif isinstance(item, Node):
|
|
|
- for subitem in item.children[1:]:
|
|
|
- walk_dedent_tree_node(subitem, subitem.children, force_split_next)
|
|
|
- force_split_next = False
|
|
|
+ if node.type == syms.power:
|
|
|
+ for subitem in item.children[1:]:
|
|
|
+ walk_dedent_power_node(subitem, subitem.children, indent)
|
|
|
+ else:
|
|
|
+ for subitem in item.children[1:]:
|
|
|
+ walk_dedent_tree_node(subitem, subitem.children, indent, force_split_next)
|
|
|
+ force_split_next = False
|
|
|
|
|
|
|
|
|
-def walk_dedent_tree_node(node, children, force_split_next=False):
|
|
|
+def walk_dedent_tree_node(node, children, indent, force_split_next=False):
|
|
|
if six.text_type(node).startswith("\n"):
|
|
|
if isinstance(node, Leaf):
|
|
|
prev = node.prev_sibling
|
|
|
next = node.next_sibling
|
|
|
|
|
|
- if next and six.text_type(next).strip() == ':':
|
|
|
- return # excape hatch for misidentification of single nested dict item
|
|
|
- if six.text_type(node).strip() == '}':
|
|
|
- return # generally yapf does good job positioning closing curlybraces
|
|
|
-
|
|
|
is_followup = prev and prev.type == token.STRING and node.type == token.STRING
|
|
|
if is_followup:
|
|
|
new_value = node.value
|
|
|
- new_prefix = "\n%s" % (' ' * (len(prev.prefix.lstrip("\n")) / 4 * 4))
|
|
|
|
|
|
# insert linebreak after last string in braces, so its closing brace moves to new line
|
|
|
if not node.next_sibling:
|
|
|
closing_bracket = node.parent.parent.children[-1]
|
|
|
if not six.text_type(closing_bracket).startswith("\n"):
|
|
|
- new_value = "%s\n%s" % (node.value, (' ' * ((len(prev.prefix.lstrip("\n")) / 4 - 1) * 4)))
|
|
|
+ new_value = "%s\n%s" % (node.value, (' ' * (indent + 4)))
|
|
|
|
|
|
node.replace(Leaf(
|
|
|
node.type,
|
|
|
new_value,
|
|
|
- prefix=new_prefix,
|
|
|
+ prefix="\n%s" % (' ' * (indent + 8)),
|
|
|
))
|
|
|
else:
|
|
|
+ if six.text_type(node).strip() in (')', '}'):
|
|
|
+ new_prefix = "\n%s" % (' ' * (indent + 4))
|
|
|
+ else:
|
|
|
+ new_prefix = "\n%s" % (' ' * (indent + 8))
|
|
|
+
|
|
|
node.replace(Leaf(
|
|
|
node.type,
|
|
|
node.value,
|
|
|
- prefix=node.prefix[:-4],
|
|
|
+ prefix=new_prefix
|
|
|
))
|
|
|
else:
|
|
|
for item in children:
|
|
|
- walk_dedent_tree_node(item, item.children)
|
|
|
+ walk_dedent_tree_node(item, item.children, indent)
|
|
|
elif isinstance(node, Leaf):
|
|
|
if node.type == token.STRING:
|
|
|
strings_tuple = node.parent.parent
|
|
|
|
|
|
- # compute indent
|
|
|
- if force_split_next:
|
|
|
- container = strings_tuple.parent.children[0]
|
|
|
- else:
|
|
|
- container = strings_tuple.parent.parent.children[0]
|
|
|
- while isinstance(container, Node):
|
|
|
- container = container.children[0]
|
|
|
- indent = container.column + 4
|
|
|
-
|
|
|
prev = node.prev_sibling
|
|
|
next = node.next_sibling
|
|
|
|
|
@@ -138,15 +133,28 @@ def walk_dedent_tree_node(node, children, force_split_next=False):
|
|
|
node.replace(Leaf(
|
|
|
node.type,
|
|
|
node.value,
|
|
|
- prefix="\n%s" % (' ' * indent),
|
|
|
+ prefix="\n%s" % (' ' * (indent + 8)),
|
|
|
))
|
|
|
elif force_split_next:
|
|
|
node.replace(Leaf(
|
|
|
node.type,
|
|
|
- "%s\n%s" % (node.value, (' ' * (indent - 4))),
|
|
|
- prefix="\n%s" % (' ' * indent),
|
|
|
+ "%s\n%s" % (node.value, (' ' * (indent + 4))),
|
|
|
+ prefix="\n%s" % (' ' * (indent + 8)),
|
|
|
))
|
|
|
else:
|
|
|
for item in children:
|
|
|
- walk_dedent_tree_node(item, item.children)
|
|
|
+ walk_dedent_tree_node(item, item.children, indent)
|
|
|
+
|
|
|
+
|
|
|
+def walk_dedent_power_node(node, children, indent):
|
|
|
+ if isinstance(node, Leaf):
|
|
|
+ if six.text_type(node).startswith("\n"):
|
|
|
+ node.replace(Leaf(
|
|
|
+ node.type,
|
|
|
+ node.value,
|
|
|
+ prefix=node.prefix[:-4],
|
|
|
+ ))
|
|
|
+ else:
|
|
|
+ for item in children:
|
|
|
+ walk_dedent_power_node(item, item.children, indent)
|
|
|
|