package astp

import "go/ast"

// IsDecl reports whether a node is a ast.Decl.
func IsDecl(node ast.Node) bool {
	_, ok := node.(ast.Decl)
	return ok
}

// IsFuncDecl reports whether a given ast.Node is a function declaration (*ast.FuncDecl).
func IsFuncDecl(node ast.Node) bool {
	_, ok := node.(*ast.FuncDecl)
	return ok
}

// IsGenDecl reports whether a given ast.Node is a generic declaration (*ast.GenDecl).
func IsGenDecl(node ast.Node) bool {
	_, ok := node.(*ast.GenDecl)
	return ok
}

// IsImportSpec reports whether a given ast.Node is an import declaration (*ast.ImportSpec).
func IsImportSpec(node ast.Node) bool {
	_, ok := node.(*ast.ImportSpec)
	return ok
}

// IsValueSpec reports whether a given ast.Node is a value declaration (*ast.ValueSpec).
func IsValueSpec(node ast.Node) bool {
	_, ok := node.(*ast.ValueSpec)
	return ok
}

// IsTypeSpec reports whether a given ast.Node is a type declaration (*ast.TypeSpec).
func IsTypeSpec(node ast.Node) bool {
	_, ok := node.(*ast.TypeSpec)
	return ok
}