Start making help slightly configurable.

This commit is contained in:
Alec Thomas
2018-06-20 21:51:56 +10:00
parent 3a2f3eebdd
commit 653531d6bc
9 changed files with 173 additions and 77 deletions
+14 -5
View File
@@ -43,6 +43,7 @@ type Kong struct {
registry *Registry
noDefaultHelp bool
help func(*Context) error
helpOptions []HelpOption
// Set temporarily by Options. These are applied after build().
postBuildOptions []Option
@@ -58,12 +59,17 @@ func New(grammar interface{}, options ...Option) (*Kong, error) {
Stderr: os.Stderr,
before: map[reflect.Value]HookFunc{},
registry: NewRegistry().RegisterDefaults(),
help: PrintHelp,
resolvers: []ResolverFunc{Envars()},
}
for _, option := range options {
option(k)
if err := option(k); err != nil {
return nil, err
}
}
if k.help == nil {
k.help = HelpPrinter(k.helpOptions...)
}
model, err := build(k, grammar)
@@ -74,8 +80,11 @@ func New(grammar interface{}, options ...Option) (*Kong, error) {
k.Model = model
for _, option := range k.postBuildOptions {
option(k)
if err := option(k); err != nil {
return nil, err
}
}
k.postBuildOptions = nil
return k, nil
}
@@ -98,14 +107,14 @@ func (k *Kong) extraFlags() []*Flag {
}
helpFlag.Flag = helpFlag
hook := Hook(&helpValue, func(ctx *Context, path *Path) error {
err := PrintHelp(ctx)
err := k.help(ctx)
if err != nil {
return err
}
k.Exit(1)
return nil
})
hook(k)
_ = hook(k)
return []*Flag{helpFlag}
}