diff --git a/rule/confusing-naming.go b/rule/confusing-naming.go index febfd88..32f6dd8 100644 --- a/rule/confusing-naming.go +++ b/rule/confusing-naming.go @@ -138,16 +138,32 @@ func getStructName(r *ast.FieldList) string { switch v := t.(type) { case *ast.StarExpr: - t = v.X + return extractFromStarExpr(v) case *ast.IndexExpr: - t = v.X + return extractFromIndexExpr(v) + case *ast.Ident: + return v.Name } - if p, _ := t.(*ast.Ident); p != nil { - result = p.Name - } + return defaultStructName +} - return result +func extractFromStarExpr(expr *ast.StarExpr) string { + switch v := expr.X.(type) { + case *ast.IndexExpr: + return extractFromIndexExpr(v) + case *ast.Ident: + return v.Name + } + return defaultStructName +} + +func extractFromIndexExpr(expr *ast.IndexExpr) string { + switch v := expr.X.(type) { + case *ast.Ident: + return v.Name + } + return defaultStructName } func checkStructFields(fields *ast.FieldList, structName string, w *lintConfusingNames) { diff --git a/testdata/confusing-naming1.go b/testdata/confusing-naming1.go index 5b06bac..1fb4d7d 100644 --- a/testdata/confusing-naming1.go +++ b/testdata/confusing-naming1.go @@ -70,3 +70,14 @@ type y[T any] struct{} func (y[T]) method() { } + +// issue #982 +type a[T any] struct{} + +func (x *a[T]) method() { +} + +type b[T any] struct{} + +func (x *b[T]) method() { +}