feat: enable short and long command-line arguments
1 file changed, 21 insertions(+), 11 deletions(-)
changed files
M main.go → main.go
@@ -2,7 +2,7 @@ package main import ( "context" - "flag" + "errors" "io" "log" "os"@@ -14,17 +14,18 @@ "syscall" "time" "github.com/fsnotify/fsnotify" + "github.com/jessevdk/go-flags" "alin.ovh/erl/command" "alin.ovh/erl/state" "alin.ovh/erl/watcher" ) -var ( - Exec = flag.String("exec", "", "command to execute on file change") - Quiet = flag.Bool("quiet", false, "suppress own output") - Verbose = flag.Bool("verbose", false, "verbose output (print events)") -) +type Options struct { + Exec string `short:"x" long:"exec" description:"command to execute on file change"` + Quiet bool `short:"q" long:"quiet" description:"suppress own output"` + Verbose bool `short:"v" long:"verbose" description:"verbose output (print events)"` +} func Start(ctx context.Context, verbose *log.Logger, w watcher.Watcher, sm *state.StateMachine) { var wg sync.WaitGroup@@ -102,11 +103,20 @@ wg.Wait() } func main() { + var opts Options log.SetFlags(log.Lmsgprefix) - flag.Parse() + + fp := flags.NewParser(&opts, flags.Default) + args, err := fp.Parse() + if err != nil { + if errors.Is(err, flags.ErrHelp) { + os.Exit(0) + } + + log.Fatalf("failed to parse flags: %v", err) + } - program := *Exec - args := flag.Args() + program := opts.Exec if program == "" { program = "go"@@ -132,12 +142,12 @@ ) defer cancel() copts := command.Options{} - if *Quiet { + if opts.Quiet { copts.Output = io.Discard } var logger *log.Logger - if *Verbose { + if opts.Verbose { logger = log.New(os.Stderr, "", 0) } else { logger = log.New(io.Discard, "", 0)