zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 43587af01acba98d9c09c4e0cf20343be8d7c81b (tree)
parent 3ec10ea174d5738098e9bd1ef709b552603cc3b4
Author: Tetralux <tetralux@teknik.io>
Date:   Thu, 22 Aug 2019 22:58:38 +0000

rendering of align(N) on struct fields

Diffstat:
Mstd/zig/parser_test.zig | 9+++++++++
Mstd/zig/render.zig | 15++++++++++++++-
2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/std/zig/parser_test.zig b/std/zig/parser_test.zig @@ -166,6 +166,15 @@ test "zig fmt: doc comments on param decl" { ); } +test "zig fmt: aligned struct field" { + try testCanonical( + \\pub const S = struct { + \\ f: i32 align(32), + \\}; + \\ + ); +} + test "zig fmt: preserve space between async fn definitions" { try testCanonical( \\async fn a() void {} diff --git a/std/zig/render.zig b/std/zig/render.zig @@ -206,7 +206,20 @@ fn renderTopLevelDecl(allocator: *mem.Allocator, stream: var, tree: *ast.Tree, i } else if (field.type_expr != null and field.value_expr == null) { try renderToken(tree, stream, field.name_token, indent, start_col, Space.None); // name try renderToken(tree, stream, tree.nextToken(field.name_token), indent, start_col, Space.Space); // : - return renderExpression(allocator, stream, tree, indent, start_col, field.type_expr.?, Space.Comma); // type, + + if (field.align_expr) |align_value_expr| { + try renderExpression(allocator, stream, tree, indent, start_col, field.type_expr.?, Space.Space); // type + const lparen_token = tree.prevToken(align_value_expr.firstToken()); + const align_kw = tree.prevToken(lparen_token); + const rparen_token = tree.nextToken(align_value_expr.lastToken()); + try renderToken(tree, stream, align_kw, indent, start_col, Space.None); // align + try renderToken(tree, stream, lparen_token, indent, start_col, Space.None); // ( + try renderExpression(allocator, stream, tree, indent, start_col, align_value_expr, Space.None); // alignment + try renderToken(tree, stream, rparen_token, indent, start_col, Space.Comma); // ) + } else { + try renderExpression(allocator, stream, tree, indent, start_col, field.type_expr.?, Space.Comma); // type, + } + } else if (field.type_expr == null and field.value_expr != null) { try renderToken(tree, stream, field.name_token, indent, start_col, Space.Space); // name try renderToken(tree, stream, tree.nextToken(field.name_token), indent, start_col, Space.Space); // =