mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-20 02:21:48 +08:00
cmds/helptext: indent + newlines + synopsis
This commit is contained in:
@ -29,10 +29,46 @@ type helpFields struct {
|
|||||||
Tagline string
|
Tagline string
|
||||||
Arguments string
|
Arguments string
|
||||||
Options string
|
Options string
|
||||||
|
Synopsis string
|
||||||
Subcommands string
|
Subcommands string
|
||||||
Description string
|
Description string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TrimNewlines removes extra newlines from fields. This makes aligning
|
||||||
|
// commands easier. Below, the leading + tralining newlines are removed:
|
||||||
|
// Synopsis: `
|
||||||
|
// ipfs config <key> - Get value of <key>
|
||||||
|
// ipfs config <key> <value> - Set value of <key> to <value>
|
||||||
|
// ipfs config --show - Show config file
|
||||||
|
// ipfs config --edit - Edit config file in $EDITOR
|
||||||
|
// `
|
||||||
|
func (f *helpFields) TrimNewlines() {
|
||||||
|
f.Path = strings.Trim(f.Path, "\n")
|
||||||
|
f.ArgUsage = strings.Trim(f.ArgUsage, "\n")
|
||||||
|
f.Tagline = strings.Trim(f.Tagline, "\n")
|
||||||
|
f.Arguments = strings.Trim(f.Arguments, "\n")
|
||||||
|
f.Options = strings.Trim(f.Options, "\n")
|
||||||
|
f.Synopsis = strings.Trim(f.Synopsis, "\n")
|
||||||
|
f.Subcommands = strings.Trim(f.Subcommands, "\n")
|
||||||
|
f.Description = strings.Trim(f.Description, "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Indent adds whitespace the lines of fields.
|
||||||
|
func (f *helpFields) IndentAll() {
|
||||||
|
indent := func(s string) string {
|
||||||
|
if s == "" {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
return indentString(s, indentStr)
|
||||||
|
}
|
||||||
|
|
||||||
|
f.Arguments = indent(f.Arguments)
|
||||||
|
f.Options = indent(f.Options)
|
||||||
|
f.Synopsis = indent(f.Synopsis)
|
||||||
|
f.Subcommands = indent(f.Subcommands)
|
||||||
|
f.Description = indent(f.Description)
|
||||||
|
}
|
||||||
|
|
||||||
const usageFormat = "{{if .Usage}}{{.Usage}}{{else}}{{.Path}}{{if .ArgUsage}} {{.ArgUsage}}{{end}} - {{.Tagline}}{{end}}"
|
const usageFormat = "{{if .Usage}}{{.Usage}}{{else}}{{.Path}}{{if .ArgUsage}} {{.ArgUsage}}{{end}} - {{.Tagline}}{{end}}"
|
||||||
|
|
||||||
const longHelpFormat = `
|
const longHelpFormat = `
|
||||||
@ -40,29 +76,31 @@ const longHelpFormat = `
|
|||||||
|
|
||||||
{{if .Arguments}}ARGUMENTS:
|
{{if .Arguments}}ARGUMENTS:
|
||||||
|
|
||||||
{{.Indent}}{{.Arguments}}
|
{{.Arguments}}
|
||||||
|
|
||||||
{{end}}{{if .Options}}OPTIONS:
|
{{end}}{{if .Options}}OPTIONS:
|
||||||
|
|
||||||
{{.Indent}}{{.Options}}
|
{{.Options}}
|
||||||
|
|
||||||
{{end}}{{if .Subcommands}}SUBCOMMANDS:
|
{{end}}{{if .Subcommands}}SUBCOMMANDS:
|
||||||
|
|
||||||
{{.Indent}}{{.Subcommands}}
|
{{.Subcommands}}
|
||||||
|
|
||||||
{{.Indent}}Use '{{.Path}} <subcmd> --help' for more information about each command.
|
{{.Indent}}Use '{{.Path}} <subcmd> --help' for more information about each command.
|
||||||
|
|
||||||
{{end}}{{if .Description}}DESCRIPTION:
|
{{end}}{{if .Description}}DESCRIPTION:
|
||||||
|
|
||||||
{{.Indent}}{{.Description}}
|
{{.Description}}
|
||||||
|
|
||||||
{{end}}
|
{{end}}
|
||||||
`
|
`
|
||||||
const shortHelpFormat = `USAGE:
|
const shortHelpFormat = `USAGE:
|
||||||
|
|
||||||
{{.Indent}}{{template "usage" .}}
|
{{.Indent}}{{template "usage" .}}
|
||||||
{{if .Description}}
|
{{if .Synopsis}}
|
||||||
{{.Indent}}{{.Description}}
|
{{.Synopsis}}
|
||||||
|
{{end}}{{if .Description}}
|
||||||
|
{{.Description}}
|
||||||
{{end}}
|
{{end}}
|
||||||
Use '{{.Path}} --help' for more information about this command.
|
Use '{{.Path}} --help' for more information about this command.
|
||||||
`
|
`
|
||||||
@ -111,6 +149,7 @@ func LongHelp(rootName string, root *cmds.Command, path []string, out io.Writer)
|
|||||||
Tagline: cmd.Description,
|
Tagline: cmd.Description,
|
||||||
Arguments: cmd.ArgumentHelp,
|
Arguments: cmd.ArgumentHelp,
|
||||||
Options: cmd.OptionHelp,
|
Options: cmd.OptionHelp,
|
||||||
|
Synopsis: cmd.Helptext.Synopsis,
|
||||||
Subcommands: cmd.SubcommandHelp,
|
Subcommands: cmd.SubcommandHelp,
|
||||||
Description: cmd.Help,
|
Description: cmd.Help,
|
||||||
}
|
}
|
||||||
@ -137,10 +176,11 @@ func LongHelp(rootName string, root *cmds.Command, path []string, out io.Writer)
|
|||||||
fields.Subcommands = strings.Join(subcommandText(cmd, rootName, path), "\n")
|
fields.Subcommands = strings.Join(subcommandText(cmd, rootName, path), "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
fields.Arguments = indentString(fields.Arguments, indentStr)
|
// trim the extra newlines (see TrimNewlines doc)
|
||||||
fields.Options = indentString(fields.Options, indentStr)
|
fields.TrimNewlines()
|
||||||
fields.Subcommands = indentString(fields.Subcommands, indentStr)
|
|
||||||
fields.Description = indentString(fields.Description, indentStr)
|
// indent all fields that have been set
|
||||||
|
fields.IndentAll()
|
||||||
|
|
||||||
return longHelpTemplate.Execute(out, fields)
|
return longHelpTemplate.Execute(out, fields)
|
||||||
}
|
}
|
||||||
@ -162,6 +202,7 @@ func ShortHelp(rootName string, root *cmds.Command, path []string, out io.Writer
|
|||||||
Path: pathStr,
|
Path: pathStr,
|
||||||
ArgUsage: usageText(cmd),
|
ArgUsage: usageText(cmd),
|
||||||
Tagline: cmd.Description,
|
Tagline: cmd.Description,
|
||||||
|
Synopsis: cmd.Helptext.Synopsis,
|
||||||
Description: cmd.Help,
|
Description: cmd.Help,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,16 +219,18 @@ func ShortHelp(rootName string, root *cmds.Command, path []string, out io.Writer
|
|||||||
if len(cmd.Helptext.Subcommands) > 0 {
|
if len(cmd.Helptext.Subcommands) > 0 {
|
||||||
fields.Subcommands = cmd.Helptext.Subcommands
|
fields.Subcommands = cmd.Helptext.Subcommands
|
||||||
}
|
}
|
||||||
if len(cmd.Helptext.LongDescription) > 0 {
|
if len(cmd.Helptext.ShortDescription) > 0 {
|
||||||
fields.Description = cmd.Helptext.LongDescription
|
|
||||||
} else if len(cmd.Helptext.ShortDescription) > 0 {
|
|
||||||
fields.Description = cmd.Helptext.ShortDescription
|
fields.Description = cmd.Helptext.ShortDescription
|
||||||
}
|
}
|
||||||
if len(cmd.Helptext.Usage) > 0 {
|
if len(cmd.Helptext.Usage) > 0 {
|
||||||
fields.Usage = cmd.Helptext.Subcommands
|
fields.Usage = cmd.Helptext.Subcommands
|
||||||
}
|
}
|
||||||
|
|
||||||
fields.Description = indentString(fields.Description, indentStr)
|
// trim the extra newlines (see TrimNewlines doc)
|
||||||
|
fields.TrimNewlines()
|
||||||
|
|
||||||
|
// indent all fields that have been set
|
||||||
|
fields.IndentAll()
|
||||||
|
|
||||||
return shortHelpTemplate.Execute(out, fields)
|
return shortHelpTemplate.Execute(out, fields)
|
||||||
}
|
}
|
||||||
@ -330,5 +373,5 @@ func indent(lines []string, prefix string) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func indentString(line string, prefix string) string {
|
func indentString(line string, prefix string) string {
|
||||||
return strings.Replace(line, "\n", "\n"+prefix, -1)
|
return prefix + strings.Replace(line, "\n", "\n"+prefix, -1)
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ type HelpText struct {
|
|||||||
// required
|
// required
|
||||||
Tagline string // used in <cmd usage>
|
Tagline string // used in <cmd usage>
|
||||||
ShortDescription string // used in DESCRIPTION
|
ShortDescription string // used in DESCRIPTION
|
||||||
|
Synopsis string // showcasing the cmd
|
||||||
|
|
||||||
// optional - whole section overrides
|
// optional - whole section overrides
|
||||||
Usage string // overrides USAGE section
|
Usage string // overrides USAGE section
|
||||||
|
Reference in New Issue
Block a user