263 lines
6.8 KiB
Go
263 lines
6.8 KiB
Go
|
package kingpin
|
||
|
|
||
|
// Default usage template.
|
||
|
var DefaultUsageTemplate = `{{define "FormatCommand"}}\
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end}}\
|
||
|
{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatCommands"}}\
|
||
|
{{range .FlattenedCommands}}\
|
||
|
{{if not .Hidden}}\
|
||
|
{{.FullCommand}}{{if .Default}}*{{end}}{{template "FormatCommand" .}}
|
||
|
{{.Help|Wrap 4}}
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatUsage"}}\
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}
|
||
|
{{if .Help}}
|
||
|
{{.Help|Wrap 0}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{end}}\
|
||
|
|
||
|
{{if .Context.SelectedCommand}}\
|
||
|
usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}}
|
||
|
{{else}}\
|
||
|
usage: {{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
{{end}}\
|
||
|
{{if .Context.Flags}}\
|
||
|
Flags:
|
||
|
{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .Context.Args}}\
|
||
|
Args:
|
||
|
{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .Context.SelectedCommand}}\
|
||
|
{{if len .Context.SelectedCommand.Commands}}\
|
||
|
Subcommands:
|
||
|
{{template "FormatCommands" .Context.SelectedCommand}}
|
||
|
{{end}}\
|
||
|
{{else if .App.Commands}}\
|
||
|
Commands:
|
||
|
{{template "FormatCommands" .App}}
|
||
|
{{end}}\
|
||
|
`
|
||
|
|
||
|
// Usage template where command's optional flags are listed separately
|
||
|
var SeparateOptionalFlagsUsageTemplate = `{{define "FormatCommand"}}\
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end}}\
|
||
|
{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatCommands"}}\
|
||
|
{{range .FlattenedCommands}}\
|
||
|
{{if not .Hidden}}\
|
||
|
{{.FullCommand}}{{if .Default}}*{{end}}{{template "FormatCommand" .}}
|
||
|
{{.Help|Wrap 4}}
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatUsage"}}\
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}
|
||
|
{{if .Help}}
|
||
|
{{.Help|Wrap 0}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{end}}\
|
||
|
{{if .Context.SelectedCommand}}\
|
||
|
usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}}
|
||
|
{{else}}\
|
||
|
usage: {{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
{{end}}\
|
||
|
|
||
|
{{if .Context.Flags|RequiredFlags}}\
|
||
|
Required flags:
|
||
|
{{.Context.Flags|RequiredFlags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .Context.Flags|OptionalFlags}}\
|
||
|
Optional flags:
|
||
|
{{.Context.Flags|OptionalFlags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .Context.Args}}\
|
||
|
Args:
|
||
|
{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .Context.SelectedCommand}}\
|
||
|
Subcommands:
|
||
|
{{if .Context.SelectedCommand.Commands}}\
|
||
|
{{template "FormatCommands" .Context.SelectedCommand}}
|
||
|
{{end}}\
|
||
|
{{else if .App.Commands}}\
|
||
|
Commands:
|
||
|
{{template "FormatCommands" .App}}
|
||
|
{{end}}\
|
||
|
`
|
||
|
|
||
|
// Usage template with compactly formatted commands.
|
||
|
var CompactUsageTemplate = `{{define "FormatCommand"}}\
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end}}\
|
||
|
{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatCommandList"}}\
|
||
|
{{range .}}\
|
||
|
{{if not .Hidden}}\
|
||
|
{{.Depth|Indent}}{{.Name}}{{if .Default}}*{{end}}{{template "FormatCommand" .}}
|
||
|
{{end}}\
|
||
|
{{template "FormatCommandList" .Commands}}\
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatUsage"}}\
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}
|
||
|
{{if .Help}}
|
||
|
{{.Help|Wrap 0}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{end}}\
|
||
|
|
||
|
{{if .Context.SelectedCommand}}\
|
||
|
usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}}
|
||
|
{{else}}\
|
||
|
usage: {{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
{{end}}\
|
||
|
{{if .Context.Flags}}\
|
||
|
Flags:
|
||
|
{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .Context.Args}}\
|
||
|
Args:
|
||
|
{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .Context.SelectedCommand}}\
|
||
|
{{if .Context.SelectedCommand.Commands}}\
|
||
|
Commands:
|
||
|
{{.Context.SelectedCommand}}
|
||
|
{{template "FormatCommandList" .Context.SelectedCommand.Commands}}
|
||
|
{{end}}\
|
||
|
{{else if .App.Commands}}\
|
||
|
Commands:
|
||
|
{{template "FormatCommandList" .App.Commands}}
|
||
|
{{end}}\
|
||
|
`
|
||
|
|
||
|
var ManPageTemplate = `{{define "FormatFlags"}}\
|
||
|
{{range .Flags}}\
|
||
|
{{if not .Hidden}}\
|
||
|
.TP
|
||
|
\fB{{if .Short}}-{{.Short|Char}}, {{end}}--{{.Name}}{{if not .IsBoolFlag}}={{.FormatPlaceHolder}}{{end}}\\fR
|
||
|
{{.Help}}
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatCommand"}}\
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end}}\
|
||
|
{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}{{if .Default}}*{{end}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatCommands"}}\
|
||
|
{{range .FlattenedCommands}}\
|
||
|
{{if not .Hidden}}\
|
||
|
.SS
|
||
|
\fB{{.FullCommand}}{{template "FormatCommand" .}}\\fR
|
||
|
.PP
|
||
|
{{.Help}}
|
||
|
{{template "FormatFlags" .}}\
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatUsage"}}\
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}\\fR
|
||
|
{{end}}\
|
||
|
|
||
|
.TH {{.App.Name}} 1 {{.App.Version}} "{{.App.Author}}"
|
||
|
.SH "NAME"
|
||
|
{{.App.Name}}
|
||
|
.SH "SYNOPSIS"
|
||
|
.TP
|
||
|
\fB{{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
.SH "DESCRIPTION"
|
||
|
{{.App.Help}}
|
||
|
.SH "OPTIONS"
|
||
|
{{template "FormatFlags" .App}}\
|
||
|
{{if .App.Commands}}\
|
||
|
.SH "COMMANDS"
|
||
|
{{template "FormatCommands" .App}}\
|
||
|
{{end}}\
|
||
|
`
|
||
|
|
||
|
// Default usage template.
|
||
|
var LongHelpTemplate = `{{define "FormatCommand"}}\
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end}}\
|
||
|
{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatCommands"}}\
|
||
|
{{range .FlattenedCommands}}\
|
||
|
{{if not .Hidden}}\
|
||
|
{{.FullCommand}}{{template "FormatCommand" .}}
|
||
|
{{.Help|Wrap 4}}
|
||
|
{{with .Flags|FlagsToTwoColumns}}{{FormatTwoColumnsWithIndent . 4 2}}{{end}}
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{define "FormatUsage"}}\
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}
|
||
|
{{if .Help}}
|
||
|
{{.Help|Wrap 0}}\
|
||
|
{{end}}\
|
||
|
|
||
|
{{end}}\
|
||
|
|
||
|
usage: {{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
{{if .Context.Flags}}\
|
||
|
Flags:
|
||
|
{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .Context.Args}}\
|
||
|
Args:
|
||
|
{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end}}\
|
||
|
{{if .App.Commands}}\
|
||
|
Commands:
|
||
|
{{template "FormatCommands" .App}}
|
||
|
{{end}}\
|
||
|
`
|
||
|
|
||
|
var BashCompletionTemplate = `
|
||
|
_{{.App.Name}}_bash_autocomplete() {
|
||
|
local cur prev opts base
|
||
|
COMPREPLY=()
|
||
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||
|
opts=$( ${COMP_WORDS[0]} --completion-bash ${COMP_WORDS[@]:1:$COMP_CWORD} )
|
||
|
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||
|
return 0
|
||
|
}
|
||
|
complete -F _{{.App.Name}}_bash_autocomplete {{.App.Name}}
|
||
|
|
||
|
`
|
||
|
|
||
|
var ZshCompletionTemplate = `
|
||
|
#compdef {{.App.Name}}
|
||
|
autoload -U compinit && compinit
|
||
|
autoload -U bashcompinit && bashcompinit
|
||
|
|
||
|
_{{.App.Name}}_bash_autocomplete() {
|
||
|
local cur prev opts base
|
||
|
COMPREPLY=()
|
||
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||
|
opts=$( ${COMP_WORDS[0]} --completion-bash ${COMP_WORDS[@]:1:$COMP_CWORD} )
|
||
|
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||
|
return 0
|
||
|
}
|
||
|
complete -F _{{.App.Name}}_bash_autocomplete {{.App.Name}}
|
||
|
`
|