diff --git a/kong.go b/kong.go index d03cb5b..0364fd7 100644 --- a/kong.go +++ b/kong.go @@ -5,7 +5,6 @@ import ( "io" "os" "path/filepath" - "reflect" "strings" "text/template" ) @@ -75,23 +74,15 @@ func (k *Kong) Parse(args []string) (command string, err error) { // Recursively reset values to defaults (as specified in the grammar) or the zero value. func (k *Kong) reset(node *Node) { for _, flag := range node.Flags { - flag.Value.Value.Set(reflect.Zero(flag.Value.Value.Type())) - if flag.Default != "" { - flag.Decode(Scan(flag.Default)) - flag.Set = false - } + flag.Value.Reset() } for _, pos := range node.Positional { - pos.Value.Set(reflect.Zero(pos.Value.Type())) - if pos.Default != "" { - pos.Decode(Scan(pos.Default)) - pos.Set = false - } + pos.Reset() } for _, branch := range node.Children { if branch.Argument != nil { arg := branch.Argument.Argument - arg.Value.Set(reflect.Zero(arg.Value.Type())) + arg.Reset() k.reset(&branch.Argument.Node) } else { k.reset(branch.Command) diff --git a/model.go b/model.go index 6a0fcf5..efa27aa 100644 --- a/model.go +++ b/model.go @@ -42,6 +42,14 @@ func (v *Value) Decode(scan *Scanner) error { return err } +func (v *Value) Reset() { + v.Value.Set(reflect.Zero(v.Value.Type())) + if v.Default != "" { + v.Decode(Scan(v.Default)) + v.Set = false + } +} + type Positional = Value type Argument struct {