From 6ed2d52b1bf99a1ddd1a201c9489bc435adf8999 Mon Sep 17 00:00:00 2001 From: Ivan Ivanov Date: Sun, 1 May 2022 20:07:12 +0300 Subject: [PATCH] Fix gocognit output when a function has generic receiver type recvString func in gocognit returns BADRECV when the function's receiver is a generic type. --- gocognit.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gocognit.go b/gocognit.go index 418c163..a36a693 100644 --- a/gocognit.go +++ b/gocognit.go @@ -4,6 +4,7 @@ import ( "fmt" "go/ast" "go/token" + "strings" "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/passes/inspect" @@ -57,6 +58,15 @@ func recvString(recv ast.Expr) string { return t.Name case *ast.StarExpr: return "*" + recvString(t.X) + case *ast.IndexExpr: + return recvString(t.X) + "[" + recvString(t.Index) + "]" + case *ast.IndexListExpr: + targs := make([]string, 0, len(t.Indices)) + for _, exp := range t.Indices { + targs = append(targs, recvString(exp)) + } + + return recvString(t.X) + "[" + strings.Join(targs, ", ") + "]" } return "BADRECV" }