Skip to content

Commit a62e6a4

Browse files
authored
feat: Support variable interpolation in vars (#555)
1 parent fbb8c90 commit a62e6a4

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

kong.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,11 @@ func (k *Kong) interpolateValue(value *Value, vars Vars) (err error) {
249249
vars = vars.CloneWith(varsContributor.Vars(value))
250250
}
251251

252-
if value.Enum, err = interpolate(value.Enum, vars, nil); err != nil {
253-
return fmt.Errorf("enum for %s: %s", value.Summary(), err)
252+
initialVars := vars.CloneWith(nil)
253+
for n, v := range initialVars {
254+
if vars[n], err = interpolate(v, initialVars, nil); err != nil {
255+
return fmt.Errorf("variable %s for %s: %s", n, value.Summary(), err)
256+
}
254257
}
255258

256259
if value.Default, err = interpolate(value.Default, vars, nil); err != nil {

kong_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2452,6 +2452,9 @@ func TestIntEnum(t *testing.T) {
24522452
func TestRecursiveVariableExpansion(t *testing.T) {
24532453
var cli struct {
24542454
Config string `type:"path" default:"${config_file}" help:"Default: ${default}"`
2455+
Embed struct {
2456+
Test string `help:"Another name: ${anotherName}"`
2457+
} `embed:"" set:"anotherName=${config_file}"`
24552458
}
24562459
k := mustNew(t, &cli, kong.Vars{"config_file": "/etc/config"}, kong.Exit(func(int) {}))
24572460
w := &strings.Builder{}
@@ -2460,6 +2463,7 @@ func TestRecursiveVariableExpansion(t *testing.T) {
24602463
_, err := k.Parse([]string{"--help"})
24612464
assert.NoError(t, err)
24622465
assert.Contains(t, w.String(), "Default: /etc/config")
2466+
assert.Contains(t, w.String(), "Another name: /etc/config")
24632467
}
24642468

24652469
type afterRunCLI struct {

0 commit comments

Comments
 (0)