golangci/golangci-lint · error

can't get enabled formatters: %w

Error message

can't get enabled formatters: %w

What it means

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".

Source

Thrown at pkg/commands/formatters.go:94

	if err != nil {
		return fmt.Errorf("can't load config: %w", err)
	}

	dbManager, err := lintersdb.NewManager(c.log.Child(logutils.DebugKeyLintersDB), c.cfg,
		lintersdb.NewLinterBuilder(), lintersdb.NewPluginModuleBuilder(c.log), lintersdb.NewPluginGoBuilder(c.log))
	if err != nil {
		return err
	}

	c.dbManager = dbManager

	return nil
}

func (c *formattersCommand) execute(_ *cobra.Command, _ []string) error {
	enabledLintersMap, err := c.dbManager.GetEnabledLintersMap()
	if err != nil {
		return fmt.Errorf("can't get enabled formatters: %w", err)
	}

	var enabledFormatters []*linter.Config
	var disabledFormatters []*linter.Config

	for _, lc := range c.dbManager.GetAllSupportedLinterConfigs() {
		if lc.Internal {
			continue
		}

		if !goformatters.IsFormatter(lc.Name()) {
			continue
		}

		if enabledLintersMap[lc.Name()] == nil {
			disabledFormatters = append(disabledFormatters, lc)
		} else {
			enabledFormatters = append(enabledFormatters, lc)

View on GitHub (pinned to ed7a235d2d)

Solutions

  1. Read the wrapped cause — it usually states which formatters conflict or that none are enabled.
  2. Enable at least one formatter in the `formatters.enable` list.
  3. Remove conflicting entries between formatters.enable and formatters.disable.
  4. Check the `default` setting (e.g. `none`) isn't disabling everything unintentionally.

Example fix

// before (.golangci.yml)
formatters:
  default: none
  disable: [gofmt]
// after
formatters:
  enable: [gofmt, gofumpt]
Defensive patterns

Strategy: validation

Validate before calling

// ensure at least one formatter will be enabled
if len(cfg.Formatters.Enable) == 0 && cfg.Formatters.Default == "none" {
  return fmt.Errorf("no formatters enabled: add entries to formatters.enable")
}
// check for enable/disable conflicts
for _, e := range cfg.Formatters.Enable {
  for _, d := range cfg.Formatters.Disable {
    if e == d { return fmt.Errorf("formatter %q both enabled and disabled", e) }
  }
}

Try / catch

if err := formattersCmd.Run(); err != nil {
  if strings.Contains(err.Error(), "can't get enabled formatters") {
    log.Fatalf("enable at least one formatter / resolve conflicts: %v", errors.Unwrap(err))
  }
  return err
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


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