zig fmt: function params should align nicely

This commit is contained in:
Andrew Kelley
2021-02-22 18:17:26 -07:00
parent fec51ad7c5
commit a6038f0375
2 changed files with 98 additions and 99 deletions

View File

@@ -3726,22 +3726,22 @@ test "zig fmt: C var args" {
);
}
//test "zig fmt: Only indent multiline string literals in function calls" {
// try testCanonical(
// \\test "zig fmt:" {
// \\ try testTransform(
// \\ \\const X = struct {
// \\ \\ foo: i32, bar: i8 };
// \\ ,
// \\ \\const X = struct {
// \\ \\ foo: i32, bar: i8
// \\ \\};
// \\ \\
// \\ );
// \\}
// \\
// );
//}
test "zig fmt: Only indent multiline string literals in function calls" {
try testCanonical(
\\test "zig fmt:" {
\\ try testTransform(
\\ \\const X = struct {
\\ \\ foo: i32, bar: i8 };
\\ ,
\\ \\const X = struct {
\\ \\ foo: i32, bar: i8
\\ \\};
\\ \\
\\ );
\\}
\\
);
}
test "zig fmt: Don't add extra newline after if" {
try testCanonical(
@@ -3806,68 +3806,66 @@ test "zig fmt: comments in ternary ifs" {
// \\
// );
//}
//
//test "zig fmt: Indent comma correctly after multiline string literals in arg list (trailing comma)" {
// try testCanonical(
// \\fn foo() void {
// \\ z.display_message_dialog(
// \\ *const [323:0]u8,
// \\ \\Message Text
// \\ \\------------
// \\ \\xxxxxxxxxxxx
// \\ \\xxxxxxxxxxxx
// \\ ,
// \\ g.GtkMessageType.GTK_MESSAGE_WARNING,
// \\ null,
// \\ );
// \\
// \\ z.display_message_dialog(*const [323:0]u8,
// \\ \\Message Text
// \\ \\------------
// \\ \\xxxxxxxxxxxx
// \\ \\xxxxxxxxxxxx
// \\ , g.GtkMessageType.GTK_MESSAGE_WARNING, null);
// \\}
// \\
// );
//}
//test "zig fmt: Control flow statement as body of blockless if" {
// try testCanonical(
// \\pub fn main() void {
// \\ const zoom_node = if (focused_node == layout_first)
// \\ if (it.next()) {
// \\ if (!node.view.pending.float and !node.view.pending.fullscreen) break node;
// \\ } else null
// \\ else
// \\ focused_node;
// \\
// \\ const zoom_node = if (focused_node == layout_first) while (it.next()) |node| {
// \\ if (!node.view.pending.float and !node.view.pending.fullscreen) break node;
// \\ } else null else
// \\ focused_node;
// \\
// \\ const zoom_node = if (focused_node == layout_first)
// \\ if (it.next()) {
// \\ if (!node.view.pending.float and !node.view.pending.fullscreen) break node;
// \\ } else null;
// \\
// \\ const zoom_node = if (focused_node == layout_first) while (it.next()) |node| {
// \\ if (!node.view.pending.float and !node.view.pending.fullscreen) break node;
// \\ };
// \\
// \\ const zoom_node = if (focused_node == layout_first) for (nodes) |node| {
// \\ break node;
// \\ };
// \\
// \\ const zoom_node = if (focused_node == layout_first) switch (nodes) {
// \\ 0 => 0,
// \\ } else
// \\ focused_node;
// \\}
// \\
// );
//}
test "zig fmt: Indent comma correctly after multiline string literals in arg list (trailing comma)" {
try testCanonical(
\\fn foo() void {
\\ z.display_message_dialog(
\\ *const [323:0]u8,
\\ \\Message Text
\\ \\------------
\\ \\xxxxxxxxxxxx
\\ \\xxxxxxxxxxxx
\\ ,
\\ g.GtkMessageType.GTK_MESSAGE_WARNING,
\\ null,
\\ );
\\
\\ z.display_message_dialog(*const [323:0]u8,
\\ \\Message Text
\\ \\------------
\\ \\xxxxxxxxxxxx
\\ \\xxxxxxxxxxxx
\\ , g.GtkMessageType.GTK_MESSAGE_WARNING, null);
\\}
\\
);
}
test "zig fmt: Control flow statement as body of blockless if" {
try testCanonical(
\\pub fn main() void {
\\ const zoom_node = if (focused_node == layout_first)
\\ if (it.next()) {
\\ if (!node.view.pending.float and !node.view.pending.fullscreen) break node;
\\ } else null
\\ else
\\ focused_node;
\\
\\ const zoom_node = if (focused_node == layout_first) while (it.next()) |node| {
\\ if (!node.view.pending.float and !node.view.pending.fullscreen) break node;
\\ } else null else focused_node;
\\
\\ const zoom_node = if (focused_node == layout_first)
\\ if (it.next()) {
\\ if (!node.view.pending.float and !node.view.pending.fullscreen) break node;
\\ } else null;
\\
\\ const zoom_node = if (focused_node == layout_first) while (it.next()) |node| {
\\ if (!node.view.pending.float and !node.view.pending.fullscreen) break node;
\\ };
\\
\\ const zoom_node = if (focused_node == layout_first) for (nodes) |node| {
\\ break node;
\\ };
\\
\\ const zoom_node = if (focused_node == layout_first) switch (nodes) {
\\ 0 => 0,
\\ } else focused_node;
\\}
\\
);
}
test "zig fmt: regression test for #5722" {
try testCanonical(
@@ -4058,21 +4056,21 @@ test "zig fmt: trailing comma should force multiline 1 column" {
);
}
//test "zig fmt: function params should align nicely" {
// try testCanonical(
// \\pub fn foo() void {
// \\ cases.addRuntimeSafety("slicing operator with sentinel",
// \\ \\const std = @import("std");
// \\ ++ check_panic_msg ++
// \\ \\pub fn main() void {
// \\ \\ var buf = [4]u8{'a','b','c',0};
// \\ \\ const slice = buf[0..:0];
// \\ \\}
// \\ );
// \\}
// \\
// );
//}
test "zig fmt: function params should align nicely" {
try testCanonical(
\\pub fn foo() void {
\\ cases.addRuntimeSafety("slicing operator with sentinel",
\\ \\const std = @import("std");
\\ ++ check_panic_msg ++
\\ \\pub fn main() void {
\\ \\ var buf = [4]u8{'a','b','c',0};
\\ \\ const slice = buf[0..:0];
\\ \\}
\\ );
\\}
\\
);
}
test "zig fmt: error for invalid bit range" {
try testError(

View File

@@ -197,11 +197,10 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
while (locked_indents > 0) : (locked_indents -= 1) ais.popIndent();
switch (space) {
.none => {},
.none, .space, .newline => {},
.semicolon => if (token_tags[i] == .semicolon) try renderToken(ais, tree, i, .newline),
.comma => if (token_tags[i] == .comma) try renderToken(ais, tree, i, .newline),
.comma_space => if (token_tags[i] == .comma) try renderToken(ais, tree, i, .space),
else => unreachable,
}
},
@@ -358,8 +357,8 @@ fn renderExpression(ais: *Ais, tree: ast.Tree, node: ast.Node.Index, space: Spac
ais.pushIndent();
try renderToken(ais, tree, op_token, .newline);
ais.popIndent();
ais.pushIndentOneShot();
}
ais.pushIndentOneShot();
return renderExpression(ais, tree, infix.rhs, space);
},
@@ -1868,7 +1867,6 @@ fn renderCall(
space: Space,
) Error!void {
const token_tags = tree.tokens.items(.tag);
const node_tags = tree.nodes.items(.tag);
const main_tokens = tree.nodes.items(.main_token);
if (call.async_token) |async_token| {
@@ -1895,7 +1893,8 @@ fn renderCall(
try renderExpression(ais, tree, param_node, .none);
// Unindent the comma for multiline string literals.
const is_multiline_string = node_tags[param_node] == .multiline_string_literal;
const is_multiline_string =
token_tags[tree.firstToken(param_node)] == .multiline_string_literal_line;
if (is_multiline_string) ais.popIndent();
const comma = tree.lastToken(param_node) + 1;
@@ -1915,7 +1914,8 @@ fn renderCall(
try renderToken(ais, tree, lparen, .none); // (
for (params) |param_node, i| {
const this_multiline_string = node_tags[param_node] == .multiline_string_literal;
const this_multiline_string =
token_tags[tree.firstToken(param_node)] == .multiline_string_literal_line;
if (this_multiline_string) {
ais.pushIndentOneShot();
}
@@ -1923,7 +1923,8 @@ fn renderCall(
if (i + 1 < params.len) {
const comma = tree.lastToken(param_node) + 1;
const next_multiline_string = node_tags[params[i + 1]] == .multiline_string_literal;
const next_multiline_string =
token_tags[tree.firstToken(params[i + 1])] == .multiline_string_literal_line;
const comma_space: Space = if (next_multiline_string) .none else .space;
try renderToken(ais, tree, comma, comma_space);
}