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
# ...
endGeneric 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.