Ensure flag defaults (or envars) aren't scanned in as untyped tokens.
This avoids treating default values starting with "-" as flags.
This commit is contained in:
@@ -697,3 +697,13 @@ func TestNumericParamErrors(t *testing.T) {
|
|||||||
_, err := parser.Parse([]string{"--name", "-10"})
|
_, err := parser.Parse([]string{"--name", "-10"})
|
||||||
require.EqualError(t, err, `expected string value but got "-10" (short flag)`)
|
require.EqualError(t, err, `expected string value but got "-10" (short flag)`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDefaultValueIsHyphen(t *testing.T) {
|
||||||
|
var cli struct {
|
||||||
|
Flag string `default:"-"`
|
||||||
|
}
|
||||||
|
p := mustNew(t, &cli)
|
||||||
|
_, err := p.Parse(nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "-", cli.Flag)
|
||||||
|
}
|
||||||
|
|||||||
@@ -302,7 +302,7 @@ func (v *Value) Reset() error {
|
|||||||
if v.Tag.Env != "" {
|
if v.Tag.Env != "" {
|
||||||
envar := os.Getenv(v.Tag.Env)
|
envar := os.Getenv(v.Tag.Env)
|
||||||
if envar != "" {
|
if envar != "" {
|
||||||
err := v.Parse(Scan(envar), v.Target)
|
err := v.Parse(ScanFromTokens(Token{Type: FlagValueToken, Value: envar}), v.Target)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("%s (from envar %s=%q)", err, v.Tag.Env, envar)
|
return fmt.Errorf("%s (from envar %s=%q)", err, v.Tag.Env, envar)
|
||||||
}
|
}
|
||||||
@@ -310,7 +310,7 @@ func (v *Value) Reset() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if v.Default != "" {
|
if v.Default != "" {
|
||||||
return v.Parse(Scan(v.Default), v.Target)
|
return v.Parse(ScanFromTokens(Token{Type: FlagValueToken, Value: v.Default}), v.Target)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user