Merge pull request #13 from walle/show_builtin
Add built ins to options in help output
This commit is contained in:
commit
5db9c77fa3
6
parse.go
6
parse.go
|
@ -19,6 +19,7 @@ type spec struct {
|
|||
positional bool
|
||||
help string
|
||||
wasPresent bool
|
||||
isBool bool
|
||||
}
|
||||
|
||||
// ErrHelp indicates that -h or --help were provided
|
||||
|
@ -100,6 +101,11 @@ func NewParser(dests ...interface{}) (*Parser, error) {
|
|||
return nil, fmt.Errorf("%s.%s: %s fields are not supported", t.Name(), field.Name, scalarType.Kind())
|
||||
}
|
||||
|
||||
// Specify that it is a bool for usage
|
||||
if scalarType.Kind() == reflect.Bool {
|
||||
spec.isBool = true
|
||||
}
|
||||
|
||||
// Look at the tag
|
||||
if tag != "" {
|
||||
for _, key := range strings.Split(tag, ",") {
|
||||
|
|
46
usage.go
46
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)
|
||||
|
|
|
@ -23,6 +23,7 @@ options:
|
|||
--dataset DATASET dataset to use
|
||||
--optimize OPTIMIZE, -O OPTIMIZE
|
||||
optimization level
|
||||
--help, -h display this help and exit
|
||||
`
|
||||
var args struct {
|
||||
Input string `arg:"positional"`
|
||||
|
|
Loading…
Reference in New Issue