{"record":{"id":"77f0facecf853adc","repo":"golangci/golangci-lint","slug":"failed-to-validate-analyzers-w","errorCode":null,"errorMessage":"failed to validate analyzers: %w","messagePattern":"failed to validate analyzers: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/goanalysis/linter.go","lineNumber":185,"sourceCode":"\n\tfor analyzerName, analyzerSettings := range lnt.cfg {\n\t\ta := analyzersMap[analyzerName]\n\t\tif a == nil {\n\t\t\treturn fmt.Errorf(\"settings key %q must be valid analyzer name, valid analyzers: %v\",\n\t\t\t\tanalyzerName, lnt.allAnalyzerNames())\n\t\t}\n\n\t\tif err := lnt.configureAnalyzer(a, analyzerSettings); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to configure analyzer %s: %w\", analyzerName, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (lnt *Linter) preRun(lintCtx *linter.Context) error {\n\tif err := analysis.Validate(lnt.analyzers); err != nil {\n\t\treturn fmt.Errorf(\"failed to validate analyzers: %w\", err)\n\t}\n\n\tif err := lnt.configure(); err != nil {\n\t\treturn fmt.Errorf(\"failed to configure analyzers: %w\", err)\n\t}\n\n\tif lnt.contextSetter != nil {\n\t\tlnt.contextSetter(lintCtx)\n\t}\n\n\treturn nil\n}\n\nfunc (lnt *Linter) getName() string {\n\treturn lnt.name\n}\n\nfunc (lnt *Linter) getLinterNameForDiagnostic(*Diagnostic) string {","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/golangci/golangci-lint/blob/ed7a235d2d771152056fdc142a9855567c5796a9/pkg/goanalysis/linter.go#L167-L203","documentation":"Wraps a failure from analysis.Validate(lnt.analyzers) (golang.org/x/tools/go/analysis) in golangci-lint's preRun. The analysis framework validates analyzers before running — e.g. duplicate analyzer names, missing Requires, or analyzers whose flagsets conflict. If validation fails, golangci-lint cannot start the analysis pass.","triggerScenarios":"Registering/using analyzers with duplicate names, analyzers with unsatisfied Requires dependencies, or invalid analyzer flagsets — typically when custom analyzers are loaded via plugins or the analyzer set is assembled programmatically.","commonSituations":"Developers building custom golangci-lint builds or plugin-based analyzers hit this when two analyzers share a name or a required analyzer is missing from the set; also after upgrading x/tools where validation rules tightened.","solutions":["Check the wrapped validation error for the specific analyzer problem (duplicate name, missing requirement)","Ensure every analyzer in Requires is also included in the analyzer set","Rename custom analyzers so names are unique","Update custom analyzers to satisfy the x/tools/go/analysis Validate contract for your version"],"exampleFix":"// before\nanalyzers := []*analysis.Analyzer{a, a}\n// after\nanalyzers := []*analysis.Analyzer{a}","handlingStrategy":"validation","validationCode":"names := map[string]bool{}\nfor _, a := range analyzers {\n    if names[a.Name] {\n        return fmt.Errorf(\"duplicate analyzer %q\", a.Name)\n    }\n    names[a.Name] = true\n    for _, req := range a.Requires {\n        if !names[req.Name] && !contains(analyzers, req) {\n            return fmt.Errorf(\"analyzer %q requires missing %q\", a.Name, req.Name)\n        }\n    }\n}\n// then: if err := analysis.Validate(analyzers); err != nil { return err }","typeGuard":null,"tryCatchPattern":"if err := runLint(); err != nil {\n    if strings.Contains(err.Error(), \"failed to validate analyzers\") {\n        log.Fatalf(\"analyzer set invalid: %v\", err)\n    }\n}","preventionTips":["Ensure unique analyzer names in custom/plugin builds","Include every analyzer listed in Requires in the analyzer set","Keep x/tools/go/analysis version in sync with your golangci-lint version"],"tags":["golangci-lint","go-analysis","validation"],"backgroundTag":"analyzer-validation-failed","analyzedSha":"ed7a235d2d771152056fdc142a9855567c5796a9","analyzedAt":"2026-09-02T18:47:33.865Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}