{"record":{"id":"4688ae5e4b9a4451","repo":"golangci/golangci-lint","slug":"analyzer-doesn-t-have-settings","errorCode":null,"errorMessage":"analyzer doesn't have settings","messagePattern":"analyzer doesn't have settings","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/goanalysis/linter.go","lineNumber":147,"sourceCode":"func (lnt *Linter) Desc() string {\n\treturn lnt.desc\n}\n\nfunc (lnt *Linter) allAnalyzerNames() []string {\n\tvar ret []string\n\tfor _, a := range lnt.analyzers {\n\t\tret = append(ret, a.Name)\n\t}\n\treturn ret\n}\n\nfunc (*Linter) configureAnalyzer(a *analysis.Analyzer, cfg map[string]any) error {\n\tfor k, v := range cfg {\n\t\tf := a.Flags.Lookup(k)\n\t\tif f == nil {\n\t\t\tvalidFlagNames := allFlagNames(&a.Flags)\n\t\t\tif len(validFlagNames) == 0 {\n\t\t\t\treturn errors.New(\"analyzer doesn't have settings\")\n\t\t\t}\n\n\t\t\treturn fmt.Errorf(\"analyzer doesn't have setting %q, valid settings: %v\",\n\t\t\t\tk, validFlagNames)\n\t\t}\n\n\t\tif err := f.Value.Set(valueToString(v)); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to set analyzer setting %q with value %q: %w\", k, v, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (lnt *Linter) configure() error {\n\tanalyzersMap := map[string]*analysis.Analyzer{}\n\tfor _, a := range lnt.analyzers {\n\t\tanalyzersMap[a.Name] = a","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/golangci/golangci-lint/blob/ed7a235d2d771152056fdc142a9855567c5796a9/pkg/goanalysis/linter.go#L129-L165","documentation":"goanalysis linters are configured by mapping config keys onto Go 'flag' values registered on the analysis.Analyzer. This error is thrown when a settings key is supplied for an analyzer that has no flags at all, so there is nothing to configure. It surfaces while building the analyzer set (via configure -> configureAnalyzer).","triggerScenarios":"Passing any settings map (even a single key) under the linter's name in .golangci.yml when the analyzer exposes zero flags, e.g. 'settings: { something: true }' for a linter with no configurable options.","commonSituations":"Copying a settings block for a linter version that later removed all its flags; adding settings to linters that never accepted any; enabling an analyzer whose options are configured elsewhere (e.g. go vet analyzers).","solutions":["Remove the settings block for that linter in .golangci.yml","Check the linter's documentation for the list of valid settings in your golangci-lint version","Pin config to a compatible golangci-lint version or migrate settings to the current option names","Run golangci-lint config verify to detect unknown settings before running the linter"],"exampleFix":"// before (.golangci.yml)\nlinters-settings:\n  some-linter:\n    option: true\n\n// after\nlinters-settings:\n  # some-linter has no settings; block removed","handlingStrategy":"validation","validationCode":"noSettingsLinters := []string{\"some-linter\"}\nfor _, name := range noSettingsLinters {\n    if s := cfg.LintersSettings[name]; s != nil && len(s) > 0 {\n        return fmt.Errorf(\"linter %q accepts no settings\", name)\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only add settings blocks for options documented for your golangci-lint version","Run 'golangci-lint config verify' in CI","After upgrading, re-check linters-settings against the new version's docs"],"tags":["golangci-lint","config","go-analysis","settings"],"backgroundTag":"unknown-config-option","analyzedSha":"ed7a235d2d771152056fdc142a9855567c5796a9","analyzedAt":"2026-09-02T18:47:33.865Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}