@@ -133,7 +133,7 @@ MAIN:
|
||||
tag := field.tag
|
||||
name := tag.Name
|
||||
if name == "" {
|
||||
name = tag.Prefix + strings.ToLower(dashedString(ft.Name))
|
||||
name = tag.Prefix + k.flagNamer(ft.Name)
|
||||
} else {
|
||||
name = tag.Prefix + name
|
||||
}
|
||||
|
||||
@@ -65,6 +65,7 @@ type Kong struct {
|
||||
helpFlag *Flag
|
||||
groups []Group
|
||||
vars Vars
|
||||
flagNamer func(string) string
|
||||
|
||||
// Set temporarily by Options. These are applied after build().
|
||||
postBuildOptions []Option
|
||||
@@ -85,6 +86,9 @@ func New(grammar interface{}, options ...Option) (*Kong, error) {
|
||||
bindings: bindings{},
|
||||
helpFormatter: DefaultHelpValueFormatter,
|
||||
ignoreFields: make([]*regexp.Regexp, 0),
|
||||
flagNamer: func(s string) string {
|
||||
return strings.ToLower(dashedString(s))
|
||||
},
|
||||
}
|
||||
|
||||
options = append(options, Bind(k))
|
||||
|
||||
+5
-5
@@ -642,17 +642,17 @@ func TestRun(t *testing.T) {
|
||||
|
||||
func TestInterpolationIntoModel(t *testing.T) {
|
||||
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}"`
|
||||
EnvRef string `env:"${env}" help:"God ${env}"`
|
||||
}
|
||||
_, err := kong.New(&cli)
|
||||
assert.Error(t, err)
|
||||
p, err := kong.New(&cli, kong.Vars{
|
||||
"default": "Some default value.",
|
||||
"somebody": "chickens!",
|
||||
"enum": "a,b,c,d",
|
||||
"env": "SAVE_THE_QUEEN",
|
||||
"default_value": "Some default value.",
|
||||
"somebody": "chickens!",
|
||||
"enum": "a,b,c,d",
|
||||
"env": "SAVE_THE_QUEEN",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 4, len(p.Model.Flags))
|
||||
|
||||
@@ -483,3 +483,11 @@ func DefaultEnvars(prefix string) Option {
|
||||
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 (
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/alecthomas/assert/v2"
|
||||
@@ -112,3 +113,12 @@ func TestBindToProvider(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
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