mirror of
https://github.com/mgechev/revive.git
synced 2024-12-12 10:44:59 +02:00
dc30eb1182
* fix(receiver-naming): distinguish types with parameters * chore: run tests using supported Go versions matrix
30 lines
697 B
Go
30 lines
697 B
Go
// Package typeparams provides utilities for working with Go ASTs with support
|
|
// for type parameters when built with Go 1.18 and higher.
|
|
package typeparams
|
|
|
|
import (
|
|
"go/ast"
|
|
)
|
|
|
|
// Enabled reports whether type parameters are enabled in the current build
|
|
// environment.
|
|
func Enabled() bool {
|
|
return enabled
|
|
}
|
|
|
|
// ReceiverType returns the named type of the method receiver, sans "*" and type
|
|
// parameters, or "invalid-type" if fn.Recv is ill formed.
|
|
func ReceiverType(fn *ast.FuncDecl) string {
|
|
e := fn.Recv.List[0].Type
|
|
if s, ok := e.(*ast.StarExpr); ok {
|
|
e = s.X
|
|
}
|
|
if enabled {
|
|
e = unpackIndexExpr(e)
|
|
}
|
|
if id, ok := e.(*ast.Ident); ok {
|
|
return id.Name
|
|
}
|
|
return "invalid-type"
|
|
}
|