diff --git a/std/zig/ast.zig b/std/zig/ast.zig index 3b705e2ee6..e86c40e310 100644 --- 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 index c72888a984..1f60fae270 100644 --- 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 b()) { + \\ a(); + \\ } + \\} + \\ + ); +} + test "zig fmt: 2nd arg multiline string" { try testCanonical( \\comptime { diff --git a/std/zig/render.zig b/std/zig/render.zig index c8efce63c5..dce659f1ef 100644 --- 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 } },