internal/cli:允許命令旗標與位置參數交錯(#25)
parseFlags 改為先分離旗標與位置參數、再剖析旗標串、最後以第二次 Parse 把位置參數設回 fs.Args;Go 標準 flag 遇位置參數即停止的問題 不再影響「位置參數在前、旗標在後」的用法(teai api --method、 issues/pulls view --comments 等照 README 範例可用了)。 - login.go/workflow_commands.go 直接呼叫 fs.Parse 的六處改走 parseFlags,行為一致(login default/remove 的名稱也可與旗標交錯)。 - errHelp(命令 -h/--help)在 exitCodeFor 視為成功,與其既有註解 宣稱一致;命令層 -h 結束碼由 1/2 修正為 0。 - 新增 interleaved_flags_test.go 回歸測試:api/issues view/ pulls view/stalled/login default/login remove 的交錯組合。
This commit is contained in:
@@ -93,8 +93,8 @@ func printLoginList(env *Env, logins []gitea.LoginEntry) error {
|
||||
func runLoginList(env *Env, args []string) error {
|
||||
fs := flag.NewFlagSet("teai login list", flag.ContinueOnError)
|
||||
fs.SetOutput(env.Err)
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return &ErrUsage{Msg: err.Error()}
|
||||
if err := parseFlags(fs, args); err != nil {
|
||||
return err
|
||||
}
|
||||
if fs.NArg() > 0 {
|
||||
return &ErrUsage{Msg: fmt.Sprintf("unexpected argument %q", fs.Arg(0))}
|
||||
@@ -121,8 +121,8 @@ func runLoginAdd(env *Env, args []string) error {
|
||||
nameFlag := fs.String("name", "", "登入名稱(省略時取 URL 主機)")
|
||||
tokenFlag := fs.String("token", "", "API token(省略時自 stdin 讀一行)")
|
||||
defaultFlag := fs.Bool("default", true, "設為預設登入")
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return &ErrUsage{Msg: err.Error()}
|
||||
if err := parseFlags(fs, args); err != nil {
|
||||
return err
|
||||
}
|
||||
if fs.NArg() > 0 {
|
||||
return &ErrUsage{Msg: fmt.Sprintf("unexpected argument %q", fs.Arg(0))}
|
||||
@@ -224,8 +224,8 @@ func verifyToken(env *Env, siteURL, token string) (string, error) {
|
||||
func runLoginDefault(env *Env, args []string) error {
|
||||
fs := flag.NewFlagSet("teai login default", flag.ContinueOnError)
|
||||
fs.SetOutput(env.Err)
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return &ErrUsage{Msg: err.Error()}
|
||||
if err := parseFlags(fs, args); err != nil {
|
||||
return err
|
||||
}
|
||||
if fs.NArg() != 1 {
|
||||
return &ErrUsage{Msg: "login default requires exactly one login name"}
|
||||
@@ -255,8 +255,8 @@ func runLoginRemove(env *Env, args []string) error {
|
||||
fs := flag.NewFlagSet("teai login remove", flag.ContinueOnError)
|
||||
fs.SetOutput(env.Err)
|
||||
yesFlag := fs.Bool("yes", false, "跳過確認")
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return &ErrUsage{Msg: err.Error()}
|
||||
if err := parseFlags(fs, args); err != nil {
|
||||
return err
|
||||
}
|
||||
if fs.NArg() != 1 {
|
||||
return &ErrUsage{Msg: "login remove requires exactly one login name"}
|
||||
|
||||
Reference in New Issue
Block a user