forked from cerc-io/plugeth
Merge pull request #14446 from bas-vk/cli-help
Rewrite templates for (sub)commands help section
This commit is contained in:
commit
07aae19e5d
@ -30,9 +30,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
consoleFlags = []cli.Flag{utils.JSpathFlag, utils.ExecFlag, utils.PreloadJSFlag}
|
consoleFlags = []cli.Flag{utils.JSpathFlag, utils.ExecFlag, utils.PreloadJSFlag}
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
consoleCommand = cli.Command{
|
consoleCommand = cli.Command{
|
||||||
Action: utils.MigrateFlags(localConsole),
|
Action: utils.MigrateFlags(localConsole),
|
||||||
Name: "console",
|
Name: "console",
|
||||||
|
@ -20,6 +20,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
|
"sort"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/cmd/utils"
|
"github.com/ethereum/go-ethereum/cmd/utils"
|
||||||
"github.com/ethereum/go-ethereum/internal/debug"
|
"github.com/ethereum/go-ethereum/internal/debug"
|
||||||
@ -189,6 +190,39 @@ var AppHelpFlagGroups = []flagGroup{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// byCategory sorts an array of flagGroup by Name in the order
|
||||||
|
// defined in AppHelpFlagGroups.
|
||||||
|
type byCategory []flagGroup
|
||||||
|
|
||||||
|
func (a byCategory) Len() int { return len(a) }
|
||||||
|
func (a byCategory) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||||||
|
func (a byCategory) Less(i, j int) bool {
|
||||||
|
iCat, jCat := a[i].Name, a[j].Name
|
||||||
|
iIdx, jIdx := len(AppHelpFlagGroups), len(AppHelpFlagGroups) // ensure non categorized flags come last
|
||||||
|
|
||||||
|
for i, group := range AppHelpFlagGroups {
|
||||||
|
if iCat == group.Name {
|
||||||
|
iIdx = i
|
||||||
|
}
|
||||||
|
if jCat == group.Name {
|
||||||
|
jIdx = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return iIdx < jIdx
|
||||||
|
}
|
||||||
|
|
||||||
|
func flagCategory(flag cli.Flag) string {
|
||||||
|
for _, category := range AppHelpFlagGroups {
|
||||||
|
for _, flg := range category.Flags {
|
||||||
|
if flg.GetName() == flag.GetName() {
|
||||||
|
return category.Name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "MISC"
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
// Override the default app help template
|
// Override the default app help template
|
||||||
cli.AppHelpTemplate = AppHelpTemplate
|
cli.AppHelpTemplate = AppHelpTemplate
|
||||||
@ -198,6 +232,7 @@ func init() {
|
|||||||
App interface{}
|
App interface{}
|
||||||
FlagGroups []flagGroup
|
FlagGroups []flagGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override the default app help printer, but only for the global app help
|
// Override the default app help printer, but only for the global app help
|
||||||
originalHelpPrinter := cli.HelpPrinter
|
originalHelpPrinter := cli.HelpPrinter
|
||||||
cli.HelpPrinter = func(w io.Writer, tmpl string, data interface{}) {
|
cli.HelpPrinter = func(w io.Writer, tmpl string, data interface{}) {
|
||||||
@ -227,6 +262,27 @@ func init() {
|
|||||||
}
|
}
|
||||||
// Render out custom usage screen
|
// Render out custom usage screen
|
||||||
originalHelpPrinter(w, tmpl, helpData{data, AppHelpFlagGroups})
|
originalHelpPrinter(w, tmpl, helpData{data, AppHelpFlagGroups})
|
||||||
|
} else if tmpl == utils.CommandHelpTemplate {
|
||||||
|
// Iterate over all command specific flags and categorize them
|
||||||
|
categorized := make(map[string][]cli.Flag)
|
||||||
|
for _, flag := range data.(cli.Command).Flags {
|
||||||
|
if _, ok := categorized[flag.String()]; !ok {
|
||||||
|
categorized[flagCategory(flag)] = append(categorized[flagCategory(flag)], flag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort to get a stable ordering
|
||||||
|
sorted := make([]flagGroup, 0, len(categorized))
|
||||||
|
for cat, flgs := range categorized {
|
||||||
|
sorted = append(sorted, flagGroup{cat, flgs})
|
||||||
|
}
|
||||||
|
sort.Sort(byCategory(sorted))
|
||||||
|
|
||||||
|
// add sorted array to data and render with default printer
|
||||||
|
originalHelpPrinter(w, tmpl, map[string]interface{}{
|
||||||
|
"cmd": data,
|
||||||
|
"categorizedFlags": sorted,
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
originalHelpPrinter(w, tmpl, data)
|
originalHelpPrinter(w, tmpl, data)
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,19 @@ import (
|
|||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
CommandHelpTemplate = `{{.cmd.Name}}{{if .cmd.Subcommands}} command{{end}}{{if .cmd.Flags}} [command options]{{end}} [arguments...]
|
||||||
|
{{if .cmd.Description}}{{.cmd.Description}}
|
||||||
|
{{end}}{{if .cmd.Subcommands}}
|
||||||
|
SUBCOMMANDS:
|
||||||
|
{{range .cmd.Subcommands}}{{.cmd.Name}}{{with .cmd.ShortName}}, {{.cmd}}{{end}}{{ "\t" }}{{.cmd.Usage}}
|
||||||
|
{{end}}{{end}}{{if .categorizedFlags}}
|
||||||
|
{{range $idx, $categorized := .categorizedFlags}}{{$categorized.Name}} OPTIONS:
|
||||||
|
{{range $categorized.Flags}}{{"\t"}}{{.}}
|
||||||
|
{{end}}
|
||||||
|
{{end}}{{end}}`
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
cli.AppHelpTemplate = `{{.Name}} {{if .Flags}}[global options] {{end}}command{{if .Flags}} [command options]{{end}} [arguments...]
|
cli.AppHelpTemplate = `{{.Name}} {{if .Flags}}[global options] {{end}}command{{if .Flags}} [command options]{{end}} [arguments...]
|
||||||
|
|
||||||
@ -70,16 +83,7 @@ GLOBAL OPTIONS:
|
|||||||
{{end}}{{end}}
|
{{end}}{{end}}
|
||||||
`
|
`
|
||||||
|
|
||||||
cli.CommandHelpTemplate = `{{.Name}}{{if .Subcommands}} command{{end}}{{if .Flags}} [command options]{{end}} [arguments...]
|
cli.CommandHelpTemplate = CommandHelpTemplate
|
||||||
{{if .Description}}{{.Description}}
|
|
||||||
{{end}}{{if .Subcommands}}
|
|
||||||
SUBCOMMANDS:
|
|
||||||
{{range .Subcommands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}}
|
|
||||||
{{end}}{{end}}{{if .Flags}}
|
|
||||||
OPTIONS:
|
|
||||||
{{range .Flags}}{{.}}
|
|
||||||
{{end}}{{end}}
|
|
||||||
`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewApp creates an app with sane defaults.
|
// NewApp creates an app with sane defaults.
|
||||||
|
Loading…
Reference in New Issue
Block a user