diff --git a/README.md b/README.md index efe6ec1..24ae10c 100644 --- a/README.md +++ b/README.md @@ -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 で終了します。 | diff --git a/flagrun.go b/flagrun.go index 4ba1da1..c953ee5 100644 --- a/flagrun.go +++ b/flagrun.go @@ -40,6 +40,7 @@ type Flagrun struct { ArgsRequired bool Version string Commit string + Usage string AlwaysStdout bool Validator func([]string) error } @@ -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 @@ -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) diff --git a/flagrun_go_test.go b/flagrun_go_test.go index f82c76a..f4fc4ea 100644 --- a/flagrun_go_test.go +++ b/flagrun_go_test.go @@ -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"` }