Bylaw.Credo.Check.Ecto.PreferSelectOverRepoAllEnumMap
(bylaw_credo v0.1.0-alpha.1)
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 high and works with any version of Elixir.
Explanation
Prefer using select in the Ecto query over loading full rows with
Repo.all and then mapping them with Enum.map to extract fields.
Examples
Avoid:
query
|> Repo.all()
|> Enum.map(&%{role: &1.role, content: &1.content})Prefer:
query
|> select([m], %{role: m.role, content: m.content})
|> Repo.all()This pushes the projection down to the database, reducing memory usage and data transfer.
Cases where Enum.map references the full record (not just field
accesses) are allowed, since they cannot be expressed as a select:
# OK - the full record is referenced
Repo.all(query) |> Enum.map(&%{id: &1.id, record: &1})Notes
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.Ecto.PreferSelectOverRepoAllEnumMap, []}
]
}
]
}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.