Rename Value.Value to Value.Target to correctly reflect its purpose.

This commit is contained in:
Alec Thomas
2018-06-13 21:12:56 +10:00
parent 29fe92f286
commit c7dca86dad
6 changed files with 23 additions and 16 deletions
+1 -1
View File
@@ -131,7 +131,7 @@ func buildField(k *Kong, node *Node, v reflect.Value, ft reflect.StructField, fv
Default: tag.Default, Default: tag.Default,
Mapper: mapper, Mapper: mapper,
Tag: tag, Tag: tag,
Value: fv, Target: fv,
// Flags are optional by default, and args are required by default. // Flags are optional by default, and args are required by default.
Required: (!tag.Arg && tag.Required) || (tag.Arg && !tag.Optional), Required: (!tag.Arg && tag.Required) || (tag.Arg && !tag.Optional),
+1 -1
View File
@@ -197,7 +197,7 @@ func formatFlag(haveShort bool, flag *Flag) string {
if !isBool { if !isBool {
flagString += fmt.Sprintf("=%s", flag.FormatPlaceHolder()) flagString += fmt.Sprintf("=%s", flag.FormatPlaceHolder())
} }
if flag.Value.Value.Kind() == reflect.Slice { if flag.Value.Target.Kind() == reflect.Slice {
flagString += " ..." flagString += " ..."
} }
return flagString return flagString
+3 -3
View File
@@ -90,7 +90,7 @@ func (k *Kong) extraFlags() []*Flag {
Value: &Value{ Value: &Value{
Name: "help", Name: "help",
Help: "Show context-sensitive help.", Help: "Show context-sensitive help.",
Value: value, Target: value,
Tag: &Tag{}, Tag: &Tag{},
Mapper: k.registry.ForValue(value), Mapper: k.registry.ForValue(value),
}, },
@@ -152,9 +152,9 @@ func (k *Kong) applyHooks(ctx *Context) error {
case trace.Command != nil: case trace.Command != nil:
key = trace.Command.Target key = trace.Command.Target
case trace.Positional != nil: case trace.Positional != nil:
key = trace.Positional.Value key = trace.Positional.Target
case trace.Flag != nil: case trace.Flag != nil:
key = trace.Flag.Value.Value key = trace.Flag.Value.Target
default: default:
panic("unsupported Path") panic("unsupported Path")
} }
+4 -3
View File
@@ -391,12 +391,13 @@ func TestDuplicateFlagChoosesLast(t *testing.T) {
require.Equal(t, 2, cli.Flag) require.Equal(t, 2, cli.Flag)
} }
func TestDuplicateSliceDoesNotAccumulate(t *testing.T) { func TestDuplicateSliceAccumulates(t *testing.T) {
var cli struct { var cli struct {
Flag []int Flag []int
} }
_, err := mustNew(t, &cli).Parse([]string{"--flag=1,2", "--flag=3,4"}) args := []string{"--flag=1,2", "--flag=3,4"}
_, err := mustNew(t, &cli).Parse(args)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, []int{3, 4}, cli.Flag) require.Equal(t, []int{1, 2, 3, 4}, cli.Flag)
} }
+7 -1
View File
@@ -226,6 +226,12 @@ func floatDecoder(bits int) MapperFunc {
} }
} }
func mapDecoder(d *Registry) MapperFunc {
return func(ctx *DecodeContext, target reflect.Value) error {
return nil
}
}
func sliceDecoder(d *Registry) MapperFunc { func sliceDecoder(d *Registry) MapperFunc {
return func(ctx *DecodeContext, target reflect.Value) error { return func(ctx *DecodeContext, target reflect.Value) error {
el := target.Type().Elem() el := target.Type().Elem()
@@ -242,7 +248,7 @@ func sliceDecoder(d *Registry) MapperFunc {
if childDecoder == nil { if childDecoder == nil {
return fmt.Errorf("no mapper for element type of %s", target.Type()) return fmt.Errorf("no mapper for element type of %s", target.Type())
} }
for childScanner.Peek().Type != EOLToken { for !childScanner.Peek().IsEOL() {
childValue := reflect.New(el).Elem() childValue := reflect.New(el).Elem()
err := childDecoder.Decode(ctx.WithScanner(childScanner), childValue) err := childDecoder.Decode(ctx.WithScanner(childScanner), childValue)
if err != nil { if err != nil {
+7 -7
View File
@@ -139,7 +139,7 @@ type Value struct {
Default string Default string
Mapper Mapper Mapper Mapper
Tag *Tag Tag *Tag
Value reflect.Value Target reflect.Value
Required bool Required bool
Set bool // Set to true when this value is set through some mechanism. Set bool // Set to true when this value is set through some mechanism.
Format string // Formatting directive, if applicable. Format string // Formatting directive, if applicable.
@@ -166,7 +166,7 @@ func (v *Value) Summary() string {
// IsCumulative returns true of the value is a slice. // IsCumulative returns true of the value is a slice.
func (v *Value) IsCumulative() bool { func (v *Value) IsCumulative() bool {
return v.Value.Kind() == reflect.Slice return v.Target.Kind() == reflect.Slice
} }
// IsBool returns true if the underlying value is a boolean. // IsBool returns true if the underlying value is a boolean.
@@ -174,12 +174,12 @@ func (v *Value) IsBool() bool {
if m, ok := v.Mapper.(BoolMapper); ok && m.IsBool() { if m, ok := v.Mapper.(BoolMapper); ok && m.IsBool() {
return true return true
} }
return v.Value.Kind() == reflect.Bool return v.Target.Kind() == reflect.Bool
} }
// Parse tokens into value, parse, and validate, but do not write to the field. // Parse tokens into value, parse, and validate, but do not write to the field.
func (v *Value) Parse(scan *Scanner) (reflect.Value, error) { func (v *Value) Parse(scan *Scanner) (reflect.Value, error) {
value := reflect.New(v.Value.Type()).Elem() value := reflect.New(v.Target.Type()).Elem()
err := v.Mapper.Decode(&DecodeContext{Value: v, Scan: scan}, value) err := v.Mapper.Decode(&DecodeContext{Value: v, Scan: scan}, value)
if err == nil { if err == nil {
v.Set = true v.Set = true
@@ -189,7 +189,7 @@ func (v *Value) Parse(scan *Scanner) (reflect.Value, error) {
// Apply value to field. // Apply value to field.
func (v *Value) Apply(value reflect.Value) { func (v *Value) Apply(value reflect.Value) {
v.Value.Set(value) v.Target.Set(value)
v.Set = true v.Set = true
} }
@@ -197,7 +197,7 @@ func (v *Value) Apply(value reflect.Value) {
// //
// Does not include resolvers. // Does not include resolvers.
func (v *Value) Reset() error { func (v *Value) Reset() error {
v.Value.Set(reflect.Zero(v.Value.Type())) v.Target.Set(reflect.Zero(v.Target.Type()))
if v.Default != "" { if v.Default != "" {
value, err := v.Parse(Scan(v.Default)) value, err := v.Parse(Scan(v.Default))
if err != nil { if err != nil {
@@ -239,7 +239,7 @@ func (f *Flag) FormatPlaceHolder() string {
tail += ", ..." tail += ", ..."
} }
if f.Default != "" { if f.Default != "" {
if f.Value.Value.Kind() == reflect.String { if f.Value.Target.Kind() == reflect.String {
return strconv.Quote(f.Default) + tail return strconv.Quote(f.Default) + tail
} }
return f.Default + tail return f.Default + tail