Commit 4496a6c9cc

Lachlan Easton <lachlan@lakebythewoods.xyz>
2020-09-15 10:49:59
zig fmt: Special case un-indent comma after multiline string in param list
1 parent 1aacedf
Changed files (2)
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);
         \\}
         \\
     );
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);