aboutsummaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-04-29 19:55:57 -0400
committerAndrew Kelley <superjoe30@gmail.com>2018-04-29 19:55:57 -0400
commitc53209a8a8cee014382a735b3baa7cd439106c6f (patch)
tree1109201249a486bde629356928ba6fed283fee54 /std
parent3235eb03f979cbcc38cbe8b69d55761079e6d864 (diff)
downloadzig-c53209a8a8cee014382a735b3baa7cd439106c6f.tar.gz
zig-c53209a8a8cee014382a735b3baa7cd439106c6f.zip
zig fmt: comments before var decl in struct
Diffstat (limited to 'std')
-rw-r--r--std/zig/parser.zig26
-rw-r--r--std/zig/parser_test.zig33
2 files changed, 45 insertions, 14 deletions
diff --git a/std/zig/parser.zig b/std/zig/parser.zig
index 5f0928ee42..cd4b9c136e 100644
--- a/std/zig/parser.zig
+++ b/std/zig/parser.zig
@@ -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();
diff --git a/std/zig/parser_test.zig b/std/zig/parser_test.zig
index 4edce98439..78b08d91cb 100644
--- a/std/zig/parser_test.zig
+++ b/std/zig/parser_test.zig
@@ -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" {}