authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-02-28 12:06:43+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-03-18 11:15:22-04:00
log11a4ce42c16c17422cd272f154c9c33231bcc61a
tree7947d3da28ca685619fc46248634003b4331cb3f
parent63a4dbc30d3ef3c7f8a8c6a2ba2087eaab8b830a
signaturelock-open Commit is signed but in an unrecognized format.

zig fmt: Respect trailing commas in error set declarations

The logic is not perfect as it doesn't take into account the presence of doc comments, but it's an improvement over the status quo.

2 files changed, 43 insertions(+), 17 deletions(-)

lib/std/zig/parser_test.zig+2
...@@ -1509,6 +1509,8 @@ test "zig fmt: error set declaration" {...@@ -1509,6 +1509,8 @@ test "zig fmt: error set declaration" {
1509 \\const Error = error{OutOfMemory};1509 \\const Error = error{OutOfMemory};
1510 \\const Error = error{};1510 \\const Error = error{};
1511 \\1511 \\
1512 \\const Error = error{ OutOfMemory, OutOfTime };
1513 \\
1512 );1514 );
1513}1515}
15141516
lib/std/zig/render.zig+41-17
...@@ -1268,25 +1268,51 @@ fn renderExpression(...@@ -1268,25 +1268,51 @@ fn renderExpression(
1268 }1268 }
12691269
1270 try renderToken(tree, stream, err_set_decl.error_token, indent, start_col, Space.None); // error1270 try renderToken(tree, stream, err_set_decl.error_token, indent, start_col, Space.None); // error
1271 try renderToken(tree, stream, lbrace, indent, start_col, Space.Newline); // {
1272 const new_indent = indent + indent_delta;
12731271
1274 var it = err_set_decl.decls.iterator(0);1272 const src_has_trailing_comma = blk: {
1275 while (it.next()) |node| {1273 const maybe_comma = tree.prevToken(err_set_decl.rbrace_token);
1276 try stream.writeByteNTimes(' ', new_indent);1274 break :blk tree.tokens.at(maybe_comma).id == .Comma;
1275 };
12771276
1278 if (it.peek()) |next_node| {1277 if (src_has_trailing_comma) {
1279 try renderExpression(allocator, stream, tree, new_indent, start_col, node.*, Space.None);1278 try renderToken(tree, stream, lbrace, indent, start_col, Space.Newline); // {
1280 try renderToken(tree, stream, tree.nextToken(node.*.lastToken()), new_indent, start_col, Space.Newline); // ,1279 const new_indent = indent + indent_delta;
12811280
1282 try renderExtraNewline(tree, stream, start_col, next_node.*);1281 var it = err_set_decl.decls.iterator(0);
1283 } else {1282 while (it.next()) |node| {
1284 try renderExpression(allocator, stream, tree, new_indent, start_col, node.*, Space.Comma);1283 try stream.writeByteNTimes(' ', new_indent);
1284
1285 if (it.peek()) |next_node| {
1286 try renderExpression(allocator, stream, tree, new_indent, start_col, node.*, Space.None);
1287 try renderToken(tree, stream, tree.nextToken(node.*.lastToken()), new_indent, start_col, Space.Newline); // ,
1288
1289 try renderExtraNewline(tree, stream, start_col, next_node.*);
1290 } else {
1291 try renderExpression(allocator, stream, tree, new_indent, start_col, node.*, Space.Comma);
1292 }
1285 }1293 }
1286 }
12871294
1288 try stream.writeByteNTimes(' ', indent);1295 try stream.writeByteNTimes(' ', indent);
1289 return renderToken(tree, stream, err_set_decl.rbrace_token, indent, start_col, space); // }1296 return renderToken(tree, stream, err_set_decl.rbrace_token, indent, start_col, space); // }
1297 } else {
1298 try renderToken(tree, stream, lbrace, indent, start_col, Space.Space); // {
1299
1300 var it = err_set_decl.decls.iterator(0);
1301 while (it.next()) |node| {
1302 if (it.peek()) |next_node| {
1303 try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.None);
1304
1305 const comma_token = tree.nextToken(node.*.lastToken());
1306 assert(tree.tokens.at(comma_token).id == .Comma);
1307 try renderToken(tree, stream, comma_token, indent, start_col, Space.Space); // ,
1308 try renderExtraNewline(tree, stream, start_col, next_node.*);
1309 } else {
1310 try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.Space);
1311 }
1312 }
1313
1314 return renderToken(tree, stream, err_set_decl.rbrace_token, indent, start_col, space); // }
1315 }
1290 },1316 },
12911317
1292 .ErrorTag => {1318 .ErrorTag => {
...@@ -1589,8 +1615,7 @@ fn renderExpression(...@@ -1589,8 +1615,7 @@ fn renderExpression(
1589 }1615 }
1590 } else {1616 } else {
1591 var it = switch_case.items.iterator(0);1617 var it = switch_case.items.iterator(0);
1592 while (true) {1618 while (it.next()) |node| {
1593 const node = it.next().?;
1594 if (it.peek()) |next_node| {1619 if (it.peek()) |next_node| {
1595 try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.None);1620 try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.None);
15961621
...@@ -1601,7 +1626,6 @@ fn renderExpression(...@@ -1601,7 +1626,6 @@ fn renderExpression(
1601 } else {1626 } else {
1602 try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.Comma);1627 try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.Comma);
1603 try stream.writeByteNTimes(' ', indent);1628 try stream.writeByteNTimes(' ', indent);
1604 break;
1605 }1629 }
1606 }1630 }
1607 }1631 }