Skip to content

Commit 8f6acfe

Browse files
committed
Componentize template
1 parent 6504da4 commit 8f6acfe

File tree

3 files changed

+58
-43
lines changed

3 files changed

+58
-43
lines changed

help.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,17 @@ func printHelpCustom(out io.Writer, templ string, data interface{}, customFuncs
362362

363363
w := tabwriter.NewWriter(out, 1, 8, 2, ' ', 0)
364364
t := template.Must(template.New("help").Funcs(funcMap).Parse(templ))
365+
t.New("helpNameTemplate").Parse(helpNameTemplate)
366+
t.New("usageTemplate").Parse(usageTemplate)
367+
t.New("descriptionTemplate").Parse(descriptionTemplate)
368+
t.New("visibleCommandTemplate").Parse(visibleCommandTemplate)
369+
t.New("copyrightTemplate").Parse(copyrightTemplate)
370+
t.New("versionTemplate").Parse(versionTemplate)
371+
t.New("visibleFlagCategoryTemplate").Parse(visibleFlagCategoryTemplate)
372+
t.New("visibleFlagTemplate").Parse(visibleFlagTemplate)
373+
t.New("visibleGlobalFlagCategoryTemplate").Parse(strings.Replace(visibleFlagCategoryTemplate, "OPTIONS", "GLOBAL OPTIONS", -1))
374+
t.New("authorsTemplate").Parse(authorsTemplate)
375+
t.New("visibleCommandCategoryTemplate").Parse(visibleCommandCategoryTemplate)
365376

366377
err := t.Execute(w, data)
367378
if err != nil {

help_test.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,8 +1367,7 @@ DESCRIPTION:
13671367
13681368
OPTIONS:
13691369
--help, -h show help (default: false)
1370-
1371-
`
1370+
`
13721371

13731372
if output.String() != expected {
13741373
t.Errorf("Unexpected wrapping, got:\n%s\nexpected:\n%s",
@@ -1437,8 +1436,7 @@ USAGE:
14371436
14381437
OPTIONS:
14391438
--help, -h show help (default: false)
1440-
1441-
`
1439+
`
14421440

14431441
if output.String() != expected {
14441442
t.Errorf("Unexpected wrapping, got:\n%s\nexpected: %s",
@@ -1514,8 +1512,7 @@ USAGE:
15141512
OPTIONS:
15151513
--help, -h show help (default: false)
15161514
--test-f value my test usage
1517-
1518-
`
1515+
`
15191516

15201517
if output.String() != expected {
15211518
t.Errorf("Unexpected wrapping, got:\n%s\nexpected: %s",

template.go

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,36 @@
11
package cli
22

3+
var helpNameTemplate = `{{$v := offset .HelpName 6}}{{wrap .HelpName 3}}{{if .Usage}} - {{wrap .Usage $v}}{{end}}`
4+
var usageTemplate = `{{if .UsageText}}{{wrap .UsageText 3}}{{else}}{{.HelpName}}{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}`
5+
var descriptionTemplate = `{{wrap .Description 3}}`
6+
var authorsTemplate = `{{with $length := len .Authors}}{{if ne 1 $length}}S{{end}}{{end}}:
7+
{{range $index, $author := .Authors}}{{if $index}}
8+
{{end}}{{$author}}{{end}}`
9+
var visibleCommandTemplate = `{{ $cv := offsetCommands .VisibleCommands 5}}{{range .VisibleCommands}}
10+
{{$s := join .Names ", "}}{{$s}}{{ $sp := subtract $cv (offset $s 3) }}{{ indent $sp ""}}{{wrap .Usage $cv}}{{end}}`
11+
var visibleCommandCategoryTemplate = `{{range .VisibleCategories}}{{if .Name}}
12+
{{.Name}}:{{range .VisibleCommands}}
13+
{{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{else}}{{template "visibleCommandTemplate" .}}{{end}}{{end}}`
14+
var visibleFlagCategoryTemplate = `{{range .VisibleFlagCategories}}
15+
{{if .Name}}{{.Name}}
16+
{{end}}{{range .Flags}}{{.}}
17+
{{end}}{{end}}`
18+
19+
var visibleFlagTemplate = `{{range $index, $option := .VisibleFlags}}{{if $index}}{{end}}
20+
{{wrap $option.String 6}}{{end}}`
21+
22+
var versionTemplate = `{{if .Version}}{{if not .HideVersion}}
23+
24+
VERSION:
25+
{{.Version}}{{end}}{{end}}`
26+
27+
var copyrightTemplate = `{{wrap .Copyright 3}}`
28+
329
// AppHelpTemplate is the text template for the Default help topic.
430
// cli.go uses text/template to render templates. You can
531
// render custom help text by setting this variable.
632
var AppHelpTemplate = `NAME:
7-
{{$v := offset .Name 6}}{{wrap .Name 3}}{{if .Usage}} - {{wrap .Usage $v}}{{end}}
33+
{{template "helpNameTemplate" .}}
834
935
USAGE:
1036
{{if .UsageText}}{{wrap .UsageText 3}}{{else}}{{.HelpName}} {{if .VisibleFlags}}[global options]{{end}}{{if .Commands}} command [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Version}}{{if not .HideVersion}}
@@ -13,75 +39,56 @@ VERSION:
1339
{{.Version}}{{end}}{{end}}{{if .Description}}
1440
1541
DESCRIPTION:
16-
{{wrap .Description 3}}{{end}}{{if len .Authors}}
42+
{{template "descriptionTemplate" .}}{{end}}{{if len .Authors}}
1743
18-
AUTHOR{{with $length := len .Authors}}{{if ne 1 $length}}S{{end}}{{end}}:
19-
{{range $index, $author := .Authors}}{{if $index}}
20-
{{end}}{{$author}}{{end}}{{end}}{{if .VisibleCommands}}
44+
AUTHOR{{template "authorsTemplate" .}}{{end}}{{if .VisibleCommands}}
2145
22-
COMMANDS:{{range .VisibleCategories}}{{if .Name}}
23-
{{.Name}}:{{range .VisibleCommands}}
24-
{{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{else}}{{ $cv := offsetCommands .VisibleCommands 5}}{{range .VisibleCommands}}
25-
{{$s := join .Names ", "}}{{$s}}{{ $sp := subtract $cv (offset $s 3) }}{{ indent $sp ""}}{{wrap .Usage $cv}}{{end}}{{end}}{{end}}{{end}}{{if .VisibleFlagCategories}}
46+
COMMANDS:{{template "visibleCommandCategoryTemplate" .}}{{end}}{{if .VisibleFlagCategories}}
2647
27-
GLOBAL OPTIONS:{{range .VisibleFlagCategories}}
28-
{{if .Name}}{{.Name}}
29-
{{end}}{{range .Flags}}{{.}}
30-
{{end}}{{end}}{{else}}{{if .VisibleFlags}}
48+
GLOBAL OPTIONS:{{template "visibleFlagCategoryTemplate" .}}{{else if .VisibleFlags}}
3149
32-
GLOBAL OPTIONS:
33-
{{range $index, $option := .VisibleFlags}}{{if $index}}
34-
{{end}}{{wrap $option.String 6}}{{end}}{{end}}{{end}}{{if .Copyright}}
50+
GLOBAL OPTIONS:{{template "visibleFlagTemplate" .}}{{end}}{{if .Copyright}}
3551
3652
COPYRIGHT:
37-
{{wrap .Copyright 3}}{{end}}
53+
{{template "copyrightTemplate" .}}{{end}}
3854
`
3955

4056
// CommandHelpTemplate is the text template for the command help topic.
4157
// cli.go uses text/template to render templates. You can
4258
// render custom help text by setting this variable.
4359
var CommandHelpTemplate = `NAME:
44-
{{$v := offset .HelpName 6}}{{wrap .HelpName 3}}{{if .Usage}} - {{wrap .Usage $v}}{{end}}
60+
{{template "helpNameTemplate" .}}
4561
4662
USAGE:
47-
{{if .UsageText}}{{wrap .UsageText 3}}{{else}}{{.HelpName}}{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Category}}
63+
{{template "usageTemplate" .}}{{if .Category}}
4864
4965
CATEGORY:
5066
{{.Category}}{{end}}{{if .Description}}
5167
5268
DESCRIPTION:
53-
{{wrap .Description 3}}{{end}}{{if .VisibleFlagCategories}}
69+
{{template "descriptionTemplate" .}}{{end}}{{if .VisibleFlagCategories}}
5470
55-
OPTIONS:{{range .VisibleFlagCategories}}
56-
{{if .Name}}{{.Name}}
57-
{{end}}{{range .Flags}}{{.}}
58-
{{end}}{{end}}{{else}}{{if .VisibleFlags}}
59-
OPTIONS:{{range $index, $option := .VisibleFlags}}{{if $index}}{{end}}
60-
{{wrap $option.String 6}}{{end}}{{end}}{{end}}
61-
`
71+
OPTIONS:{{template "visibleFlagCategoryTemplate" .}}{{else if .VisibleFlags}}
72+
73+
OPTIONS:{{template "visibleFlagTemplate" .}}{{end}}`
6274

6375
// SubcommandHelpTemplate is the text template for the subcommand help topic.
6476
// cli.go uses text/template to render templates. You can
6577
// render custom help text by setting this variable.
6678
var SubcommandHelpTemplate = `NAME:
67-
{{.HelpName}} - {{.Usage}}
79+
{{template "helpNameTemplate" .}}
6880
6981
USAGE:
7082
{{if .UsageText}}{{wrap .UsageText 3}}{{else}}{{.HelpName}} command{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Description}}
7183
7284
DESCRIPTION:
73-
{{wrap .Description 3}}{{end}}{{if .VisibleCommands}}
85+
{{template "descriptionTemplate" .}}{{end}}{{if .VisibleCommands}}
7486
75-
COMMANDS:{{ $cv := offsetCommands .VisibleCommands 5}}{{range .VisibleCommands}}
76-
{{$s := join .Names ", "}}{{$s}}{{ $sp := subtract $cv (offset $s 3) }}{{ indent $sp ""}}{{wrap .Usage $cv}}{{end}}{{end}}{{if .VisibleFlagCategories}}
87+
COMMANDS:{{template "visibleCommandTemplate" .}}{{end}}{{if .VisibleFlagCategories}}
7788
78-
OPTIONS:{{range .VisibleFlagCategories}}
79-
{{if .Name}}{{.Name}}{{end}}{{range .Flags}}{{.}}
80-
{{end}}{{end}}{{else}}{{if .VisibleFlags}}
89+
OPTIONS:{{template "visibleFlagCategoryTemplate" .}}{{else if .VisibleFlags}}
8190
82-
OPTIONS:{{range $index, $option := .VisibleFlags}}{{if $index}}{{end}}
83-
{{wrap $option.String 6}}{{end}}{{end}}{{end}}
84-
`
91+
OPTIONS:{{template "visibleFlagTemplate" .}}{{end}}`
8592

8693
var MarkdownDocTemplate = `{{if gt .SectionNum 0}}% {{ .App.Name }} {{ .SectionNum }}
8794

0 commit comments

Comments
 (0)