Basics
This check is disabled by default.
Learn how to enable it via .credo.exs.
This check has a base priority of high and works with any version of Elixir.
Explanation
Use Enum.find/2 when the code only needs the first item that matches a
predicate.
Examples
Avoid:
users
|> Enum.filter(& &1.active?)
|> List.first()
List.first(Enum.reject(users, & &1.archived?))Prefer:
Enum.find(users, & &1.active?)
Enum.find(users, &(not &1.archived?))Notes
Enum.filter/2 and Enum.reject/2 traverse the whole enumerable and
allocate an intermediate list before List.first/1 discards everything
but the first item.
Enum.find/2 stops as soon as it finds a matching item and states the
intent directly.
This check uses static AST analysis, so it favors clear source-level patterns over runtime behavior.
Options
This check has no check-specific options. Configure it with an empty option list.
Usage
Add this check to Credo's checks: list in .credo.exs:
%{
configs: [
%{
name: "default",
checks: [
{Bylaw.Credo.Check.Elixir.FilterRejectFirst, []}
]
}
]
}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.