-
Tilman Dilo authored
The check for duplicate struct field tags introduced in CL 16704 triggers a panic when an anonymous struct field with a duplicate name is encountered. For such a field, the names slice of the ast.Field is nil but accessed regardless to generate the warning message. Additionally, the check produces false positives for XML tags in some cases: - When fields are encoded as XML attributes, a warning is produced when an attribute reuses a name previously used for an element. Example: type Foo struct { First int `xml:"a"` NoDup int `xml:"a,attr"` // warning about reuse of "a" } - When XMLName is used to set the name of the enclosing struct element, it is treated as a regular struct field. Example: type Bar struct { XMLName xml.Name `xml:"a"` NoDup int `xml:"a"` // warning about reuse of "a" } This commit addresses all three issues. The panic is avoided by using the type name instead of the field name for anonymous struct fields when generating the warning message. An additional namespace for checking XML attribute names separately from element names is introduced. Lastly, fields named XMLName are excluded from the check for duplicate tags. Updates #18256 Change-Id: Ida48ea8584b56bd4d12ae3ebd588a66ced2594cc Reviewed-on: https://go-review.googlesource.com/34070 Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
1657d76d