mirror of
https://github.com/ziglang/zig.git
synced 2026-01-05 04:53:17 +00:00
zig fmt: preserve same line doc comments on var decls
This commit is contained in:
parent
abcd418451
commit
04bca58a3a
@ -640,12 +640,7 @@ pub fn parse(allocator: &mem.Allocator, source: []const u8) !ast.Tree {
|
||||
switch (token_ptr.id) {
|
||||
Token.Id.Equal => {
|
||||
var_decl.eq_token = token_index;
|
||||
stack.append(State {
|
||||
.ExpectTokenSave = ExpectTokenSave {
|
||||
.id = Token.Id.Semicolon,
|
||||
.ptr = &var_decl.semicolon_token,
|
||||
},
|
||||
}) catch unreachable;
|
||||
stack.append(State { .VarDeclSemiColon = var_decl }) catch unreachable;
|
||||
try stack.append(State { .Expression = OptionalCtx { .RequiredNull = &var_decl.init_node } });
|
||||
continue;
|
||||
},
|
||||
@ -662,6 +657,30 @@ pub fn parse(allocator: &mem.Allocator, source: []const u8) !ast.Tree {
|
||||
}
|
||||
},
|
||||
|
||||
State.VarDeclSemiColon => |var_decl| {
|
||||
const semicolon_token = nextToken(&tok_it, &tree);
|
||||
|
||||
if (semicolon_token.ptr.id != Token.Id.Semicolon) {
|
||||
*(try tree.errors.addOne()) = Error {
|
||||
.ExpectedToken = Error.ExpectedToken {
|
||||
.token = semicolon_token.index,
|
||||
.expected_id = Token.Id.Semicolon,
|
||||
},
|
||||
};
|
||||
return tree;
|
||||
}
|
||||
|
||||
var_decl.semicolon_token = semicolon_token.index;
|
||||
|
||||
if (eatToken(&tok_it, &tree, Token.Id.DocComment)) |doc_comment_token| {
|
||||
const loc = tree.tokenLocation(semicolon_token.ptr.end, doc_comment_token);
|
||||
if (loc.line == 0) {
|
||||
try pushDocComment(arena, doc_comment_token, &var_decl.doc_comments);
|
||||
} else {
|
||||
putBackToken(&tok_it, &tree);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
State.FnDef => |fn_proto| {
|
||||
const token = nextToken(&tok_it, &tree);
|
||||
@ -2938,6 +2957,7 @@ const State = union(enum) {
|
||||
VarDecl: VarDeclCtx,
|
||||
VarDeclAlign: &ast.Node.VarDecl,
|
||||
VarDeclEq: &ast.Node.VarDecl,
|
||||
VarDeclSemiColon: &ast.Node.VarDecl,
|
||||
|
||||
FnDef: &ast.Node.FnProto,
|
||||
FnProto: &ast.Node.FnProto,
|
||||
@ -3042,25 +3062,29 @@ const State = union(enum) {
|
||||
OptionalTokenSave: OptionalTokenSave,
|
||||
};
|
||||
|
||||
fn pushDocComment(arena: &mem.Allocator, line_comment: TokenIndex, result: &?&ast.Node.DocComment) !void {
|
||||
const node = blk: {
|
||||
if (*result) |comment_node| {
|
||||
break :blk comment_node;
|
||||
} else {
|
||||
const comment_node = try arena.construct(ast.Node.DocComment {
|
||||
.base = ast.Node {
|
||||
.id = ast.Node.Id.DocComment,
|
||||
},
|
||||
.lines = ast.Node.DocComment.LineList.init(arena),
|
||||
});
|
||||
*result = comment_node;
|
||||
break :blk comment_node;
|
||||
}
|
||||
};
|
||||
try node.lines.push(line_comment);
|
||||
}
|
||||
|
||||
fn eatDocComments(arena: &mem.Allocator, tok_it: &ast.Tree.TokenList.Iterator, tree: &ast.Tree) !?&ast.Node.DocComment {
|
||||
var result: ?&ast.Node.DocComment = null;
|
||||
while (true) {
|
||||
if (eatToken(tok_it, tree, Token.Id.DocComment)) |line_comment| {
|
||||
const node = blk: {
|
||||
if (result) |comment_node| {
|
||||
break :blk comment_node;
|
||||
} else {
|
||||
const comment_node = try arena.construct(ast.Node.DocComment {
|
||||
.base = ast.Node {
|
||||
.id = ast.Node.Id.DocComment,
|
||||
},
|
||||
.lines = ast.Node.DocComment.LineList.init(arena),
|
||||
});
|
||||
result = comment_node;
|
||||
break :blk comment_node;
|
||||
}
|
||||
};
|
||||
try node.lines.push(line_comment);
|
||||
try pushDocComment(arena, line_comment, &result);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1,10 +1,16 @@
|
||||
//test "zig fmt: same-line doc comment on variable declaration" {
|
||||
// try testCanonical(
|
||||
// \\pub const MAP_ANONYMOUS = 0x1000; /// allocated from memory, swap space
|
||||
// \\pub const MAP_FILE = 0x0000; /// map from file (default)
|
||||
// \\
|
||||
// );
|
||||
//}
|
||||
test "zig fmt: same-line doc comment on variable declaration" {
|
||||
try testTransform(
|
||||
\\pub const MAP_ANONYMOUS = 0x1000; /// allocated from memory, swap space
|
||||
\\pub const MAP_FILE = 0x0000; /// map from file (default)
|
||||
\\
|
||||
,
|
||||
\\/// allocated from memory, swap space
|
||||
\\pub const MAP_ANONYMOUS = 0x1000;
|
||||
\\/// map from file (default)
|
||||
\\pub const MAP_FILE = 0x0000;
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: same-line comment after a statement" {
|
||||
try testCanonical(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user