{"record":{"id":"c0a0489107af5174","repo":"golangci/golangci-lint","slug":"can-t-get-enabled-formatters-w","errorCode":null,"errorMessage":"can't get enabled formatters: %w","messagePattern":"can't get enabled formatters: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/commands/formatters.go","lineNumber":94,"sourceCode":"\tif err != nil {\n\t\treturn fmt.Errorf(\"can't load config: %w\", err)\n\t}\n\n\tdbManager, err := lintersdb.NewManager(c.log.Child(logutils.DebugKeyLintersDB), c.cfg,\n\t\tlintersdb.NewLinterBuilder(), lintersdb.NewPluginModuleBuilder(c.log), lintersdb.NewPluginGoBuilder(c.log))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tc.dbManager = dbManager\n\n\treturn nil\n}\n\nfunc (c *formattersCommand) execute(_ *cobra.Command, _ []string) error {\n\tenabledLintersMap, err := c.dbManager.GetEnabledLintersMap()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't get enabled formatters: %w\", err)\n\t}\n\n\tvar enabledFormatters []*linter.Config\n\tvar disabledFormatters []*linter.Config\n\n\tfor _, lc := range c.dbManager.GetAllSupportedLinterConfigs() {\n\t\tif lc.Internal {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !goformatters.IsFormatter(lc.Name()) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif enabledLintersMap[lc.Name()] == nil {\n\t\t\tdisabledFormatters = append(disabledFormatters, lc)\n\t\t} else {\n\t\t\tenabledFormatters = append(enabledFormatters, lc)","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/golangci/golangci-lint/blob/ed7a235d2d771152056fdc142a9855567c5796a9/pkg/commands/formatters.go#L76-L112","documentation":"The `formatters` command's execute calls c.dbManager.GetEnabledLintersMap(); if no formatters can be resolved as enabled (or the enabled-set conflicts, e.g. a formatter both enabled and disabled via presets/exclusions), the error is wrapped as \"can't get enabled formatters\".","triggerScenarios":"Running `golangci-lint formatters` when GetEnabledLintersMap returns an error — typically no formatters end up enabled after applying enable/disable/default/presets, or conflicting enablement rules.","commonSituations":"Running the command with all formatters disabled or an empty `formatters:` section combined with `default: none`; contradictory enable/disable lists; typo'd names that resolve to nothing enabled.","solutions":["Read the wrapped cause — it usually states which formatters conflict or that none are enabled.","Enable at least one formatter in the `formatters.enable` list.","Remove conflicting entries between formatters.enable and formatters.disable.","Check the `default` setting (e.g. `none`) isn't disabling everything unintentionally."],"exampleFix":"// before (.golangci.yml)\nformatters:\n  default: none\n  disable: [gofmt]\n// after\nformatters:\n  enable: [gofmt, gofumpt]","handlingStrategy":"validation","validationCode":"// ensure at least one formatter will be enabled\nif len(cfg.Formatters.Enable) == 0 && cfg.Formatters.Default == \"none\" {\n  return fmt.Errorf(\"no formatters enabled: add entries to formatters.enable\")\n}\n// check for enable/disable conflicts\nfor _, e := range cfg.Formatters.Enable {\n  for _, d := range cfg.Formatters.Disable {\n    if e == d { return fmt.Errorf(\"formatter %q both enabled and disabled\", e) }\n  }\n}","typeGuard":null,"tryCatchPattern":"if err := formattersCmd.Run(); err != nil {\n  if strings.Contains(err.Error(), \"can't get enabled formatters\") {\n    log.Fatalf(\"enable at least one formatter / resolve conflicts: %v\", errors.Unwrap(err))\n  }\n  return err\n}","preventionTips":["Always list at least one formatter under formatters.enable.","Avoid `default: none` without an explicit enable list.","Keep enable/disable lists disjoint and typo-free (verify names via `golangci-lint formatters`)."],"tags":["golangci-lint","formatters","configuration"],"backgroundTag":"no-linters-enabled","analyzedSha":"ed7a235d2d771152056fdc142a9855567c5796a9","analyzedAt":"2026-09-02T18:47:33.865Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}