Add support for nil flag sets

This commit is contained in:
Ryan Cavicchioni 2021-03-03 23:31:27 -06:00
parent 78c7572139
commit 518e304948
Signed by: ryanc
GPG Key ID: 877EEDAF9245103D
3 changed files with 20 additions and 19 deletions

View File

@ -21,6 +21,7 @@ type Config struct {
type CmdArgs struct { type CmdArgs struct {
Flags Flags Flags Flags
Args []string
Client *lifx.Client Client *lifx.Client
Config Config Config Config
Name string Name string

View File

@ -1,32 +1,24 @@
package lumecmd package lumecmd
import ( import (
"flag"
"fmt" "fmt"
"sort" "sort"
) )
func NewCmdHelp() Command { func NewCmdHelp() Command {
return Command{ return Command{
Name: "help", Name: "help",
Func: HelpCmd, Func: HelpCmd,
Flags: func() *flag.FlagSet {
fs := flag.NewFlagSet("help", flag.ExitOnError)
return fs
}(),
Use: "<command>", Use: "<command>",
Short: "Show help for a command", Short: "Show help for a command",
} }
} }
func HelpCmd(args CmdArgs) (int, error) { func HelpCmd(args CmdArgs) (int, error) {
argv := args.Flags.Args() if len(args.Args) == 0 {
if len(argv) == 0 {
printHelp(commandRegistry) printHelp(commandRegistry)
} else if len(argv) >= 1 { } else if len(args.Args) >= 1 {
printCmdHelp(argv[0]) printCmdHelp(args.Args[0])
} }
return ExitSuccess, nil return ExitSuccess, nil
@ -63,11 +55,15 @@ func printCmdHelp(name string) error {
if subCmd.Use != "" { if subCmd.Use != "" {
fmt.Printf("usage:\n lume %s %s\n", subCmd.Name, subCmd.Use) fmt.Printf("usage:\n lume %s %s\n", subCmd.Name, subCmd.Use)
fmt.Println() } else {
fmt.Printf("usage:\n lume %s\n", subCmd.Name)
} }
fmt.Print("flags:\n") if subCmd.Flags != nil {
subCmd.Flags.PrintDefaults() fmt.Println()
fmt.Print("flags:\n")
subCmd.Flags.PrintDefaults()
}
return nil return nil
} }

View File

@ -74,6 +74,7 @@ func Main(args []string) (int, error) {
cmdArgs := CmdArgs{ cmdArgs := CmdArgs{
Client: c, Client: c,
Config: config, Config: config,
Args: args[2:],
} }
cmd, ok := GetCommand(command) cmd, ok := GetCommand(command)
@ -81,11 +82,14 @@ func Main(args []string) (int, error) {
err = fmt.Errorf("lume: '%s' is not lume command. See 'lume help'", command) err = fmt.Errorf("lume: '%s' is not lume command. See 'lume help'", command)
return ExitFailure, err return ExitFailure, err
} }
fs := cmd.Flags
fs.Parse(args[2:])
cmdArgs.Flags = Flags{FlagSet: fs} fs := cmd.Flags
if fs != nil {
fs.Parse(args[2:])
cmdArgs.Flags = Flags{FlagSet: fs}
}
cmdArgs.Name = command cmdArgs.Name = command
exitCode, err := cmd.Func(cmdArgs) exitCode, err := cmd.Func(cmdArgs)
if err != nil { if err != nil {
err = fmt.Errorf("fatal: %s", err) err = fmt.Errorf("fatal: %s", err)