@@ -133,7 +133,7 @@ MAIN:
|
|||||||
tag := field.tag
|
tag := field.tag
|
||||||
name := tag.Name
|
name := tag.Name
|
||||||
if name == "" {
|
if name == "" {
|
||||||
name = tag.Prefix + strings.ToLower(dashedString(ft.Name))
|
name = tag.Prefix + k.flagNamer(ft.Name)
|
||||||
} else {
|
} else {
|
||||||
name = tag.Prefix + name
|
name = tag.Prefix + name
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ type Kong struct {
|
|||||||
helpFlag *Flag
|
helpFlag *Flag
|
||||||
groups []Group
|
groups []Group
|
||||||
vars Vars
|
vars Vars
|
||||||
|
flagNamer func(string) string
|
||||||
|
|
||||||
// Set temporarily by Options. These are applied after build().
|
// Set temporarily by Options. These are applied after build().
|
||||||
postBuildOptions []Option
|
postBuildOptions []Option
|
||||||
@@ -85,6 +86,9 @@ func New(grammar interface{}, options ...Option) (*Kong, error) {
|
|||||||
bindings: bindings{},
|
bindings: bindings{},
|
||||||
helpFormatter: DefaultHelpValueFormatter,
|
helpFormatter: DefaultHelpValueFormatter,
|
||||||
ignoreFields: make([]*regexp.Regexp, 0),
|
ignoreFields: make([]*regexp.Regexp, 0),
|
||||||
|
flagNamer: func(s string) string {
|
||||||
|
return strings.ToLower(dashedString(s))
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
options = append(options, Bind(k))
|
options = append(options, Bind(k))
|
||||||
|
|||||||
+5
-5
@@ -642,17 +642,17 @@ func TestRun(t *testing.T) {
|
|||||||
|
|
||||||
func TestInterpolationIntoModel(t *testing.T) {
|
func TestInterpolationIntoModel(t *testing.T) {
|
||||||
var cli struct {
|
var cli struct {
|
||||||
Flag string `default:"${default}" help:"Help, I need ${somebody}" enum:"${enum}"`
|
Flag string `default:"${default_value}" help:"Help, I need ${somebody}" enum:"${enum}"`
|
||||||
EnumRef string `enum:"a,b" required:"" help:"One of ${enum}"`
|
EnumRef string `enum:"a,b" required:"" help:"One of ${enum}"`
|
||||||
EnvRef string `env:"${env}" help:"God ${env}"`
|
EnvRef string `env:"${env}" help:"God ${env}"`
|
||||||
}
|
}
|
||||||
_, err := kong.New(&cli)
|
_, err := kong.New(&cli)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
p, err := kong.New(&cli, kong.Vars{
|
p, err := kong.New(&cli, kong.Vars{
|
||||||
"default": "Some default value.",
|
"default_value": "Some default value.",
|
||||||
"somebody": "chickens!",
|
"somebody": "chickens!",
|
||||||
"enum": "a,b,c,d",
|
"enum": "a,b,c,d",
|
||||||
"env": "SAVE_THE_QUEEN",
|
"env": "SAVE_THE_QUEEN",
|
||||||
})
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, 4, len(p.Model.Flags))
|
assert.Equal(t, 4, len(p.Model.Flags))
|
||||||
|
|||||||
@@ -483,3 +483,11 @@ func DefaultEnvars(prefix string) Option {
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FlagNamer allows you to override the default kebab-case automated flag name generation.
|
||||||
|
func FlagNamer(namer func(fieldName string) string) Option {
|
||||||
|
return OptionFunc(func(k *Kong) error {
|
||||||
|
k.flagNamer = namer
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package kong
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/alecthomas/assert/v2"
|
"github.com/alecthomas/assert/v2"
|
||||||
@@ -112,3 +113,12 @@ func TestBindToProvider(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.True(t, cli.Called)
|
assert.True(t, cli.Called)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFlagNamer(t *testing.T) {
|
||||||
|
var cli struct {
|
||||||
|
SomeFlag string
|
||||||
|
}
|
||||||
|
app, err := New(&cli, FlagNamer(strings.ToUpper))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "SOMEFLAG", app.Model.Flags[1].Name)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user