commit cdf30c31ea36365859dd81c207aede3c45c4e022 (tree)
parent cd325e408e2d23734ba84e412b6f1706cf442434
Author: Andrew Kelley <superjoe30@gmail.com>
Date: Tue, 29 May 2018 03:47:27 -0400
zig fmt: fix implementation of firstToken() for fn call
Diffstat:
3 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/std/zig/ast.zig b/std/zig/ast.zig
@@ -1673,6 +1673,10 @@ pub const Node = struct {
}
pub fn firstToken(self: &SuffixOp) TokenIndex {
+ switch (self.op) {
+ @TagType(Op).Call => |*call_info| if (call_info.async_attr) |async_attr| return async_attr.firstToken(),
+ else => {},
+ }
return self.lhs.firstToken();
}
diff --git a/std/zig/parser_test.zig b/std/zig/parser_test.zig
@@ -1,3 +1,14 @@
+test "zig fmt: async call in if condition" {
+ try testCanonical(
+ \\comptime {
+ \\ if (async<a> b()) {
+ \\ a();
+ \\ }
+ \\}
+ \\
+ );
+}
+
test "zig fmt: 2nd arg multiline string" {
try testCanonical(
\\comptime {
diff --git a/std/zig/render.zig b/std/zig/render.zig
@@ -213,13 +213,13 @@ fn renderExpression(allocator: &mem.Allocator, stream: var, tree: &ast.Tree, ind
const async_attr = @fieldParentPtr(ast.Node.AsyncAttribute, "base", base);
if (async_attr.allocator_type) |allocator_type| {
- try renderToken(tree, stream, async_attr.async_token, indent, start_col, Space.None);
+ try renderToken(tree, stream, async_attr.async_token, indent, start_col, Space.None); // async
- try renderToken(tree, stream, tree.nextToken(async_attr.async_token), indent, start_col, Space.None);
- try renderExpression(allocator, stream, tree, indent, start_col, allocator_type, Space.None);
- return renderToken(tree, stream, tree.nextToken(allocator_type.lastToken()), indent, start_col, space);
+ try renderToken(tree, stream, tree.nextToken(async_attr.async_token), indent, start_col, Space.None); // <
+ try renderExpression(allocator, stream, tree, indent, start_col, allocator_type, Space.None); // allocator
+ return renderToken(tree, stream, tree.nextToken(allocator_type.lastToken()), indent, start_col, space); // >
} else {
- return renderToken(tree, stream, async_attr.async_token, indent, start_col, space);
+ return renderToken(tree, stream, async_attr.async_token, indent, start_col, space); // async
}
},