diff options
| author | Hugo Hromic <[email protected]> | 2024-07-22 19:18:14 +0100 | 
|---|---|---|
| committer | Hugo Hromic <[email protected]> | 2024-07-22 19:25:51 +0100 | 
| commit | bf156d17a378826a4832340c79f07aab30578fa8 (patch) | |
| tree | 023242966179c40641f04758a3f43b2ec7c8d5c7 | |
| parent | 3de7278c4f091f643033f3ebc8fe670c6e7ff7dd (diff) | |
Fix help text for positional args with default and env var
| -rw-r--r-- | usage.go | 2 | ||||
| -rw-r--r-- | usage_test.go | 69 | 
2 files changed, 70 insertions, 1 deletions
@@ -260,7 +260,7 @@ func (p *Parser) WriteHelpForSubcommand(w io.Writer, subcommand ...string) error  	if len(positionals) > 0 {  		fmt.Fprint(w, "\nPositional arguments:\n")  		for _, spec := range positionals { -			print(w, spec.placeholder, spec.help) +			print(w, spec.placeholder, spec.help, withDefault(spec.defaultString), withEnv(spec.env))  		}  	} diff --git a/usage_test.go b/usage_test.go index a958abb..fa9ace3 100644 --- a/usage_test.go +++ b/usage_test.go @@ -1015,3 +1015,72 @@ Commands:  	p.WriteHelp(&help)  	assert.Equal(t, expectedHelp[1:], help.String())  } + +func TestHelpShowsPositionalWithDefault(t *testing.T) { +	expectedHelp := ` +Usage: example [FOO] + +Positional arguments: +  FOO                    this is a positional with a default [default: bar] + +Options: +  --help, -h             display this help and exit +` + +	var args struct { +		Foo string `arg:"positional" default:"bar" help:"this is a positional with a default"` +	} + +	p, err := NewParser(Config{Program: "example"}, &args) +	require.NoError(t, err) + +	var help bytes.Buffer +	p.WriteHelp(&help) +	assert.Equal(t, expectedHelp[1:], help.String()) +} + +func TestHelpShowsPositionalWithEnv(t *testing.T) { +	expectedHelp := ` +Usage: example [FOO] + +Positional arguments: +  FOO                    this is a positional with an env variable [env: FOO] + +Options: +  --help, -h             display this help and exit +` + +	var args struct { +		Foo string `arg:"positional,env:FOO" help:"this is a positional with an env variable"` +	} + +	p, err := NewParser(Config{Program: "example"}, &args) +	require.NoError(t, err) + +	var help bytes.Buffer +	p.WriteHelp(&help) +	assert.Equal(t, expectedHelp[1:], help.String()) +} + +func TestHelpShowsPositionalWithDefaultAndEnv(t *testing.T) { +	expectedHelp := ` +Usage: example [FOO] + +Positional arguments: +  FOO                    this is a positional with a default and an env variable [default: bar, env: FOO] + +Options: +  --help, -h             display this help and exit +` + +	var args struct { +		Foo string `arg:"positional,env:FOO" default:"bar" help:"this is a positional with a default and an env variable"` +	} + +	p, err := NewParser(Config{Program: "example"}, &args) +	require.NoError(t, err) + +	var help bytes.Buffer +	p.WriteHelp(&help) +	assert.Equal(t, expectedHelp[1:], help.String()) +}  | 
