// 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"
}