Small cleanup to cli formatting

This commit is contained in:
Brian Picciano 2024-12-10 16:35:14 +01:00
parent 10758f11a2
commit 1c1b05db06

View File

@ -36,6 +36,14 @@ type subCmd struct {
passthroughArgs bool passthroughArgs bool
} }
func (c subCmd) fullName() string {
name := c.name
if c.plural != "" {
name += "(" + c.plural + ")"
}
return name
}
type subCmdCtxOpts struct { type subCmdCtxOpts struct {
args []string // command-line arguments, excluding the subCmd itself. args []string // command-line arguments, excluding the subCmd itself.
subCmdNames []string // names of subCmds so far, including this one subCmdNames []string // names of subCmds so far, including this one
@ -97,7 +105,7 @@ func usagePrefix(subCmdNames []string) string {
subCmdNamesStr += " " subCmdNamesStr += " "
} }
return fmt.Sprintf("\nUSAGE: %s %s", os.Args[0], subCmdNamesStr) return fmt.Sprintf("USAGE:\n %s %s", os.Args[0], subCmdNamesStr)
} }
func (ctx subCmdCtx) getDaemonRPC() daemon.RPC { func (ctx subCmdCtx) getDaemonRPC() daemon.RPC {
@ -144,6 +152,12 @@ func (ctx subCmdCtx) withParsedFlags() (subCmdCtx, error) {
}) })
ctx.flags.Usage = func() { ctx.flags.Usage = func() {
if ctx.subCmd.descr != "" {
fmt.Fprintf(
os.Stderr, "\nDESCRIPTION:\n %s\n\n", ctx.subCmd.descr,
)
}
var passthroughStr string var passthroughStr string
if ctx.subCmd.passthroughArgs { if ctx.subCmd.passthroughArgs {
passthroughStr = " [--] [args...]" passthroughStr = " [--] [args...]"
@ -153,8 +167,9 @@ func (ctx subCmdCtx) withParsedFlags() (subCmdCtx, error) {
os.Stderr, "%s[-h|--help] [%s flags...]%s\n\n", os.Stderr, "%s[-h|--help] [%s flags...]%s\n\n",
usagePrefix(ctx.opts.subCmdNames), ctx.subCmd.name, passthroughStr, usagePrefix(ctx.opts.subCmdNames), ctx.subCmd.name, passthroughStr,
) )
fmt.Fprintf( fmt.Fprintf(
os.Stderr, "%s FLAGS:\n\n", strings.ToUpper(ctx.subCmd.name), os.Stderr, "%s FLAGS:\n", strings.ToUpper(ctx.subCmd.name),
) )
fmt.Fprintln(os.Stderr, ctx.flags.FlagUsages()) fmt.Fprintln(os.Stderr, ctx.flags.FlagUsages())
@ -176,22 +191,39 @@ func (ctx subCmdCtx) doSubCmd(subCmds ...subCmd) error {
printUsageExit := func(subCmdName string) { printUsageExit := func(subCmdName string) {
fmt.Fprintf(os.Stderr, "unknown sub-command %q\n", subCmdName) fmt.Fprintf(os.Stderr, "unknown sub-command %q\n\n", subCmdName)
if ctx.subCmd.descr != "" {
fmt.Fprintf(
os.Stderr, "DESCRIPTION:\n %s\n\n", ctx.subCmd.descr,
)
}
fmt.Fprintf( fmt.Fprintf(
os.Stderr, os.Stderr,
"%s<subCmd> [-h|--help] [sub-command flags...]\n", "%s<subCmd> [-h|--help] [sub-command flags...]\n\n",
usagePrefix(ctx.opts.subCmdNames), usagePrefix(ctx.opts.subCmdNames),
) )
fmt.Fprintf(os.Stderr, "\nSUB-COMMANDS:\n\n") fmt.Fprintf(os.Stderr, "SUB-COMMANDS:\n")
var maxNameLen int
for _, subCmd := range subCmds {
l := len(subCmd.fullName())
if l > maxNameLen {
maxNameLen = l
}
}
for _, subCmd := range subCmds { for _, subCmd := range subCmds {
name := subCmd.name var (
if subCmd.plural != "" { name = subCmd.fullName()
name += "(" + subCmd.plural + ")" padding = strings.Repeat(" ", maxNameLen-len(name)+3)
} )
fmt.Fprintf(os.Stderr, " %s\t%s\n", name, subCmd.descr)
fmt.Fprintf(
os.Stderr, " %s%s%s\n", name, padding, subCmd.descr,
)
} }
fmt.Fprintf(os.Stderr, "\n") fmt.Fprintf(os.Stderr, "\n")