@@ -65,7 +65,7 @@ func (f *FlagLoader) Load(s interface{}) error {
6565 f .flagSet = flagSet
6666
6767 for _ , field := range strct .Fields () {
68- f .processField (field .Name (), field )
68+ f .processField (field .Name (), field , 0 )
6969 }
7070
7171 flagSet .Usage = func () {
@@ -92,7 +92,7 @@ func filterArgs(args []string) []string {
9292 r := []string {}
9393 for i := 0 ; i < len (args ); i ++ {
9494 if strings .Index (args [i ], "test." ) >= 0 {
95- if i + 1 < len (args ) && strings .Index (args [i + 1 ], "-" ) == - 1 {
95+ if i + 1 < len (args ) && strings .Index (args [i + 1 ], "-" ) == - 1 {
9696 i ++
9797 }
9898 i ++
@@ -106,7 +106,7 @@ func filterArgs(args []string) []string {
106106// processField generates a flag based on the given field and fieldName. If a
107107// nested struct is detected, a flag for each field of that nested struct is
108108// generated too.
109- func (f * FlagLoader ) processField (fieldName string , field * structs.Field ) error {
109+ func (f * FlagLoader ) processField (fieldName string , field * structs.Field , nestedLevel int ) error {
110110 if f .CamelCase {
111111 fieldName = strings .Join (camelcase .Split (fieldName ), "-" )
112112 fieldName = strings .Replace (fieldName , "---" , "-" , - 1 )
@@ -115,9 +115,9 @@ func (f *FlagLoader) processField(fieldName string, field *structs.Field) error
115115 switch field .Kind () {
116116 case reflect .Struct :
117117 for _ , ff := range field .Fields () {
118- flagName := field . Name () + "-" + ff .Name ()
118+ flagName := fieldName + "-" + ff .Name ()
119119
120- if f .Flatten {
120+ if f .Flatten && nestedLevel == 0 {
121121 // first check if it's set or not, because if we have duplicate
122122 // we don't want to break the flag. Panic by giving a readable
123123 // output
@@ -131,7 +131,7 @@ func (f *FlagLoader) processField(fieldName string, field *structs.Field) error
131131 flagName = ff .Name ()
132132 }
133133
134- if err := f .processField (flagName , ff ); err != nil {
134+ if err := f .processField (flagName , ff , nestedLevel + 1 ); err != nil {
135135 return err
136136 }
137137 }
0 commit comments