Skip to content

Commit d43c00c

Browse files
committed
refactor
1 parent 6f465e8 commit d43c00c

1 file changed

Lines changed: 46 additions & 22 deletions

File tree

pkg/cli/docs.go

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,12 @@ func writeCommand(c *Command, f *os.File) error {
4747
}
4848
}
4949

50-
flags := map[*Flag]bool{}
51-
flagList := []*Flag{}
52-
_ = c.Flags().Visit(func(flag *Flag) error {
53-
_, ok := flags[flag]
54-
if !ok {
55-
flags[flag] = true
56-
flagList = append(flagList, flag)
57-
}
58-
return nil
59-
})
60-
if len(flags) > 0 {
61-
s, err := renderlags(flagList)
50+
groups, err := groupFlags(c.Flags())
51+
if err != nil {
52+
return err
53+
}
54+
if len(groups) > 0 {
55+
s, err := renderFlagGroup(groups)
6256
if err != nil {
6357
return err
6458
}
@@ -70,35 +64,65 @@ func writeCommand(c *Command, f *os.File) error {
7064
return nil
7165
}
7266

73-
func renderlags(flags []*Flag) (string, error) {
67+
type flagGroup struct {
68+
Group string
69+
Subgroup string
70+
Flags []*Flag
71+
}
72+
73+
func groupFlags(flags *FlagSet) ([]flagGroup, error) {
7474
type key struct {
7575
group string
7676
subgroup string
7777
}
7878

79+
mFlags := map[*Flag]bool{}
80+
flagList := []*Flag{}
81+
_ = flags.Visit(func(flag *Flag) error {
82+
_, ok := mFlags[flag]
83+
if !ok {
84+
mFlags[flag] = true
85+
flagList = append(flagList, flag)
86+
}
87+
return nil
88+
})
89+
7990
m := map[key][]*Flag{}
80-
groups := []key{}
91+
var order []key
92+
var groups []flagGroup
8193

82-
for _, f := range flags {
94+
for _, f := range flagList {
8395
g, sg := splitFlagName(f.Name)
8496
k := key{g, sg}
8597
m[k] = append(m[k], f)
86-
groups = append(groups, k)
98+
order = append(order, k)
99+
}
100+
101+
for _, k := range order {
102+
groups = append(groups, flagGroup{
103+
Group: k.group,
104+
Subgroup: k.subgroup,
105+
Flags: m[k],
106+
})
87107
}
88108

109+
return groups, nil
110+
}
111+
112+
func renderFlagGroup(groups []flagGroup) (string, error) {
89113
var sb strings.Builder
90114
currentGroup := ""
91115
for _, g := range groups {
92116

93-
if g.group != currentGroup {
94-
if _, err := sb.WriteString(fmt.Sprintf("### %s\n\n", g.group)); err != nil {
117+
if g.Group != currentGroup {
118+
if _, err := sb.WriteString(fmt.Sprintf("### %s\n\n", g.Group)); err != nil {
95119
return "", err
96120
}
97-
currentGroup = g.group
121+
currentGroup = g.Group
98122
}
99123

100-
if g.subgroup != "" {
101-
if _, err := sb.WriteString(fmt.Sprintf("#### %s\n\n", g.subgroup)); err != nil {
124+
if g.Subgroup != "" {
125+
if _, err := sb.WriteString(fmt.Sprintf("#### %s\n\n", g.Subgroup)); err != nil {
102126
return "", err
103127
}
104128
}
@@ -109,7 +133,7 @@ func renderlags(flags []*Flag) (string, error) {
109133
); err != nil {
110134
return "", err
111135
}
112-
for _, flag := range m[g] {
136+
for _, flag := range g.Flags {
113137
short := flag.Shorthand
114138
if short == "" {
115139
short = "-"

0 commit comments

Comments
 (0)