| ... | ... | @@ -362,12 +362,21 @@ pub fn formatType( |
| 362 | 362 | if (enumInfo.is_exhaustive) { |
| 363 | 363 | try out_stream.writeAll("."); |
| 364 | 364 | try out_stream.writeAll(@tagName(value)); |
| 365 | | } else { |
| 366 | | // TODO: when @tagName works on exhaustive enums print known enum strings |
| 367 | | try out_stream.writeAll("("); |
| 368 | | try formatType(@enumToInt(value), fmt, options, out_stream, max_depth); |
| 369 | | try out_stream.writeAll(")"); |
| 365 | return; |
| 366 | } |
| 367 | |
| 368 | // Use @tagName only if value is one of known fields |
| 369 | inline for (enumInfo.fields) |enumField| { |
| 370 | if (@enumToInt(value) == enumField.value) { |
| 371 | try out_stream.writeAll("."); |
| 372 | try out_stream.writeAll(@tagName(value)); |
| 373 | return; |
| 374 | } |
| 370 | 375 | } |
| 376 | |
| 377 | try out_stream.writeAll("("); |
| 378 | try formatType(@enumToInt(value), fmt, options, out_stream, max_depth); |
| 379 | try out_stream.writeAll(")"); |
| 371 | 380 | }, |
| 372 | 381 | .Union => { |
| 373 | 382 | try out_stream.writeAll(@typeName(T)); |
| ... | ... | @@ -1308,6 +1317,8 @@ test "enum" { |
| 1308 | 1317 | const value = Enum.Two; |
| 1309 | 1318 | try testFmt("enum: Enum.Two\n", "enum: {}\n", .{value}); |
| 1310 | 1319 | try testFmt("enum: Enum.Two\n", "enum: {}\n", .{&value}); |
| 1320 | try testFmt("enum: Enum.One\n", "enum: {x}\n", .{Enum.One}); |
| 1321 | try testFmt("enum: Enum.Two\n", "enum: {X}\n", .{Enum.Two}); |
| 1311 | 1322 | } |
| 1312 | 1323 | |
| 1313 | 1324 | test "non-exhaustive enum" { |
| ... | ... | @@ -1316,11 +1327,12 @@ test "non-exhaustive enum" { |
| 1316 | 1327 | Two = 0xbeef, |
| 1317 | 1328 | _, |
| 1318 | 1329 | }; |
| 1319 | | try testFmt("enum: Enum(15)\n", "enum: {}\n", .{Enum.One}); |
| 1320 | | try testFmt("enum: Enum(48879)\n", "enum: {}\n", .{Enum.Two}); |
| 1330 | try testFmt("enum: Enum.One\n", "enum: {}\n", .{Enum.One}); |
| 1331 | try testFmt("enum: Enum.Two\n", "enum: {}\n", .{Enum.Two}); |
| 1321 | 1332 | try testFmt("enum: Enum(4660)\n", "enum: {}\n", .{@intToEnum(Enum, 0x1234)}); |
| 1322 | | try testFmt("enum: Enum(f)\n", "enum: {x}\n", .{Enum.One}); |
| 1323 | | try testFmt("enum: Enum(beef)\n", "enum: {x}\n", .{Enum.Two}); |
| 1333 | try testFmt("enum: Enum.One\n", "enum: {x}\n", .{Enum.One}); |
| 1334 | try testFmt("enum: Enum.Two\n", "enum: {x}\n", .{Enum.Two}); |
| 1335 | try testFmt("enum: Enum.Two\n", "enum: {X}\n", .{Enum.Two}); |
| 1324 | 1336 | try testFmt("enum: Enum(1234)\n", "enum: {x}\n", .{@intToEnum(Enum, 0x1234)}); |
| 1325 | 1337 | } |
| 1326 | 1338 | |