const debug … type Set … type key … // ImportObjectFact implements analysis.Pass.ImportObjectFact. func (s *Set) ImportObjectFact(obj types.Object, ptr analysis.Fact) bool { … } // ExportObjectFact implements analysis.Pass.ExportObjectFact. func (s *Set) ExportObjectFact(obj types.Object, fact analysis.Fact) { … } func (s *Set) AllObjectFacts(filter map[reflect.Type]bool) []analysis.ObjectFact { … } // ImportPackageFact implements analysis.Pass.ImportPackageFact. func (s *Set) ImportPackageFact(pkg *types.Package, ptr analysis.Fact) bool { … } // ExportPackageFact implements analysis.Pass.ExportPackageFact. func (s *Set) ExportPackageFact(fact analysis.Fact) { … } func (s *Set) AllPackageFacts(filter map[reflect.Type]bool) []analysis.PackageFact { … } type gobFact … type Decoder … // NewDecoder returns a fact decoder for the specified package. // // It uses a brute-force recursive approach to enumerate all objects // defined by dependencies of pkg, so that it can learn the set of // package paths that may be mentioned in the fact encoding. This does // not scale well; use [NewDecoderFunc] where possible. func NewDecoder(pkg *types.Package) *Decoder { … } // NewDecoderFunc returns a fact decoder for the specified package. // // It calls the getPackage function for the package path string of // each dependency (perhaps indirect) that it encounters in the // encoding. If the function returns nil, the fact is discarded. // // This function is preferred over [NewDecoder] when the client is // capable of efficient look-up of packages by package path. func NewDecoderFunc(pkg *types.Package, getPackage GetPackageFunc) *Decoder { … } type GetPackageFunc … // Decode decodes all the facts relevant to the analysis of package // pkgPath. The read function reads serialized fact data from an external // source for one of pkg's direct imports, identified by package path. // The empty file is a valid encoding of an empty fact set. // // It is the caller's responsibility to call gob.Register on all // necessary fact types. // // Concurrent calls to Decode are safe, so long as the // [GetPackageFunc] (if any) is also concurrency-safe. func (d *Decoder) Decode(read func(pkgPath string) ([]byte, error)) (*Set, error) { … } // Encode encodes a set of facts to a memory buffer. // // It may fail if one of the Facts could not be gob-encoded, but this is // a sign of a bug in an Analyzer. func (s *Set) Encode() []byte { … } // String is provided only for debugging, and must not be called // concurrent with any Import/Export method. func (s *Set) String() string { … }