in struct_field.go [106:138]
func getFlagsForStructField(field reflect.StructField, fieldValue reflect.Value, ns []string) []cli.Flag {
if !fieldValue.IsValid() {
return []cli.Flag{}
}
switch field.Type.Kind() {
case reflect.Struct:
if newNs := field.Tag.Get("namespace"); newNs != "" {
return getFlagsForValue(fieldValue, append(ns, newNs))
} else if field.Anonymous {
return getFlagsForValue(fieldValue, ns)
}
break
case reflect.Ptr:
if field.Type.Elem().Kind() == reflect.Struct {
if newNs := field.Tag.Get("namespace"); newNs != "" {
return getFlagsForValue(fieldValue, append(ns, newNs))
}
} else {
return getStructFieldFlag(field, fieldValue, ns)
}
break
case reflect.Chan:
case reflect.Func:
case reflect.Interface:
case reflect.UnsafePointer:
break
default:
return getStructFieldFlag(field, fieldValue, ns)
}
return []cli.Flag{}
}