type Parser … type fileLine … // New constructs a new Parser. func New() *Parser { … } func NewWithOptions(opts Options) *Parser { … } type Options … // FindPackages expands the provided patterns into a list of Go import-paths, // much like `go list -find`. func (p *Parser) FindPackages(patterns ...string) ([]string, error) { … } // baseCfg is an optional (may be nil) config which might be injected by tests. func (p *Parser) findPackages(baseCfg *packages.Config, patterns ...string) ([]string, error) { … } // LoadPackages loads and parses the specified Go packages. Specifically // named packages (without a trailing "/...") which do not exist or have no Go // files are an error. func (p *Parser) LoadPackages(patterns ...string) error { … } // LoadPackagesWithConfigForTesting loads and parses the specified Go packages with the // specified packages.Config as a starting point. This is for testing, and // only the .Dir and .Env fields of the Config will be considered. func (p *Parser) LoadPackagesWithConfigForTesting(cfg *packages.Config, patterns ...string) error { … } // LoadPackagesTo loads and parses the specified Go packages, and inserts them // into the specified Universe. It returns the packages which match the // patterns, but loads all packages and their imports, recursively, into the // universe. See NewUniverse for more. func (p *Parser) LoadPackagesTo(u *types.Universe, patterns ...string) ([]*types.Package, error) { … } func (p *Parser) loadPackages(patterns ...string) ([]*packages.Package, error) { … } // baseCfg is an optional (may be nil) config which might be injected by tests. func (p *Parser) loadPackagesWithConfig(baseCfg *packages.Config, patterns ...string) ([]*packages.Package, error) { … } // alreadyLoaded figures out which of the specified patterns have already been loaded // and which have not, and returns those respectively. // baseCfg is an optional (may be nil) config which might be injected by tests. func (p *Parser) alreadyLoaded(baseCfg *packages.Config, patterns ...string) ([]*packages.Package, []string, error) { … } // forEachPackageRecursive will run the provided function on all of the specified // packages, and on their imports recursively. Errors are accumulated and // returned as via errors.Join. func forEachPackageRecursive(pkgs []*packages.Package, fn func(pkg *packages.Package) error) error { … } func recursePackage(pkg *packages.Package, fn func(pkg *packages.Package) error, seen map[string]bool) []error { … } // UserRequestedPackages fetches a list of the user-imported packages. func (p *Parser) UserRequestedPackages() []string { … } // NewUniverse finalizes the loaded packages, searches through them for types // and produces a new Universe. The returned Universe has one types.Package // entry for each Go package that has been loaded, including all of their // dependencies, recursively. It also has one entry, whose key is "", which // represents "builtin" types. func (p *Parser) NewUniverse() (types.Universe, error) { … } // addCommentsToType takes any accumulated comment lines prior to obj and // attaches them to the type t. func (p *Parser) addCommentsToType(obj gotypes.Object, t *types.Type) { … } // packageDir tries to figure out the directory of the specified package. func packageDir(pkg *packages.Package) (string, error) { … } // addPkgsToUniverse adds the packages, and all of their deps, recursively, to // the universe and (if needed) searches through them for types. func (p *Parser) addPkgsToUniverse(pkgs []*packages.Package, u *types.Universe) error { … } // addPkgToUniverse adds one package to the universe and (if needed) searches // through it for types. func (p *Parser) addPkgToUniverse(pkg *packages.Package, u *types.Universe) error { … } // If the specified position has a "doc comment", return that. func (p *Parser) docComment(pos token.Pos) []string { … } // If there is a detached (not immediately before a declaration) comment, // return that. func (p *Parser) priorDetachedComment(pos token.Pos) []string { … } // If there's a comment block which ends nlines before pos, return it. func (p *Parser) priorCommentLines(pos token.Pos, lines int) *ast.CommentGroup { … } func splitLines(str string) []string { … } func goFuncNameToName(in string) types.Name { … } func goVarNameToName(in string) types.Name { … } // goNameToName converts a go name string to a gengo types.Name. // It operates solely on the string on a best effort basis. The name may be updated // in walkType for generics. func goNameToName(in string) types.Name { … } func (p *Parser) convertSignature(u types.Universe, t *gotypes.Signature) *types.Signature { … } // walkType adds the type, and any necessary child types. func (p *Parser) walkType(u types.Universe, useName *types.Name, in gotypes.Type) *types.Type { … } func (p *Parser) addFunction(u types.Universe, useName *types.Name, in *gotypes.Func) *types.Type { … } func (p *Parser) addVariable(u types.Universe, useName *types.Name, in *gotypes.Var) *types.Type { … } func (p *Parser) addConstant(u types.Universe, useName *types.Name, in *gotypes.Const) *types.Type { … }