var doc … var Analyzer … // describe returns a string describing the type typ contained within the type // set of inType. If non-empty, inName is used as the name of inType (this is // necessary so that we can use alias type names that may not be reachable from // inType itself). func describe(typ, inType types.Type, inName string) string { … } func typeName(t types.Type) string { … } func run(pass *analysis.Pass) (interface{ … } func structuralTypes(t types.Type) ([]types.Type, error) { … }