From 0dd327f6e553248f2f72b553a842592eeadd6e97 Mon Sep 17 00:00:00 2001 From: Jeremy Saenz Date: Sat, 20 Jul 2013 10:20:46 -0700 Subject: [PATCH 1/2] JMS #5: Starting support for subcommand docs --- help.go | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/help.go b/help.go index 89f8e04..e8ccb05 100644 --- a/help.go +++ b/help.go @@ -12,28 +12,40 @@ var helpCommand = Command{ ShortName: "h", Usage: "Shows a list of commands or help for one command", Action: func(c *Context) { - helpTemplate := `NAME: - {{.Name}} - {{.Usage}} + args := c.Args() + if len(args) > 0 { + showCommandHelp(c) + } else { + showAppHelp(c) + } + }, +} + +func showAppHelp(c *Context) { + helpTemplate := `NAME: + {{.Name}} - {{.Usage}} USAGE: - {{.Name}} [global options] command [command options] [arguments...] + {{.Name}} [global options] command [command options] [arguments...] VERSION: - {{.Version}} + {{.Version}} COMMANDS: - {{range .Commands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} - {{end}} + {{range .Commands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} + {{end}} GLOBAL OPTIONS: - {{range .Flags}}{{.}} - {{end}} + {{range .Flags}}{{.}} + {{end}} ` - w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) - t := template.Must(template.New("help").Parse(helpTemplate)) - t.Execute(w, c.App) - w.Flush() - }, + w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) + t := template.Must(template.New("help").Parse(helpTemplate)) + t.Execute(w, c.App) + w.Flush() +} + +func showCommandHelp(c *Context) { } func showVersion(c *Context) { From 41dde0adab111833d417ca56d51f13978d522d6c Mon Sep 17 00:00:00 2001 From: Jeremy Saenz Date: Sat, 20 Jul 2013 10:46:47 -0700 Subject: [PATCH 2/2] JMS #5: Displaying help for subcommands. Better looking help code --- help.go | 72 ++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 19 deletions(-) diff --git a/help.go b/help.go index e8ccb05..eef0d24 100644 --- a/help.go +++ b/help.go @@ -7,6 +7,43 @@ import ( "text/template" ) +// The text template for the Default help topic. +// cli.go uses text/template to render templates. You can +// render custom help text by setting this variable. +var AppHelpTemplate = `NAME: + {{.Name}} - {{.Usage}} + +USAGE: + {{.Name}} [global options] command [command options] [arguments...] + +VERSION: + {{.Version}} + +COMMANDS: + {{range .Commands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} + {{end}} +GLOBAL OPTIONS: + {{range .Flags}}{{.}} + {{end}} +` + +// The text template for the command help topic. +// cli.go uses text/template to render templates. You can +// render custom help text by setting this variable. +var CommandHelpTemplate = `NAME: + {{.Name}} - {{.Usage}} + +USAGE: + command {{.Name}} [command options] [arguments...] + +DESCRIPTION: + {{.Description}} + +OPTIONS: + {{range .Flags}}{{.}} + {{end}} +` + var helpCommand = Command{ Name: "help", ShortName: "h", @@ -22,32 +59,29 @@ var helpCommand = Command{ } func showAppHelp(c *Context) { - helpTemplate := `NAME: - {{.Name}} - {{.Usage}} - -USAGE: - {{.Name}} [global options] command [command options] [arguments...] + printHelp(AppHelpTemplate, c.App) +} -VERSION: - {{.Version}} +func showCommandHelp(c *Context) { + name := c.Args()[0] + for _, c := range c.App.Commands { + if c.HasName(name) { + printHelp(CommandHelpTemplate, c) + return + } + } -COMMANDS: - {{range .Commands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} - {{end}} -GLOBAL OPTIONS: - {{range .Flags}}{{.}} - {{end}} -` + fmt.Printf("No help topic for '%v'\n", name) + os.Exit(1) +} +func printHelp(templ string, data interface{}) { w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) - t := template.Must(template.New("help").Parse(helpTemplate)) - t.Execute(w, c.App) + t := template.Must(template.New("help").Parse(templ)) + t.Execute(w, data) w.Flush() } -func showCommandHelp(c *Context) { -} - func showVersion(c *Context) { fmt.Printf("%v version %v\n", c.App.Name, c.App.Version) }