Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ func main() {
|------|------|
| `flagrun.Version(version string)` | バージョン表示に使用する文字列を指定します。 |
| `flagrun.Commit(commit string)` | コミットハッシュなどを指定します(デフォルト: `dev`)。 |
| `flagrun.Usage(usage string)` | ヘルプ表示で使う Usage 文字列を指定します。デフォルトは空で`ArgsRequired` を指定した場合は `[OPTIONS] -- command [args...]` が使われます。 |
| `flagrun.ArgsRequired()` | コマンドライン引数を必須にします。引数がない場合は UNKNOWN で終了します。 |
| `flagrun.AlwaysStdout()` | `Run` の戻り値を、終了コードに関係なく標準出力へ出力します。`flagrun.Check` では常に標準出力へ出力されるため、このオプションは不要です。 |
| `flagrun.Validator(validator func([]string) error)` | パース後の追加検証を行う関数を指定します。エラー時は UNKNOWN で終了します。 |
Expand Down
12 changes: 11 additions & 1 deletion flagrun.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ type Flagrun struct {
ArgsRequired bool
Version string
Commit string
Usage string
AlwaysStdout bool
Validator func([]string) error
}
Expand All @@ -62,6 +63,12 @@ func Commit(commit string) FlagrunOptions {
}
}

func Usage(usage string) FlagrunOptions {
return func(f *Flagrun) {
f.Usage = usage
}
}

func ArgsRequired() FlagrunOptions {
return func(f *Flagrun) {
f.ArgsRequired = true
Expand Down Expand Up @@ -158,7 +165,10 @@ func nullint(i int) *int {

func (f *Flagrun) parseArgs(argv []string, stdout, stderr io.Writer, opt any) ([]string, *int) {
psr := flags.NewParser(opt, flags.HelpFlag|flags.PassDoubleDash)
if f.ArgsRequired {
if f.Usage != "" {
psr.Usage = f.Usage
}
if f.ArgsRequired && f.Usage == "" {
psr.Usage = "[OPTIONS] -- command [args...]"
}
args, err := psr.ParseArgs(argv)
Expand Down
16 changes: 16 additions & 0 deletions flagrun_go_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,22 @@ func TestInternalGoWithRequiredParameters(t *testing.T) {
assert.Equal(t, UNKNOWN, code)
}

func TestInternalGoWithUsageOption(t *testing.T) {
o := &testRunner{}
var stdout bytes.Buffer
var stderr bytes.Buffer
f := buildFlagrun(Usage("Custom usage message"))
msg, code := internalGo(f, []string{"--help"}, &stdout, &stderr, o)
stdoutStr := stdout.String()
stderrStr := stderr.String()

assert.NotNil(t, f, "Flagrun instance should not be nil")
assert.Equal(t, "", fmt.Sprintf("%v", msg), "msg should be empty")
assert.Contains(t, stdoutStr, "Custom usage message")
assert.Contains(t, stderrStr, "")
assert.Equal(t, OK, code)
}

type versionTrueRunner struct {
Version bool `short:"v" long:"version" description:"Show version"`
}
Expand Down