summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPablo Diaz <[email protected]>2022-05-21 17:44:32 +0200
committerIlja Neumann <[email protected]>2023-06-03 02:39:56 +0200
commit5f10667949b09f9a43c241d969eea8d3ba9456c0 (patch)
treef699c397356663d51f6f923cc49d78b4b5c31592
parentc3cac76438ca36d9291d2a26f3ba558ef929d588 (diff)
fixed tests
-rw-r--r--example_test.go6
-rw-r--r--parse.go5
-rw-r--r--usage.go5
-rw-r--r--usage_test.go14
4 files changed, 20 insertions, 10 deletions
diff --git a/example_test.go b/example_test.go
index 6216e18..4bd7632 100644
--- a/example_test.go
+++ b/example_test.go
@@ -504,7 +504,7 @@ func Example_envVarOnly() {
defer os.Unsetenv("AUTH_KEY")
var args struct {
- AuthKey string `arg:"-,--,env:AUTH_KEY"`
+ AuthKey string `arg:"--,env:AUTH_KEY"`
}
MustParse(&args)
@@ -517,7 +517,7 @@ func Example_envVarOnlyShouldIgnoreFlag() {
os.Args = split("./example --=my_key")
var args struct {
- AuthKey string `arg:"-,--,env:AUTH_KEY"`
+ AuthKey string `arg:"--,env:AUTH_KEY"`
}
err := Parse(&args)
@@ -530,7 +530,7 @@ func Example_envVarOnlyShouldIgnoreShortFlag() {
os.Args = split("./example -=my_key")
var args struct {
- AuthKey string `arg:"-,--,env:AUTH_KEY"`
+ AuthKey string `arg:"--,env:AUTH_KEY"`
}
err := Parse(&args)
diff --git a/parse.go b/parse.go
index aee60e7..a85419f 100644
--- a/parse.go
+++ b/parse.go
@@ -360,6 +360,11 @@ func cmdFromStruct(name string, dest path, t reflect.Type) (*command, error) {
case strings.HasPrefix(key, "--"):
spec.long = key[2:]
case strings.HasPrefix(key, "-"):
+ if len(key) != 2 {
+ errs = append(errs, fmt.Sprintf("%s.%s: short arguments must be one character only",
+ t.Name(), field.Name))
+ return false
+ }
spec.short = key[1:]
case key == "required":
spec.required = true
diff --git a/usage.go b/usage.go
index f032149..fb5da75 100644
--- a/usage.go
+++ b/usage.go
@@ -84,9 +84,10 @@ func (p *Parser) writeUsageForSubcommand(w io.Writer, cmd *command) {
ancestors = append(ancestors, ancestor.name)
ancestor = ancestor.parent
}
+ // Print environment only variables
for _, spec := range cmd.specs {
if spec.short == "" && spec.long == "" {
- ancestors = append(ancestors, spec.env+"="+strings.ToLower(spec.env)+"_value")
+ ancestors = append(ancestors, "["+spec.env+"="+strings.ToLower(spec.env)+"_value"+"]")
}
}
@@ -283,7 +284,7 @@ func (p *Parser) writeHelpForSubcommand(w io.Writer, cmd *command) {
}
// write the list of environment only variables
- if len(shortOptions)+len(longOptions) > 0 || cmd.parent == nil {
+ if len(envOnlyOptions) > 0 {
fmt.Fprint(w, "\nEnvironment variables:\n")
for _, spec := range envOnlyOptions {
p.printEnvOnlyVar(w, spec)
diff --git a/usage_test.go b/usage_test.go
index d5e150f..5ac7757 100644
--- a/usage_test.go
+++ b/usage_test.go
@@ -544,14 +544,18 @@ Options:
}
func TestUsageWithEnvOptions(t *testing.T) {
- expectedUsage := "Usage: example [-s SHORT]"
+ expectedUsage := "Usage: [CUSTOM=custom_value] [ENVONLY=envonly_value] example [-s SHORT]"
expectedHelp := `
-Usage: example [-s SHORT]
+Usage: [CUSTOM=custom_value] [ENVONLY=envonly_value] example [-s SHORT]
Options:
-s SHORT [env: SHORT]
--help, -h display this help and exit
+
+Environment variables:
+ ENVONLY
+ CUSTOM
`
var args struct {
Short string `arg:"--,-s,env"`
@@ -648,10 +652,10 @@ Options:
}
func TestFailEnvOnly(t *testing.T) {
- expectedUsage := "Usage: AUTH_KEY=auth_key_value example [--arg ARG]"
+ expectedUsage := "Usage: [AUTH_KEY=auth_key_value] example [--arg ARG]"
expectedHelp := `
-Usage: AUTH_KEY=auth_key_value example [--arg ARG]
+Usage: [AUTH_KEY=auth_key_value] example [--arg ARG]
Options:
--arg ARG, -a ARG [env: MY_ARG]
@@ -662,7 +666,7 @@ Environment variables:
`
var args struct {
ArgParam string `arg:"-a,--arg,env:MY_ARG"`
- AuthKey string `arg:"-,--,env:AUTH_KEY"`
+ AuthKey string `arg:"--,env:AUTH_KEY"`
}
p, err := NewParser(Config{Program: "example"}, &args)
assert.NoError(t, err)