help: print byte slice defaults as strings

There are a couple of other places where []u8 is treated implicitly
like a string, which isn't strictly correct. Ultimately, some kind of
metasignal will be required to make this type truly unambiguous in
interpretation.
This commit is contained in:
torque 2023-08-04 00:12:26 -07:00
parent adf05ca489
commit 86342bcd1f
Signed by: torque
SSH Key Fingerprint: SHA256:nCrXefBNo6EbjNSQhv0nXmEg/VuNq3sMF5b8zETw3Tk

View File

@ -226,7 +226,7 @@ pub fn HelpBuilder(comptime command: anytype) type {
defer pairs.deinit(); defer pairs.deinit();
var just: usize = 0; var just: usize = 0;
inline for (comptime help_info.arguments) |arg| { inline for (comptime help_info.arguments) |arg| {
if (comptime arg.description.len == 0) continue; if (comptime arg.description.len == 0) continue;
const pair: AlignablePair = .{ const pair: AlignablePair = .{
@ -471,7 +471,17 @@ pub fn opt_info(comptime command: anytype) CommandHelp {
// TODO: this is only acceptable for some types. It behaves poorly on // TODO: this is only acceptable for some types. It behaves poorly on
// enum-based choice types because it prints the whole type name rather // enum-based choice types because it prints the whole type name rather
// than just the tag name. Roll our own eventually. // than just the tag name. Roll our own eventually.
writer.print("{any}", .{def}) catch @compileError("whoah"); blk: {
switch (@typeInfo(@TypeOf(def))) {
.Pointer => |info| if (info.size == .Slice and info.child == u8) {
writer.print("{s}", .{def}) catch @compileError("no");
break :blk;
},
else => {},
}
writer.print("{any}", .{def}) catch @compileError("whoah");
}
last_option.default = buf.buffer; last_option.default = buf.buffer;
} }
} }