func getStructFieldFlag()

in struct_field.go [70:104]


func getStructFieldFlag(field reflect.StructField, fieldValue reflect.Value, ns []string) []cli.Flag {
	var names []string

	if name := field.Tag.Get("short"); name != "" {
		names = append(names, strings.Join(append(ns, name), "-"))
	}
	if name := field.Tag.Get("long"); name != "" {
		names = append(names, strings.Join(append(ns, name), "-"))
	}

	if len(names) == 0 {
		return []cli.Flag{}
	}

	envName := field.Tag.Get("env")
	// If the env tag begins with "@", any namespace tags take affect, with an opininated format:
	// - All characters are uppercased
	// - All hyphens are converted to underscores
	if strings.HasPrefix(envName, "@") {
		envName = strings.Join(append(ns, envName[1:]), "_")
		envName = strings.ToUpper(envName)
		envName = strings.ReplaceAll(envName, "-", "_")
	}

	flag := cli.GenericFlag{
		Name: strings.Join(names, ", "),
		Value: StructFieldValue{
			field: field,
			value: fieldValue,
		},
		Usage:  reName.ReplaceAllString(field.Tag.Get("description"), "`$1`"),
		EnvVar: envName,
	}
	return []cli.Flag{StructFieldFlag{GenericFlag: flag}}
}