commit 4496a6c9cccbd6a9c82b5d4ca7f533b18ebeab32 (tree)
parent 1aacedf6e197ea212025dccad622894a44eb5461
Author: Lachlan Easton <lachlan@lakebythewoods.xyz>
Date: Tue, 15 Sep 2020 18:49:59 +1000
zig fmt: Special case un-indent comma after multiline string in param list
Diffstat:
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig
@@ -1374,7 +1374,7 @@ test "zig fmt: multiline string parameter in fn call with trailing comma" {
\\ \\ZIG_C_HEADER_FILES {}
\\ \\ZIG_DIA_GUIDS_LIB {}
\\ \\
- \\ ,
+ \\ ,
\\ std.cstr.toSliceConst(c.ZIG_CMAKE_BINARY_DIR),
\\ std.cstr.toSliceConst(c.ZIG_CXX_COMPILER),
\\ std.cstr.toSliceConst(c.ZIG_DIA_GUIDS_LIB),
@@ -3385,10 +3385,17 @@ test "zig fmt: Indent comma correctly after multiline string literals in arg lis
\\ \\------------
\\ \\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);
\\}
\\
);
diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig
@@ -1071,6 +1071,13 @@ fn renderExpression(
if (i + 1 < params.len) {
const next_node = params[i + 1];
try renderExpression(allocator, ais, tree, param_node, Space.None);
+
+ // Unindent the comma for multiline string literals
+ const maybe_multiline_string = param_node.firstToken();
+ const is_multiline_string = tree.token_ids[maybe_multiline_string] == .MultilineStringLiteralLine;
+ if (is_multiline_string) ais.popIndent();
+ defer if (is_multiline_string) ais.pushIndent();
+
const comma = tree.nextToken(param_node.lastToken());
try renderToken(tree, ais, comma, Space.Newline); // ,
try renderExtraNewline(tree, ais, next_node);