func (p *Package) Has(name string) bool {
	_, has := p.Types[name]
	return has
}
Has returns true if the given name references a type known to this package.
package types
import "strings"
func Ref(packageName, typeName string) *Type {
	return &Type{Name: Name{
		Name:    typeName,
		Package: packageName,
	}}
}
type Name struct {
	Package string
	Name string
	Path string
}
func (n Name) String() string {
	if n.Package == "" {
		return n.Name
	}
	return n.Package + "." + n.Name
}
func ParseFullyQualifiedName(fqn string) Name {
	cs := strings.Split(fqn, ".")
	pkg := ""
	if len(cs) > 1 {
		pkg = strings.Join(cs[0:len(cs)-1], ".")
	}
	return Name{
		Name:    cs[len(cs)-1],
		Package: pkg,
	}
}
type Kind string
const (
	Builtin Kind = "Builtin"
	Struct  Kind = "Struct"
	Map     Kind = "Map"
	Slice   Kind = "Slice"
	Pointer Kind = "Pointer"
	Alias Kind = "Alias"
	Interface Kind = "Interface"
	Array Kind = "Array"  
	Chan  Kind = "Chan"
	Func  Kind = "Func"
	DeclarationOf Kind = "DeclarationOf"
	Unknown       Kind = ""
	Unsupported   Kind = "Unsupported"
	Protobuf Kind = "Protobuf"
)
type Package struct {
	Path string
	SourcePath string
	Name string
	DocComments []string
	Comments []string
	Types map[string]*Type
	Functions map[string]*Type
	Variables map[string]*Type
	Imports map[string]*Package
}