diff --git a/lib/std/fmt.zig b/lib/std/fmt.zig index 64c9006fe443ec1f13681fc6b67a5e4678ac4877..e0d58a23e6e848fcd028c1ee33a79aecb03ae20c 100644 --- a/lib/std/fmt.zig +++ b/lib/std/fmt.zig @@ -365,14 +365,21 @@ pub fn formatType( try output(context, "error."); return output(context, @errorName(value)); }, - .Enum => { + .Enum => |enumInfo| { if (comptime std.meta.trait.hasFn("format")(T)) { return value.format(fmt, options, context, Errors, output); } try output(context, @typeName(T)); - try output(context, "."); - return formatType(@tagName(value), "", options, context, Errors, output, max_depth); + if (enumInfo.is_exhaustive) { + try output(context, "."); + return formatType(@tagName(value), "", options, context, Errors, output, max_depth); + } else { + // TODO: when @tagName works on exhaustive enums print known enum strings + try output(context, "("); + try formatType(@enumToInt(value), "", options, context, Errors, output, max_depth); + try output(context, ")"); + } }, .Union => { if (comptime std.meta.trait.hasFn("format")(T)) {