summaryrefslogtreecommitdiff
path: root/usage.go
diff options
context:
space:
mode:
authorFredrik Wallgren <[email protected]>2015-11-11 10:15:57 +0100
committerFredrik Wallgren <[email protected]>2015-11-16 13:23:58 +0100
commit330a0da571888c4ec6dac345140a7ee663d00d6e (patch)
treedcef4a491306c39ad6f300aa5885d37d7a333a3d /usage.go
parentc4704194de65e09b88ebae2f2c81ee4e0a3be5d8 (diff)
Add built ins to options in help output
Adds help to the options in help output with an easy way to add more built ins.
Diffstat (limited to 'usage.go')
-rw-r--r--usage.go44
1 files changed, 24 insertions, 20 deletions
diff --git a/usage.go b/usage.go
index 824f0eb..9404015 100644
--- a/usage.go
+++ b/usage.go
@@ -5,7 +5,6 @@ import (
"io"
"os"
"path/filepath"
- "reflect"
"strings"
)
@@ -78,30 +77,35 @@ func (p *Parser) WriteHelp(w io.Writer) {
}
// write the list of options
- if len(options) > 0 {
- fmt.Fprint(w, "\noptions:\n")
- const colWidth = 25
- for _, spec := range options {
- left := " " + synopsis(spec, "--"+spec.long)
- if spec.short != "" {
- left += ", " + synopsis(spec, "-"+spec.short)
- }
- fmt.Fprint(w, left)
- if spec.help != "" {
- if len(left)+2 < colWidth {
- fmt.Fprint(w, strings.Repeat(" ", colWidth-len(left)))
- } else {
- fmt.Fprint(w, "\n"+strings.Repeat(" ", colWidth))
- }
- fmt.Fprint(w, spec.help)
- }
- fmt.Fprint(w, "\n")
+ fmt.Fprint(w, "\noptions:\n")
+ for _, spec := range options {
+ printOption(w, spec)
+ }
+
+ // write the list of built in options
+ printOption(w, &spec{isBool: true, long: "help", short: "h", help: "display this help and exit"})
+}
+
+func printOption(w io.Writer, spec *spec) {
+ const colWidth = 25
+ left := " " + synopsis(spec, "--"+spec.long)
+ if spec.short != "" {
+ left += ", " + synopsis(spec, "-"+spec.short)
+ }
+ fmt.Fprint(w, left)
+ if spec.help != "" {
+ if len(left)+2 < colWidth {
+ fmt.Fprint(w, strings.Repeat(" ", colWidth-len(left)))
+ } else {
+ fmt.Fprint(w, "\n"+strings.Repeat(" ", colWidth))
}
+ fmt.Fprint(w, spec.help)
}
+ fmt.Fprint(w, "\n")
}
func synopsis(spec *spec, form string) string {
- if spec.dest.Kind() == reflect.Bool {
+ if spec.isBool {
return form
}
return form + " " + strings.ToUpper(spec.long)