From 69f550884a03c775538d52c3e8cbbfbddc3d7e16 Mon Sep 17 00:00:00 2001 From: Celestino Amoroso Date: Thu, 22 Jan 2026 12:36:33 +0100 Subject: [PATCH] added program name and description to the help output --- cli-usage.go | 6 ++++++ cli.go | 27 ++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/cli-usage.go b/cli-usage.go index 606da6c..dbb2e97 100644 --- a/cli-usage.go +++ b/cli-usage.go @@ -11,6 +11,12 @@ func (cli *CliParser) Usage() string { var sb strings.Builder program, _ := cli.GetVersionSection("program") + fmt.Fprint(&sb, "NAME", program) + if cli.description != "" { + fmt.Fprint(&sb, "-", cli.description) + } + sb.WriteByte('\n') + publicCount := cli.publicOptionCount() if publicCount > 0 { fmt.Fprintf(&sb, "USAGE: %s [] %s\n", program, cli.getArgsTemplate()) diff --git a/cli.go b/cli.go index 8cad3ba..afea65f 100644 --- a/cli.go +++ b/cli.go @@ -2,6 +2,7 @@ package cli import ( "fmt" + "strings" ) type CliOptionTracer interface { @@ -38,17 +39,33 @@ type OptReference interface { } type CliParser struct { - version string - options []cliOptionParser - argSpecs []argSpec - cliArgs []string + description string + version string + options []cliOptionParser + argSpecs []argSpec + cliArgs []string } -func (cli *CliParser) Init(argv []string, version string) { +func (cli *CliParser) Init(argv []string, version string, description string) { cli.version = version + cli.description = description cli.cliArgs = argv } +func (cli *CliParser) GetOption(name string) (ref OptReference) { + var opt cliOptionParser + if strings.HasPrefix(name, "-") { + opt = cli.findOptionByArg(name) + } else { + opt = cli.findOptionByName(name) + } + if opt != nil { + ref = opt.(OptReference) + } + return ref + +} + func (cli *CliParser) SetIncompatibleOption(optName string, incompatibleOptNames ...string) error { var opti cliOptionParser if opti = cli.findOptionByName(optName); opti == nil {