in struct_field.go [140:160]
func getFlagsForValue(value reflect.Value, ns []string) []cli.Flag {
var flags []cli.Flag
if value.Type().Kind() == reflect.Ptr && value.Type().Elem().Kind() == reflect.Struct {
if value.IsNil() {
value.Set(reflect.New(value.Type().Elem()))
}
value = reflect.Indirect(value)
} else if value.Type().Kind() != reflect.Struct {
return []cli.Flag{}
}
valueType := value.Type()
for i := 0; i < valueType.NumField(); i++ {
newFlags := getFlagsForStructField(valueType.Field(i), value.Field(i), ns)
flags = append(flags, newFlags...)
}
return flags
}