diff --git a/src/build/bash_completions.zig b/src/build/bash_completions.zig index 02da91ac4..0e27a9be6 100644 --- a/src/build/bash_completions.zig +++ b/src/build/bash_completions.zig @@ -181,12 +181,29 @@ fn writeBashCompletions(writer: anytype) !void { .Bool => try writer.writeAll("return ;;"), .Enum => |info| { try writer.writeAll(compgenPrefix); - for (info.opts, 0..) |f, i| { + for (info.fields, 0..) |f, i| { if (i > 0) try writer.writeAll(" "); try writer.writeAll(f.name); } try writer.writeAll(compgenSuffix); }, + .Optional => |optional| { + switch (@typeInfo(optional.child)) { + .Enum => |info| { + try writer.writeAll(compgenPrefix); + for (info.fields, 0..) |f, i| { + if (i > 0) try writer.writeAll(" "); + try writer.writeAll(f.name); + } + try writer.writeAll(compgenSuffix); + }, + else => { + if (std.mem.eql(u8, "config-file", opt.name)) { + try writer.writeAll("return ;;"); + } else try writer.writeAll("return;;"); + }, + } + }, else => { if (std.mem.eql(u8, "config-file", opt.name)) { try writer.writeAll("return ;;"); diff --git a/src/build/fish_completions.zig b/src/build/fish_completions.zig index 049ff06be..a06199256 100644 --- a/src/build/fish_completions.zig +++ b/src/build/fish_completions.zig @@ -117,12 +117,25 @@ fn writeFishCompletions(writer: anytype) !void { .Bool => try writer.writeAll(" -a \"true false\""), .Enum => |info| { try writer.writeAll(" -a \""); - for (info.opts, 0..) |f, i| { + for (info.fields, 0..) |f, i| { if (i > 0) try writer.writeAll(" "); try writer.writeAll(f.name); } try writer.writeAll("\""); }, + .Optional => |optional| { + switch (@typeInfo(optional.child)) { + .Enum => |info| { + try writer.writeAll(" -a \""); + for (info.fields, 0..) |f, i| { + if (i > 0) try writer.writeAll(" "); + try writer.writeAll(f.name); + } + try writer.writeAll("\""); + }, + else => {}, + } + }, else => {}, } try writer.writeAll("\n"); diff --git a/src/build/zsh_completions.zig b/src/build/zsh_completions.zig index d03ff1a06..a451c7175 100644 --- a/src/build/zsh_completions.zig +++ b/src/build/zsh_completions.zig @@ -175,12 +175,29 @@ fn writeZshCompletions(writer: anytype) !void { .Bool => try writer.writeAll("(true false)"), .Enum => |info| { try writer.writeAll("("); - for (info.opts, 0..) |f, i| { + for (info.fields, 0..) |f, i| { if (i > 0) try writer.writeAll(" "); try writer.writeAll(f.name); } try writer.writeAll(")"); }, + .Optional => |optional| { + switch (@typeInfo(optional.child)) { + .Enum => |info| { + try writer.writeAll("("); + for (info.fields, 0..) |f, i| { + if (i > 0) try writer.writeAll(" "); + try writer.writeAll(f.name); + } + try writer.writeAll(")"); + }, + else => { + if (std.mem.eql(u8, "config-file", opt.name)) { + try writer.writeAll("_files"); + } else try writer.writeAll("( )"); + }, + } + }, else => { if (std.mem.eql(u8, "config-file", opt.name)) { try writer.writeAll("_files");