aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-03-18 11:16:25 -0400
committerAndrew Kelley <andrew@ziglang.org>2020-03-18 11:16:25 -0400
commitb1537b525fa0cd8d51ff89519254db0f066fc04b (patch)
tree7947d3da28ca685619fc46248634003b4331cb3f /lib/std
parent013ada1b59e50bbbab19acab0a79dae72133999a (diff)
parent11a4ce42c16c17422cd272f154c9c33231bcc61a (diff)
downloadzig-b1537b525fa0cd8d51ff89519254db0f066fc04b.tar.gz
zig-b1537b525fa0cd8d51ff89519254db0f066fc04b.zip
Merge branch 'LemonBoy-fix-4749'
Closes #4750 Closes #4749
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/zig/parser_test.zig2
-rw-r--r--lib/std/zig/render.zig58
2 files changed, 43 insertions, 17 deletions
diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig
index d00568e49f..e1fe07a57c 100644
--- a/lib/std/zig/parser_test.zig
+++ b/lib/std/zig/parser_test.zig
@@ -1509,6 +1509,8 @@ test "zig fmt: error set declaration" {
\\const Error = error{OutOfMemory};
\\const Error = error{};
\\
+ \\const Error = error{ OutOfMemory, OutOfTime };
+ \\
);
}
diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig
index a3a72fb23f..23dc9e02ac 100644
--- a/lib/std/zig/render.zig
+++ b/lib/std/zig/render.zig
@@ -1268,25 +1268,51 @@ fn renderExpression(
}
try renderToken(tree, stream, err_set_decl.error_token, indent, start_col, Space.None); // error
- try renderToken(tree, stream, lbrace, indent, start_col, Space.Newline); // {
- const new_indent = indent + indent_delta;
- var it = err_set_decl.decls.iterator(0);
- while (it.next()) |node| {
- try stream.writeByteNTimes(' ', new_indent);
+ const src_has_trailing_comma = blk: {
+ const maybe_comma = tree.prevToken(err_set_decl.rbrace_token);
+ break :blk tree.tokens.at(maybe_comma).id == .Comma;
+ };
- if (it.peek()) |next_node| {
- try renderExpression(allocator, stream, tree, new_indent, start_col, node.*, Space.None);
- try renderToken(tree, stream, tree.nextToken(node.*.lastToken()), new_indent, start_col, Space.Newline); // ,
+ if (src_has_trailing_comma) {
+ try renderToken(tree, stream, lbrace, indent, start_col, Space.Newline); // {
+ const new_indent = indent + indent_delta;
- try renderExtraNewline(tree, stream, start_col, next_node.*);
- } else {
- try renderExpression(allocator, stream, tree, new_indent, start_col, node.*, Space.Comma);
+ var it = err_set_decl.decls.iterator(0);
+ while (it.next()) |node| {
+ try stream.writeByteNTimes(' ', new_indent);
+
+ if (it.peek()) |next_node| {
+ try renderExpression(allocator, stream, tree, new_indent, start_col, node.*, Space.None);
+ try renderToken(tree, stream, tree.nextToken(node.*.lastToken()), new_indent, start_col, Space.Newline); // ,
+
+ try renderExtraNewline(tree, stream, start_col, next_node.*);
+ } else {
+ try renderExpression(allocator, stream, tree, new_indent, start_col, node.*, Space.Comma);
+ }
}
- }
- try stream.writeByteNTimes(' ', indent);
- return renderToken(tree, stream, err_set_decl.rbrace_token, indent, start_col, space); // }
+ try stream.writeByteNTimes(' ', indent);
+ return renderToken(tree, stream, err_set_decl.rbrace_token, indent, start_col, space); // }
+ } else {
+ try renderToken(tree, stream, lbrace, indent, start_col, Space.Space); // {
+
+ var it = err_set_decl.decls.iterator(0);
+ while (it.next()) |node| {
+ if (it.peek()) |next_node| {
+ try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.None);
+
+ const comma_token = tree.nextToken(node.*.lastToken());
+ assert(tree.tokens.at(comma_token).id == .Comma);
+ try renderToken(tree, stream, comma_token, indent, start_col, Space.Space); // ,
+ try renderExtraNewline(tree, stream, start_col, next_node.*);
+ } else {
+ try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.Space);
+ }
+ }
+
+ return renderToken(tree, stream, err_set_decl.rbrace_token, indent, start_col, space); // }
+ }
},
.ErrorTag => {
@@ -1589,8 +1615,7 @@ fn renderExpression(
}
} else {
var it = switch_case.items.iterator(0);
- while (true) {
- const node = it.next().?;
+ while (it.next()) |node| {
if (it.peek()) |next_node| {
try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.None);
@@ -1601,7 +1626,6 @@ fn renderExpression(
} else {
try renderExpression(allocator, stream, tree, indent, start_col, node.*, Space.Comma);
try stream.writeByteNTimes(' ', indent);
- break;
}
}
}