zig fmt: comments before var decl in struct

This commit is contained in:
Andrew Kelley 2018-04-29 19:55:57 -04:00
parent 3235eb03f9
commit c53209a8a8
2 changed files with 45 additions and 14 deletions

View File

@ -230,6 +230,7 @@ pub const Parser = struct {
Semicolon: &&ast.Node,
AddComments: AddCommentsCtx,
LookForSameLineComment: &&ast.Node,
LookForSameLineCommentDirect: &ast.Node,
AsmOutputItems: &ArrayList(&ast.Node.AsmOutput),
AsmOutputReturnOrType: &ast.Node.AsmOutput,
@ -532,7 +533,7 @@ pub const Parser = struct {
}
}
stack.append(State {
try stack.append(State {
.VarDecl = VarDeclCtx {
.comments = ctx.comments,
.visib_token = ctx.visib_token,
@ -542,7 +543,7 @@ pub const Parser = struct {
.mut_token = token,
.list = ctx.decls
}
}) catch unreachable;
});
continue;
},
Token.Id.Keyword_fn, Token.Id.Keyword_nakedcc,
@ -705,6 +706,7 @@ pub const Parser = struct {
continue;
},
State.ContainerDecl => |container_decl| {
const comments = try self.eatComments(arena);
const token = self.getNextToken();
switch (token.id) {
Token.Id.Identifier => {
@ -713,7 +715,7 @@ pub const Parser = struct {
const node = try arena.construct(ast.Node.StructField {
.base = ast.Node {
.id = ast.Node.Id.StructField,
.before_comments = null,
.before_comments = comments,
.same_line_comment = null,
},
.visib_token = null,
@ -765,7 +767,7 @@ pub const Parser = struct {
.TopLevelExternOrField = TopLevelExternOrFieldCtx {
.visib_token = token,
.container_decl = container_decl,
.comments = null,
.comments = comments,
}
});
continue;
@ -778,7 +780,7 @@ pub const Parser = struct {
.visib_token = token,
.extern_export_inline_token = null,
.lib_name = null,
.comments = null,
.comments = comments,
}
});
continue;
@ -793,7 +795,7 @@ pub const Parser = struct {
.visib_token = token,
.extern_export_inline_token = null,
.lib_name = null,
.comments = null,
.comments = comments,
}
});
continue;
@ -811,7 +813,7 @@ pub const Parser = struct {
.visib_token = null,
.extern_export_inline_token = null,
.lib_name = null,
.comments = null,
.comments = comments,
}
});
continue;
@ -842,7 +844,8 @@ pub const Parser = struct {
});
try ctx.list.append(&var_decl.base);
stack.append(State { .VarDeclAlign = var_decl }) catch unreachable;
try stack.append(State { .LookForSameLineCommentDirect = &var_decl.base });
try stack.append(State { .VarDeclAlign = var_decl });
try stack.append(State { .TypeExprBegin = OptionalCtx { .RequiredNull = &var_decl.type_node} });
try stack.append(State { .IfToken = Token.Id.Colon });
try stack.append(State {
@ -854,7 +857,7 @@ pub const Parser = struct {
continue;
},
State.VarDeclAlign => |var_decl| {
stack.append(State { .VarDeclEq = var_decl }) catch unreachable;
try stack.append(State { .VarDeclEq = var_decl });
const next_token = self.getNextToken();
if (next_token.id == Token.Id.Keyword_align) {
@ -1348,6 +1351,11 @@ pub const Parser = struct {
continue;
},
State.LookForSameLineCommentDirect => |node| {
try self.lookForSameLineComment(arena, node);
continue;
},
State.AsmOutputItems => |items| {
const lbracket = self.getNextToken();

View File

@ -1,4 +1,27 @@
test "zig fmt: line comment after field decl" {
test "zig fmt: comments before var decl in struct" {
try testCanonical(
\\pub const vfs_cap_data = extern struct {
\\ // All of these are mandated as little endian
\\ // when on disk.
\\ const Data = struct {
\\ permitted: u32,
\\ inheritable: u32,
\\ };
\\};
\\
);
}
test "zig fmt: same-line comment after var decl in struct" {
try testCanonical(
\\pub const vfs_cap_data = extern struct {
\\ const Data = struct {}; // when on disk.
\\};
\\
);
}
test "zig fmt: same-line comment after field decl" {
try testCanonical(
\\pub const dirent = extern struct {
\\ d_name: u8,
@ -18,7 +41,7 @@ test "zig fmt: array literal with 1 item on 1 line" {
);
}
test "zig fmt: preserve same-line comment after a statement" {
test "zig fmt: same-line comment after a statement" {
try testCanonical(
\\test "" {
\\ a = b;
@ -29,7 +52,7 @@ test "zig fmt: preserve same-line comment after a statement" {
);
}
test "zig fmt: preserve comments before global variables" {
test "zig fmt: comments before global variables" {
try testCanonical(
\\/// Foo copies keys and values before they go into the map, and
\\/// frees them when they get removed.
@ -38,7 +61,7 @@ test "zig fmt: preserve comments before global variables" {
);
}
test "zig fmt: preserve comments before statements" {
test "zig fmt: comments before statements" {
try testCanonical(
\\test "std" {
\\ // statement comment
@ -48,7 +71,7 @@ test "zig fmt: preserve comments before statements" {
);
}
test "zig fmt: preserve top level comments" {
test "zig fmt: comments before test decl" {
try testCanonical(
\\// top level comment
\\test "hi" {}