AshCredo.Check.Design.MissingPrimaryAction (ash_credo v0.14.0)

Copy Markdown View Source

Basics

This check is disabled by default.

Learn how to enable it via .credo.exs.

This check has a base priority of normal and works with any version of Elixir.

Explanation

When multiple actions of the same CRUD type exist (e.g., two :create actions), one should declare primary?: true. Without this, Ash raises at runtime when framework features implicitly invoke the primary action, e.g. default action resolution or manage_relationship.

create :register do
  primary? true
  # ...
end

Generic actions (type :action) are intentionally excluded: they are never invoked implicitly - callers always name them via Ash.run_action/2 - so primary? has no behavioral effect for them. It is only consulted for :create, :read, :update, and :destroy.

This check uses Ash's runtime introspection (Ash.Resource.Info.actions/1) to see the fully-resolved action list - including actions contributed by Spark transformers and extensions - so it catches cases where a transformer adds an action that breaks the primary-action invariant.

Requirements

Your project must be compiled before running mix credo so that the referenced resource modules are loadable. Typically chain them in a Mix alias: lint: ["compile", "credo --strict"]. If Ash is not loaded in the VM running Credo, the check is a no-op and emits a single diagnostic.

Check-Specific Parameters

There are no specific parameters for this check.

General Parameters

Like with all checks, general params can be applied.

Parameters can be configured via the .credo.exs config file.