vitessio/vitess · error

no symbol found with name %s

Error message

no symbol found with name %s

What it means

extractSourceInterface looks up the interface name given on the codegen command line in the loaded package's type scope. This error means no top-level symbol with that exact name exists in the package, so the generator cannot find the source interface to mirror.

Source

Thrown at go/vt/vtctl/vtctldclient/codegen/main.go:327

		for _, e := range pkg.Errors {
			switch err {
			case nil:
				err = fmt.Errorf("errors loading package %s: %s", source, e.Error())
			default:
				err = fmt.Errorf("%w; %s", err, e.Error())
			}
		}

		return nil, err
	}

	return pkg, nil
}

func extractSourceInterface(pkg *packages.Package, name string) (*types.Interface, error) {
	obj := pkg.Types.Scope().Lookup(name)
	if obj == nil {
		return nil, fmt.Errorf("no symbol found with name %s", name)
	}

	switch t := obj.Type().(type) {
	case *types.Named:
		iface, ok := t.Underlying().(*types.Interface)
		if !ok {
			return nil, fmt.Errorf("symbol %s was not an interface but %T", name, t.Underlying())
		}

		return iface, nil
	case *types.Interface:
		return t, nil
	}

	return nil, fmt.Errorf("symbol %s was not an interface but %T", name, obj.Type())
}

var vitessProtoRegexp = regexp.MustCompile(`^vitess\.io.*/proto/.*`)

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Check the name argument for typos and correct casing — Go scope lookup is case-sensitive
  2. Confirm the interface is declared at package level in the package passed to loadPackage
  3. Use grep/IDE to find the exact identifier in the target package
  4. Update the codegen script/Makefile target to the current interface name after a rename

Example fix

// before
$ codegen --source-interface VtctldServ
// no symbol found with name VtctldServ
// after
$ codegen --source-interface VtctldServer
Defensive patterns

Strategy: validation

Validate before calling

// Verify the interface exists before invoking codegen
if !strings.Contains(source, "type "+ifaceName+" interface {") {
    return fmt.Errorf("interface %s not declared in package", ifaceName)
}

Prevention

When it happens

Trigger: Passing a name (e.g. 'VtctldServer' or a service interface name) that is misspelled, or that does not exist as a package-level identifier in the package loaded by loadPackage.

Common situations: Renaming/refactoring the interface and forgetting to update the codegen invocation; passing a method name instead of the interface name; passing a lowercase (unexported or local) symbol that the scope lookup cannot resolve as expected; running codegen against the wrong package path.

Related errors


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