vitessio/vitess · error

failed to load packages: %w

Error message

failed to load packages: %w

What it means

GenerateASTHelpers uses golang.org/x/tools/go/packages.Load to type-check the target packages before generation. If the loading step itself fails (tooling-level failure, not per-package type errors), the error is wrapped and returned.

Source

Thrown at go/tools/asthelpergen/asthelpergen.go:279

}

// GenerateASTHelpers is the main entry point for generating AST helper methods.
//
// It loads the specified packages, analyzes the types that implement the root interface,
// and generates comprehensive helper methods including clone, equals, visit, rewrite,
// path enumeration, and copy-on-write functionality.
//
// The function returns a map where keys are file paths and values are the generated
// Go source files. The caller is responsible for writing these files to disk.
//
// Returns an error if package loading fails, the root interface cannot be found,
// or code generation encounters any issues.
func GenerateASTHelpers(options *Options) (map[string]*jen.File, error) {
	loaded, err := packages.Load(&packages.Config{
		Mode: packages.NeedName | packages.NeedTypes | packages.NeedTypesSizes | packages.NeedTypesInfo | packages.NeedDeps | packages.NeedImports | packages.NeedModule,
	}, options.Packages...)
	if err != nil {
		return nil, fmt.Errorf("failed to load packages: %w", err)
	}

	if err := codegen.CheckErrors(loaded, codegen.GeneratedInSqlparser); err != nil {
		return nil, err
	}

	scopes := make(map[string]*types.Scope)
	for _, pkg := range loaded {
		scopes[pkg.PkgPath] = pkg.Types.Scope()
	}

	tt, err := findTypeObject(options.RootInterface, scopes)
	if err != nil {
		return nil, err
	}

	nt := tt.Type().(*types.Named)
	pName := nt.Obj().Pkg().Name()

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Verify the packages passed in Options resolve: run `go list <pattern>` for the same pattern
  2. Run `go mod tidy` and `go clean -cache` to repair module/build state
  3. Check GOFLAGS/GOPATH/GOROOT environment consistency (e.g. stray GO111MODULE settings)

Example fix

// before
options.Packages = []string{"vitess.io/vitess/go/vt/sqlparser/typo"}
// after
options.Packages = []string{"vitess.io/vitess/go/vt/sqlparser"}
Defensive patterns

Strategy: validation

Validate before calling

cfg := &packages.Config{Mode: packages.NeedTypes | packages.NeedName}
if _, err := packages.Load(cfg, options.Packages...); err != nil {
    return fmt.Errorf("packages not loadable, fix patterns/env: %w", err)
}

Try / catch

result, err := GenerateASTHelpers(options)
if err != nil {
    var loadErr error
    if errors.As(err, &loadErr) && strings.Contains(err.Error(), "failed to load packages") {
        // check go env, patterns, module cache before retrying
    }
}

Prevention

When it happens

Trigger: Calling GenerateASTHelpers with a Packages pattern list that fails to load, e.g. invalid pattern syntax, corrupt build cache, or a go/packages environment failure.

Common situations: Wrong GOFLAGS or GOPATH environment; corrupted module cache; running with a GOOS/GOARCH combination that cannot be built; missing go.mod for the target module.

Related errors


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/7987d5d74a954c37. Report an issue: GitHub.