zig fmt: if condition wraps

This commit is contained in:
Andrew Kelley
2021-02-22 16:21:19 -07:00
parent 253906fb93
commit b301999cd3
2 changed files with 113 additions and 110 deletions

View File

@@ -1308,108 +1308,108 @@ test "zig fmt: 2nd arg multiline string" {
);
}
//test "zig fmt: 2nd arg multiline string many args" {
// try testCanonical(
// \\comptime {
// \\ cases.addAsm("hello world linux x86_64",
// \\ \\.text
// \\ , "Hello, world!\n", "Hello, world!\n");
// \\}
// \\
// );
//}
//
//test "zig fmt: final arg multiline string" {
// try testCanonical(
// \\comptime {
// \\ cases.addAsm("hello world linux x86_64", "Hello, world!\n",
// \\ \\.text
// \\ );
// \\}
// \\
// );
//}
//
//test "zig fmt: if condition wraps" {
// try testTransform(
// \\comptime {
// \\ if (cond and
// \\ cond) {
// \\ return x;
// \\ }
// \\ while (cond and
// \\ cond) {
// \\ return x;
// \\ }
// \\ if (a == b and
// \\ c) {
// \\ a = b;
// \\ }
// \\ while (a == b and
// \\ c) {
// \\ a = b;
// \\ }
// \\ if ((cond and
// \\ cond)) {
// \\ return x;
// \\ }
// \\ while ((cond and
// \\ cond)) {
// \\ return x;
// \\ }
// \\ var a = if (a) |*f| x: {
// \\ break :x &a.b;
// \\ } else |err| err;
// \\ var a = if (cond and
// \\ cond) |*f|
// \\ x: {
// \\ break :x &a.b;
// \\ } else |err| err;
// \\}
// ,
// \\comptime {
// \\ if (cond and
// \\ cond)
// \\ {
// \\ return x;
// \\ }
// \\ while (cond and
// \\ cond)
// \\ {
// \\ return x;
// \\ }
// \\ if (a == b and
// \\ c)
// \\ {
// \\ a = b;
// \\ }
// \\ while (a == b and
// \\ c)
// \\ {
// \\ a = b;
// \\ }
// \\ if ((cond and
// \\ cond))
// \\ {
// \\ return x;
// \\ }
// \\ while ((cond and
// \\ cond))
// \\ {
// \\ return x;
// \\ }
// \\ var a = if (a) |*f| x: {
// \\ break :x &a.b;
// \\ } else |err| err;
// \\ var a = if (cond and
// \\ cond) |*f|
// \\ x: {
// \\ break :x &a.b;
// \\ } else |err| err;
// \\}
// \\
// );
//}
test "zig fmt: 2nd arg multiline string many args" {
try testCanonical(
\\comptime {
\\ cases.addAsm("hello world linux x86_64",
\\ \\.text
\\ , "Hello, world!\n", "Hello, world!\n");
\\}
\\
);
}
test "zig fmt: final arg multiline string" {
try testCanonical(
\\comptime {
\\ cases.addAsm("hello world linux x86_64", "Hello, world!\n",
\\ \\.text
\\ );
\\}
\\
);
}
test "zig fmt: if condition wraps" {
try testTransform(
\\comptime {
\\ if (cond and
\\ cond) {
\\ return x;
\\ }
\\ while (cond and
\\ cond) {
\\ return x;
\\ }
\\ if (a == b and
\\ c) {
\\ a = b;
\\ }
\\ while (a == b and
\\ c) {
\\ a = b;
\\ }
\\ if ((cond and
\\ cond)) {
\\ return x;
\\ }
\\ while ((cond and
\\ cond)) {
\\ return x;
\\ }
\\ var a = if (a) |*f| x: {
\\ break :x &a.b;
\\ } else |err| err;
\\ var a = if (cond and
\\ cond) |*f|
\\ x: {
\\ break :x &a.b;
\\ } else |err| err;
\\}
,
\\comptime {
\\ if (cond and
\\ cond)
\\ {
\\ return x;
\\ }
\\ while (cond and
\\ cond)
\\ {
\\ return x;
\\ }
\\ if (a == b and
\\ c)
\\ {
\\ a = b;
\\ }
\\ while (a == b and
\\ c)
\\ {
\\ a = b;
\\ }
\\ if ((cond and
\\ cond))
\\ {
\\ return x;
\\ }
\\ while ((cond and
\\ cond))
\\ {
\\ return x;
\\ }
\\ var a = if (a) |*f| x: {
\\ break :x &a.b;
\\ } else |err| err;
\\ var a = if (cond and
\\ cond) |*f|
\\ x: {
\\ break :x &a.b;
\\ } else |err| err;
\\}
\\
);
}
//
//test "zig fmt: if condition has line break but must not wrap" {
// try testCanonical(

