authorgravatar for codroid@gmail.comhryx <codroid@gmail.com> 2019-04-03 21:36:21-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-04 01:31:39-04:00
logcec8c8678a5853fb13fecab8ac29c2388b3aeb8e
tree76ed58ced53eeac6499ac4a1d4183313e4088860
parent90b6eab05a15f134a492ecebfc53a5c5e4442d8a

zig fmt: Fix regression in for-else (#2178)


2 files changed, 20 insertions(+), 9 deletions(-)

std/zig/parser_test.zig+9
...@@ -1828,6 +1828,15 @@ test "zig fmt: for" {...@@ -1828,6 +1828,15 @@ test "zig fmt: for" {
1828 \\ continue;1828 \\ continue;
1829 \\ } else return;1829 \\ } else return;
1830 \\1830 \\
1831 \\ for (a) |v| continue else {
1832 \\ return;
1833 \\ }
1834 \\
1835 \\ for (a) |v|
1836 \\ continue
1837 \\ else
1838 \\ return;
1839 \\
1831 \\ for (a) |v|1840 \\ for (a) |v|
1832 \\ continue;1841 \\ continue;
1833 \\1842 \\
std/zig/render.zig+11-9
...@@ -1448,17 +1448,17 @@ fn renderExpression(...@@ -1448,17 +1448,17 @@ fn renderExpression(
1448 const has_payload = for_node.payload != null;1448 const has_payload = for_node.payload != null;
1449 const body_is_block = for_node.body.id == ast.Node.Id.Block;1449 const body_is_block = for_node.body.id == ast.Node.Id.Block;
1450 const src_one_line_to_body = !body_is_block and tree.tokensOnSameLine(rparen, for_node.body.firstToken());1450 const src_one_line_to_body = !body_is_block and tree.tokensOnSameLine(rparen, for_node.body.firstToken());
1451 const body_indent = if (!body_is_block and !src_one_line_to_body) indent + indent_delta else indent;1451 const body_on_same_line = body_is_block or src_one_line_to_body;
14521452
1453 const rparen_space = if (has_payload or body_is_block or src_one_line_to_body) Space.Space else Space.Newline;1453 const space_after_rparen = if (has_payload or body_on_same_line) Space.Space else Space.Newline;
1454 try renderToken(tree, stream, rparen, body_indent, start_col, rparen_space); // )1454 try renderToken(tree, stream, rparen, indent, start_col, space_after_rparen); // )
14551455
1456 if (for_node.payload) |payload| {1456 if (for_node.payload) |payload| {
1457 const payload_space = if (body_is_block or src_one_line_to_body) Space.Space else Space.Newline;1457 const space_after_payload = if (body_on_same_line) Space.Space else Space.Newline;
1458 try renderExpression(allocator, stream, tree, body_indent, start_col, payload, payload_space); // |x|1458 try renderExpression(allocator, stream, tree, indent, start_col, payload, space_after_payload); // |x|
1459 }1459 }
14601460
1461 const body_space = blk: {1461 const space_after_body = blk: {
1462 if (for_node.@"else") |@"else"| {1462 if (for_node.@"else") |@"else"| {
1463 const src_one_line_to_else = tree.tokensOnSameLine(for_node.body.lastToken(), @"else".firstToken());1463 const src_one_line_to_else = tree.tokensOnSameLine(for_node.body.lastToken(), @"else".firstToken());
1464 if (body_is_block or src_one_line_to_else) {1464 if (body_is_block or src_one_line_to_else) {
...@@ -1471,11 +1471,13 @@ fn renderExpression(...@@ -1471,11 +1471,13 @@ fn renderExpression(
1471 }1471 }
1472 };1472 };
14731473
1474 if (!body_is_block and !src_one_line_to_body) try stream.writeByteNTimes(' ', body_indent);1474 const body_indent = if (body_on_same_line) indent else indent + indent_delta;
1475 try renderExpression(allocator, stream, tree, body_indent, start_col, for_node.body, body_space);1475 if (!body_on_same_line) try stream.writeByteNTimes(' ', body_indent);
1476 try renderExpression(allocator, stream, tree, body_indent, start_col, for_node.body, space_after_body); // { body }
14761477
1477 if (for_node.@"else") |@"else"| {1478 if (for_node.@"else") |@"else"| {
1478 return renderExpression(allocator, stream, tree, body_indent, start_col, &@"else".base, space);1479 if (space_after_body == Space.Newline) try stream.writeByteNTimes(' ', indent);
1480 return renderExpression(allocator, stream, tree, indent, start_col, &@"else".base, space); // else
1479 }1481 }
1480 },1482 },
14811483