golangci/golangci-lint · error

plugin does not abide by 'AnalyzerPlugin' interface: %T

Error message

plugin does not abide by 'AnalyzerPlugin' interface: %T

What it means

Type-assertion guard in PluginGoBuilder.lookupAnalyzerPlugin: the plugin exports 'AnalyzerPlugin' but the symbol does not implement the expected AnalyzerPlugin interface, so the assertion fails and the concrete type is reported. This is the legacy plugin path, which also emits a deprecation warning.

Source

Thrown at pkg/lint/lintersdb/builder_plugin_go.go:145

	}

	return constructor(settings)
}

func (b *PluginGoBuilder) lookupAnalyzerPlugin(plug *plugin.Plugin) ([]*analysis.Analyzer, error) {
	//nolint:staticcheck,nolintlint // Ignore because the implementation on Windows returns nil
	symbol, err := plug.Lookup("AnalyzerPlugin")
	//nolint:staticcheck,nolintlint // Ignore because the implementation on Windows returns nil
	if err != nil {
		return nil, err
	}

	b.log.Warnf("plugin: 'AnalyzerPlugin' plugins are deprecated, please use the new plugin signature: " +
		"https://golangci-lint.run/docs/plugins/go-plugins#create-a-plugin")

	analyzerPlugin, ok := symbol.(AnalyzerPlugin)
	if !ok {
		return nil, fmt.Errorf("plugin does not abide by 'AnalyzerPlugin' interface: %T", symbol)
	}

	return analyzerPlugin.GetAnalyzers(), nil
}

View on GitHub (pinned to ed7a235d2d)

Solutions

  1. Make the exported AnalyzerPlugin value implement the expected interface (GetAnalyzers method)
  2. Prefer migrating the plugin to the newer New-function signature
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at pkg/lint/lintersdb/builder_plugin_go.go:145 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of golangci/golangci-lint@ed7a235d2d (2026-09-02). Data as JSON: /api/errors/74193a1231ff60ec. Report an issue: GitHub.