View File

@@ -499,10 +499,9 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
},
.grouped_expression => {
ais.pushIndentNextLine();
try renderToken(ais, tree, main_tokens[node], .none); // lparen
ais.pushIndentOneShot();
try renderExpression(ais, tree, datas[node].lhs, .none);
ais.popIndent();
return renderToken(ais, tree, datas[node].rhs, space); // rparen
},
@@ -981,13 +980,13 @@ fn renderWhile(ais: *Ais, tree: ast.Tree, while_node: ast.full.While, space: Spa
}
try renderToken(ais, tree, while_node.ast.while_token, .space); // if
try renderToken(ais, tree, while_node.ast.while_token + 1, .none); // (
try renderToken(ais, tree, while_node.ast.while_token + 1, .none); // lparen
try renderExpression(ais, tree, while_node.ast.cond_expr, .none); // condition
const then_tag = node_tags[while_node.ast.then_expr];
if (nodeIsBlock(then_tag) and !nodeIsIf(then_tag)) {
if (while_node.payload_token) |payload_token| {
try renderToken(ais, tree, payload_token - 2, .space); // )
try renderToken(ais, tree, payload_token - 2, .space); // rparen
try renderToken(ais, tree, payload_token - 1, .none); // |
const ident = blk: {
if (token_tags[payload_token] == .asterisk) {
@@ -1007,10 +1006,14 @@ fn renderWhile(ais: *Ais, tree: ast.Tree, while_node: ast.full.While, space: Spa
break :blk ident + 1;
}
};
try renderToken(ais, tree, pipe, .space); // |
const cond_has_newline = !tree.tokensOnSameLine(while_node.ast.while_token, pipe);
const brace_space: Space = if (cond_has_newline) .newline else .space;
try renderToken(ais, tree, pipe, brace_space); // |
} else {
const rparen = tree.lastToken(while_node.ast.cond_expr) + 1;
try renderToken(ais, tree, rparen, .space); // )
const cond_has_newline = !tree.tokensOnSameLine(while_node.ast.while_token, rparen);
const brace_space: Space = if (cond_has_newline) .newline else .space;
try renderToken(ais, tree, rparen, brace_space); // rparen
}
if (while_node.ast.cont_expr != 0) {
const rparen = tree.lastToken(while_node.ast.cont_expr) + 1;
@@ -1040,7 +1043,7 @@ fn renderWhile(ais: *Ais, tree: ast.Tree, while_node: ast.full.While, space: Spa
if (src_has_newline) {
if (while_node.payload_token) |payload_token| {
try renderToken(ais, tree, payload_token - 2, .space); // )
try renderToken(ais, tree, payload_token - 2, .space); // rparen
try renderToken(ais, tree, payload_token - 1, .none); // |
const ident = blk: {
if (token_tags[payload_token] == .asterisk) {
@@ -1063,7 +1066,7 @@ fn renderWhile(ais: *Ais, tree: ast.Tree, while_node: ast.full.While, space: Spa
try renderToken(ais, tree, pipe, .newline); // |
} else {
ais.pushIndent();
try renderToken(ais, tree, rparen, .newline); // )
try renderToken(ais, tree, rparen, .newline); // rparen
ais.popIndent();
}
if (while_node.ast.cont_expr != 0) {