var loadID … var errNoPackages … // load calls packages.Load for the given scopes, updating package metadata, // import graph, and mapped files with the result. // // The resulting error may wrap the moduleErrorMap error type, representing // errors associated with specific modules. // // If scopes contains a file scope there must be exactly one scope. func (s *Snapshot) load(ctx context.Context, allowNetwork AllowNetwork, scopes ...loadScope) (err error) { … } type moduleErrorMap … func (m *moduleErrorMap) Error() string { … } // config returns the configuration used for the snapshot's interaction with // the go/packages API. It uses the given working directory. // // TODO(rstambler): go/packages requires that we do not provide overlays for // multiple modules in one config, so buildOverlay needs to filter overlays by // module. // TODO(rfindley): ^^ is this still true? func (s *Snapshot) config(ctx context.Context, allowNetwork AllowNetwork) *packages.Config { … } // buildMetadata populates the updates map with metadata updates to // apply, based on the given pkg. It recurs through pkg.Imports to ensure that // metadata exists for all dependencies. // // Returns the metadata.Package that was built (or which was already present in // updates), or nil if the package could not be built. Notably, the resulting // metadata.Package may have an ID that differs from pkg.ID. func buildMetadata(updates map[PackageID]*metadata.Package, loadDir string, standalone bool, pkg *packages.Package) *metadata.Package { … } // computeLoadDiagnostics computes and sets m.Diagnostics for the given metadata m. // // It should only be called during package handle construction in buildPackageHandle. func computeLoadDiagnostics(ctx context.Context, snapshot *Snapshot, mp *metadata.Package) []*Diagnostic { … } // IsWorkspacePackage reports whether id points to a workspace package in s. // // Currently, the result depends on the current set of loaded packages, and so // is not guaranteed to be stable. func (s *Snapshot) IsWorkspacePackage(ctx context.Context, id PackageID) bool { … } // isWorkspacePackageLocked reports whether p is a workspace package for the // snapshot s. // // Workspace packages are packages that we consider the user to be actively // working on. As such, they are re-diagnosed on every keystroke, and searched // for various workspace-wide queries such as references or workspace symbols. // // See the commentary inline for a description of the workspace package // heuristics. // // s.mu must be held while calling this function. // // TODO(rfindley): remove 'meta' from this function signature. Whether or not a // package is a workspace package should depend only on the package, view // definition, and snapshot file source. While useful, the heuristic // "allFilesHaveRealPackages" does not add that much value and is path // dependent as it depends on the timing of loads. func isWorkspacePackageLocked(ctx context.Context, s *Snapshot, meta *metadata.Graph, pkg *metadata.Package) bool { … } // containsOpenFileLocked reports whether any file referenced by m is open in // the snapshot s. // // s.mu must be held while calling this function. func containsOpenFileLocked(s *Snapshot, mp *metadata.Package) bool { … } // computeWorkspacePackagesLocked computes workspace packages in the // snapshot s for the given metadata graph. The result does not // contain intermediate test variants. // // s.mu must be held while calling this function. func computeWorkspacePackagesLocked(ctx context.Context, s *Snapshot, meta *metadata.Graph) immutable.Map[PackageID, PackagePath] { … } // allFilesHaveRealPackages reports whether all files referenced by m are // contained in a "real" package (not command-line-arguments). // // If m is valid but all "real" packages containing any file are invalid, this // function returns false. // // If m is not a command-line-arguments package, this is trivially true. func allFilesHaveRealPackages(g *metadata.Graph, mp *metadata.Package) bool { … } func isTestMain(pkg *packages.Package, gocache string) bool { … }