From d7bb20f297ad7e7692509630bf3dee3547c69286 Mon Sep 17 00:00:00 2001 From: Alec Thomas Date: Sat, 19 May 2018 22:15:14 +1000 Subject: [PATCH] Factor out duplicate value reset code. --- kong.go | 15 +++------------ model.go | 8 ++++++++ 2 files changed, 11 insertions(+), 12 deletions(-) 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 {