@@ -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