...
1
16
17 package templates
18
19 import (
20 "bytes"
21 "fmt"
22 "io"
23 "strings"
24
25 "github.com/mitchellh/go-wordwrap"
26 flag "github.com/spf13/pflag"
27 )
28
29 const offset = 10
30
31
32
33
34 type HelpFlagPrinter struct {
35 wrapLimit uint
36 out io.Writer
37 }
38
39
40
41 func NewHelpFlagPrinter(out io.Writer, wrapLimit uint) *HelpFlagPrinter {
42 return &HelpFlagPrinter{
43 wrapLimit: wrapLimit,
44 out: out,
45 }
46 }
47
48
49 func (p *HelpFlagPrinter) PrintHelpFlag(flag *flag.Flag) {
50 formatBuf := new(bytes.Buffer)
51 writeFlag(formatBuf, flag)
52
53 wrappedStr := formatBuf.String()
54 flagAndUsage := strings.Split(formatBuf.String(), "\n")
55 flagStr := flagAndUsage[0]
56
57
58 if len(flagAndUsage) > 1 {
59 nextLines := strings.Join(flagAndUsage[1:], " ")
60 wrappedUsages := wordwrap.WrapString(nextLines, p.wrapLimit-offset)
61 wrappedStr = flagStr + "\n" + wrappedUsages
62 }
63 appendTabStr := strings.ReplaceAll(wrappedStr, "\n", "\n\t")
64
65 fmt.Fprintf(p.out, appendTabStr+"\n\n")
66 }
67
68
69
70 func writeFlag(out io.Writer, f *flag.Flag) {
71 deprecated := ""
72 if f.Deprecated != "" {
73 deprecated = fmt.Sprintf(" (DEPRECATED: %s)", f.Deprecated)
74 }
75 fmt.Fprintf(out, getFlagFormat(f), f.Shorthand, f.Name, f.DefValue, f.Usage, deprecated)
76 }
77
View as plain text