Accept match value positionally so -pm <value> works
pflag does not attach a space-separated value to a string flag that is grouped with a bool flag, so `node-lookup -R -pm k8s` parsed -p and left `k8s` as a stray positional, failing with "unknown command k8s". Only `-pm=k8s` or the un-grouped `-p -m k8s` worked, which is surprising. - Allow one positional argument (cobra.MaximumNArgs(1)) and fall back to it for the match value when -m is empty (matchValue()), so -pm/-im/-ipm <value> and a bare `-p <value>` all work. -m still wins when both are given. - Add matchValue unit tests. - Document the positional value and the pflag grouping quirk in AGENTS.md.
This commit is contained in:
@@ -142,6 +142,29 @@ func TestBuildQuery_ValidJSON(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// ---- matchValue (positional fallback for `-pm value`) -----------------------
|
||||
|
||||
func TestMatchValue_FlagWins(t *testing.T) {
|
||||
// An explicit -m value takes precedence over any positional arg.
|
||||
if got := matchValue("flagval", []string{"posval"}); got != "flagval" {
|
||||
t.Fatalf("expected flag value to win, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMatchValue_PositionalFallback(t *testing.T) {
|
||||
// This is the `-pm k8s` case: pflag leaves k8s as a positional because the
|
||||
// grouped -m flag does not attach the space-separated value.
|
||||
if got := matchValue("", []string{"k8s"}); got != "k8s" {
|
||||
t.Fatalf("expected positional fallback, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMatchValue_NoneGiven(t *testing.T) {
|
||||
if got := matchValue("", nil); got != "" {
|
||||
t.Fatalf("expected empty, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
// ---- valueString / valueAny -------------------------------------------------
|
||||
|
||||
func TestValueString_String(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user