Merge pull request '[agent/codex:gpt-5.4-mini] Read ~/spec/code/core/go/cli/RFC.md fully. Find ONE feature ...' (#38) from agent/read---spec-code-core-go-cli-rfc-md-full into dev
Some checks are pending
Security Scan / security (push) Waiting to run
Some checks are pending
Security Scan / security (push) Waiting to run
This commit is contained in:
commit
04af5a482a
2 changed files with 66 additions and 0 deletions
|
|
@ -173,6 +173,19 @@ func StringSliceFlag(cmd *Command, ptr *[]string, name, short string, def []stri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StringArrayFlag adds a string array flag to a command.
|
||||||
|
// The value will be stored in the provided pointer.
|
||||||
|
//
|
||||||
|
// var tags []string
|
||||||
|
// cli.StringArrayFlag(cmd, &tags, "tag", "t", nil, "Tags to apply")
|
||||||
|
func StringArrayFlag(cmd *Command, ptr *[]string, name, short string, def []string, usage string) {
|
||||||
|
if short != "" {
|
||||||
|
cmd.Flags().StringArrayVarP(ptr, name, short, def, usage)
|
||||||
|
} else {
|
||||||
|
cmd.Flags().StringArrayVar(ptr, name, def, usage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
// Persistent Flag Helpers
|
// Persistent Flag Helpers
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
@ -240,6 +253,15 @@ func PersistentStringSliceFlag(cmd *Command, ptr *[]string, name, short string,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PersistentStringArrayFlag adds a persistent string array flag (inherited by subcommands).
|
||||||
|
func PersistentStringArrayFlag(cmd *Command, ptr *[]string, name, short string, def []string, usage string) {
|
||||||
|
if short != "" {
|
||||||
|
cmd.PersistentFlags().StringArrayVarP(ptr, name, short, def, usage)
|
||||||
|
} else {
|
||||||
|
cmd.PersistentFlags().StringArrayVar(ptr, name, def, usage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
// Command Configuration
|
// Command Configuration
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,22 @@ func TestPersistentFlagHelpers_Good(t *testing.T) {
|
||||||
require.NoError(t, parent.Execute())
|
require.NoError(t, parent.Execute())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("persistent string array flags inherit through subcommands", func(t *testing.T) {
|
||||||
|
parent := NewGroup("parent", "Parent", "")
|
||||||
|
|
||||||
|
var tags []string
|
||||||
|
PersistentStringArrayFlag(parent, &tags, "tag", "t", nil, "Tags")
|
||||||
|
|
||||||
|
child := NewCommand("child", "Child", "", func(_ *Command, _ []string) error {
|
||||||
|
assert.Equal(t, []string{"alpha", "beta"}, tags)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
parent.AddCommand(child)
|
||||||
|
parent.SetArgs([]string{"child", "--tag", "alpha", "-t", "beta"})
|
||||||
|
|
||||||
|
require.NoError(t, parent.Execute())
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("persistent helpers use short flags when provided", func(t *testing.T) {
|
t.Run("persistent helpers use short flags when provided", func(t *testing.T) {
|
||||||
parent := NewGroup("parent", "Parent", "")
|
parent := NewGroup("parent", "Parent", "")
|
||||||
var value int
|
var value int
|
||||||
|
|
@ -79,3 +95,31 @@ func TestPersistentFlagHelpers_Good(t *testing.T) {
|
||||||
assert.True(t, seen)
|
assert.True(t, seen)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFlagHelpers_Good(t *testing.T) {
|
||||||
|
t.Run("string array flags collect repeated values", func(t *testing.T) {
|
||||||
|
cmd := NewCommand("child", "Child", "", func(_ *Command, _ []string) error {
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
var tags []string
|
||||||
|
StringArrayFlag(cmd, &tags, "tag", "t", nil, "Tags")
|
||||||
|
cmd.SetArgs([]string{"--tag", "alpha", "-t", "beta"})
|
||||||
|
|
||||||
|
require.NoError(t, cmd.Execute())
|
||||||
|
assert.Equal(t, []string{"alpha", "beta"}, tags)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("string array flags use short flags when provided", func(t *testing.T) {
|
||||||
|
cmd := NewCommand("child", "Child", "", func(_ *Command, _ []string) error {
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
var tags []string
|
||||||
|
StringArrayFlag(cmd, &tags, "tag", "t", nil, "Tags")
|
||||||
|
cmd.SetArgs([]string{"-t", "alpha"})
|
||||||
|
|
||||||
|
require.NoError(t, cmd.Execute())
|
||||||
|
assert.Equal(t, []string{"alpha"}, tags)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue