mirror of
https://github.com/ziglang/zig.git
synced 2025-12-24 23:23:07 +00:00
zig fmt: Respect line breaks in struct default value decls
Bring this in line with how variable declarations are handled. Open a new indentation level for the initialization expression to handle nested expressions like blocks. Closes #7618
This commit is contained in:
parent
f16f25047c
commit
5ecf8bddae
@ -4,6 +4,31 @@
|
||||
// The MIT license requires this copyright notice to be included in all copies
|
||||
// and substantial portions of the software.
|
||||
|
||||
test "zig fmt: respect line breaks in struct field value declaration" {
|
||||
try testCanonical(
|
||||
\\const Foo = struct {
|
||||
\\ bar: u32 =
|
||||
\\ 42,
|
||||
\\ bar: u32 =
|
||||
\\ // a comment
|
||||
\\ 42,
|
||||
\\ bar: u32 =
|
||||
\\ 42,
|
||||
\\ // a comment
|
||||
\\ bar: []const u8 =
|
||||
\\ \\ foo
|
||||
\\ \\ bar
|
||||
\\ \\ baz
|
||||
\\ ,
|
||||
\\ bar: u32 =
|
||||
\\ blk: {
|
||||
\\ break :blk 42;
|
||||
\\ },
|
||||
\\};
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
// TODO Remove this after zig 0.9.0 is released.
|
||||
test "zig fmt: rewrite inline functions as callconv(.Inline)" {
|
||||
try testTransform(
|
||||
|
||||
@ -1159,8 +1159,29 @@ fn renderContainerField(
|
||||
try renderToken(ais, tree, rparen_token, .space); // )
|
||||
}
|
||||
const eq_token = tree.firstToken(field.ast.value_expr) - 1;
|
||||
try renderToken(ais, tree, eq_token, .space); // =
|
||||
return renderExpressionComma(gpa, ais, tree, field.ast.value_expr, space); // value
|
||||
const eq_space: Space = if (tree.tokensOnSameLine(eq_token, eq_token + 1)) .space else .newline;
|
||||
{
|
||||
ais.pushIndent();
|
||||
try renderToken(ais, tree, eq_token, eq_space); // =
|
||||
ais.popIndent();
|
||||
}
|
||||
|
||||
if (eq_space == .space)
|
||||
return renderExpressionComma(gpa, ais, tree, field.ast.value_expr, space); // value
|
||||
|
||||
const token_tags = tree.tokens.items(.tag);
|
||||
const maybe_comma = tree.lastToken(field.ast.value_expr) + 1;
|
||||
|
||||
if (token_tags[maybe_comma] == .comma) {
|
||||
ais.pushIndent();
|
||||
try renderExpression(gpa, ais, tree, field.ast.value_expr, .none); // value
|
||||
ais.popIndent();
|
||||
try renderToken(ais, tree, maybe_comma, space);
|
||||
} else {
|
||||
ais.pushIndent();
|
||||
try renderExpression(gpa, ais, tree, field.ast.value_expr, space); // value
|
||||
ais.popIndent();
|
||||
}
|
||||
}
|
||||
|
||||
fn renderBuiltinCall(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user