| ... | ... | @@ -359,11 +359,28 @@ pub fn formatType( |
| 359 | 359 | }, |
| 360 | 360 | .Enum => |enumInfo| { |
| 361 | 361 | try out_stream.writeAll(@typeName(T)); |
| 362 | |
| 363 | var has_name: bool = undefined; |
| 362 | 364 | if (enumInfo.is_exhaustive) { |
| 365 | has_name = true; |
| 366 | } else { |
| 367 | // TODO: when @tagName works on exhaustive enums print known enum strings |
| 368 | has_name = false; |
| 369 | } |
| 370 | |
| 371 | var use_name = has_name; |
| 372 | if (comptime std.mem.eql(u8, fmt, "x") or |
| 373 | comptime std.mem.eql(u8, fmt, "X") or |
| 374 | comptime std.mem.eql(u8, fmt, "d") or |
| 375 | comptime std.mem.eql(u8, fmt, "b")) |
| 376 | { |
| 377 | use_name = false; |
| 378 | } |
| 379 | |
| 380 | if (use_name) { |
| 363 | 381 | try out_stream.writeAll("."); |
| 364 | 382 | try out_stream.writeAll(@tagName(value)); |
| 365 | 383 | } else { |
| 366 | | // TODO: when @tagName works on exhaustive enums print known enum strings |
| 367 | 384 | try out_stream.writeAll("("); |
| 368 | 385 | try formatType(@enumToInt(value), fmt, options, out_stream, max_depth); |
| 369 | 386 | try out_stream.writeAll(")"); |
| ... | ... | @@ -1308,6 +1325,8 @@ test "enum" { |
| 1308 | 1325 | const value = Enum.Two; |
| 1309 | 1326 | try testFmt("enum: Enum.Two\n", "enum: {}\n", .{value}); |
| 1310 | 1327 | try testFmt("enum: Enum.Two\n", "enum: {}\n", .{&value}); |
| 1328 | try testFmt("enum: Enum(0)\n", "enum: {x}\n", .{Enum.One}); |
| 1329 | try testFmt("enum: Enum(1)\n", "enum: {X}\n", .{Enum.Two}); |
| 1311 | 1330 | } |
| 1312 | 1331 | |
| 1313 | 1332 | test "non-exhaustive enum" { |
| ... | ... | @@ -1321,6 +1340,7 @@ test "non-exhaustive enum" { |
| 1321 | 1340 | try testFmt("enum: Enum(4660)\n", "enum: {}\n", .{@intToEnum(Enum, 0x1234)}); |
| 1322 | 1341 | try testFmt("enum: Enum(f)\n", "enum: {x}\n", .{Enum.One}); |
| 1323 | 1342 | try testFmt("enum: Enum(beef)\n", "enum: {x}\n", .{Enum.Two}); |
| 1343 | try testFmt("enum: Enum(BEEF)\n", "enum: {X}\n", .{Enum.Two}); |
| 1324 | 1344 | try testFmt("enum: Enum(1234)\n", "enum: {x}\n", .{@intToEnum(Enum, 0x1234)}); |
| 1325 | 1345 | } |
| 1326 | 1346 | |