| ... | @@ -495,6 +495,22 @@ pub fn formatType( | ... | @@ -495,6 +495,22 @@ pub fn formatType( |
| 495 | } | 495 | } |
| 496 | }, | 496 | }, |
| 497 | .Struct => |info| { | 497 | .Struct => |info| { |
| | 498 | if (info.is_tuple) { |
| | 499 | // Skip the type and field names when formatting tuples. |
| | 500 | if (max_depth == 0) { |
| | 501 | return writer.writeAll("{ ... }"); |
| | 502 | } |
| | 503 | try writer.writeAll("{"); |
| | 504 | inline for (info.fields) |f, i| { |
| | 505 | if (i == 0) { |
| | 506 | try writer.writeAll(" "); |
| | 507 | } else { |
| | 508 | try writer.writeAll(", "); |
| | 509 | } |
| | 510 | try formatType(@field(value, f.name), ANY, options, writer, max_depth - 1); |
| | 511 | } |
| | 512 | return writer.writeAll(" }"); |
| | 513 | } |
| 498 | try writer.writeAll(@typeName(T)); | 514 | try writer.writeAll(@typeName(T)); |
| 499 | if (max_depth == 0) { | 515 | if (max_depth == 0) { |
| 500 | return writer.writeAll("{ ... }"); | 516 | return writer.writeAll("{ ... }"); |
| ... | @@ -2164,6 +2180,10 @@ test "struct" { | ... | @@ -2164,6 +2180,10 @@ test "struct" { |
| 2164 | }; | 2180 | }; |
| 2165 | | 2181 | |
| 2166 | try expectFmt("S{ .a = 456, .b = error.Unused }", "{}", .{inst}); | 2182 | try expectFmt("S{ .a = 456, .b = error.Unused }", "{}", .{inst}); |
| | 2183 | // Tuples |
| | 2184 | try expectFmt("{ }", "{}", .{.{}}); |
| | 2185 | try expectFmt("{ -1 }", "{}", .{.{-1}}); |
| | 2186 | try expectFmt("{ -1, 42, 2.5e+04 }", "{}", .{.{ -1, 42, 0.25e5 }}); |
| 2167 | } | 2187 | } |
| 2168 | | 2188 | |
| 2169 | test "union" { | 2189 | test "union" { |