@@ -208,17 +208,51 @@ func (c *Command) writeCode(w *codeWriter) error {
208208 // If there are subcommands, this needs to be persistent flags
209209 flagVar = "s.Command.PersistentFlags()"
210210 }
211+ var flagAliases [][]string
211212 for _ , optSet := range c .OptionsSets {
213+ // Add aliases
214+ for _ , opt := range optSet .Options {
215+ for _ , alias := range opt .Aliases {
216+ flagAliases = append (flagAliases , []string {alias , opt .Name })
217+ }
218+ }
219+ for _ , include := range optSet .IncludeOptionsSets {
220+ // Find include
221+ cmdLoop:
222+ for _ , cmd := range w .allCommands {
223+ for _ , optSet := range cmd .OptionsSets {
224+ if optSet .SetName == include {
225+ for _ , opt := range optSet .Options {
226+ for _ , alias := range opt .Aliases {
227+ flagAliases = append (flagAliases , []string {alias , opt .Name })
228+ }
229+ }
230+ break cmdLoop
231+ }
232+ }
233+ }
234+ }
235+
212236 // If there's a name, this is done in the method
213237 if optSet .SetName != "" {
214238 w .writeLinef ("s.%v.buildFlags(cctx, %v)" , optSet .setStructName (), flagVar )
215239 continue
216240 }
241+
217242 // Each field
218243 if err := optSet .writeFlagBuilding ("s" , flagVar , w ); err != nil {
219244 return fmt .Errorf ("failed building option flags: %w" , err )
220245 }
221246 }
247+ // Generate normalize for aliases
248+ if len (flagAliases ) > 0 {
249+ sort .Slice (flagAliases , func (i , j int ) bool { return flagAliases [i ][0 ] < flagAliases [j ][0 ] })
250+ w .writeLinef ("%v.SetNormalizeFunc(aliasNormalizer(map[string]string{" , flagVar )
251+ for _ , aliases := range flagAliases {
252+ w .writeLinef ("%q: %q," , aliases [0 ], aliases [1 ])
253+ }
254+ w .writeLinef ("}))" )
255+ }
222256 // If there are no subcommands, we need a run function
223257 if len (subCommands ) == 0 {
224258 w .writeLinef ("s.Command.Run = func(c *%v.Command, args []string) {" , w .importCobra ())
@@ -339,17 +373,25 @@ func (c *CommandOption) writeFlagBuilding(selfVar, flagVar string, w *codeWriter
339373 if len (c .EnumValues ) > 0 {
340374 desc += fmt .Sprintf (" Accepted values: %s." , strings .Join (c .EnumValues , ", " ))
341375 }
376+ // If required, append to desc
377+ if c .Required {
378+ desc += " Required."
379+ }
380+ // If there are aliases, append to desc
381+ for _ , alias := range c .Aliases {
382+ desc += fmt .Sprintf (` Aliased as "--%v".` , alias )
383+ }
342384
343385 if setDefault != "" {
344386 // set default before calling Var so that it stores thedefault value into the flag
345387 w .writeLinef ("%v.%v = %v" , selfVar , c .fieldName (), setDefault )
346388 }
347- if c .Alias == "" {
389+ if c .Shorthand == "" {
348390 w .writeLinef ("%v.%v(&%v.%v, %q%v, %q)" ,
349391 flagVar , flagMeth , selfVar , c .fieldName (), c .Name , defaultLit , desc )
350392 } else {
351393 w .writeLinef ("%v.%vP(&%v.%v, %q, %q%v, %q)" ,
352- flagVar , flagMeth , selfVar , c .fieldName (), c .Name , c .Alias , defaultLit , desc )
394+ flagVar , flagMeth , selfVar , c .fieldName (), c .Name , c .Shorthand , defaultLit , desc )
353395 }
354396 if c .Required {
355397 w .writeLinef ("_ = %v.MarkFlagRequired(%v, %q)" , w .importCobra (), flagVar , c .Name )
0 commit comments