package cmd import ( "flag" "fmt" "strings" ) type Runner interface { Parse([]string) error Name() string Run() error } func usageFunc(name, summary string, flagset *flag.FlagSet) func() { return func() { var builder strings.Builder fmt.Fprintf(&builder, "SUMMARY:\n %s - %s\n\nUSAGE:\n spruce %s [flags]\n\nFLAGS:", name, summary, name) flagset.VisitAll(func(f *flag.Flag) { fmt.Fprintf(&builder, "\n -%s, --%s\n %s", f.Name, f.Name, f.Usage) }) builder.WriteString("\n") w := flag.CommandLine.Output() fmt.Fprint(w, builder.String()) } }