Bylaw.Credo.Check.Ecto.PreferRepoAggregateCount
(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 Repo.aggregate(queryable, :count) over loading rows with Repo.all
and counting them in memory.
Examples
Avoid:
Repo.all(query) |> Enum.count()
Enum.count(Repo.all(query))
query |> Repo.all() |> length()Prefer:
Repo.aggregate(query, :count)Prefer Repo.exists?/1 or not Repo.exists?/1 over comparing
Repo.aggregate(query, :count) to 0 or 1 for existence checks.
Avoid:
Repo.aggregate(query, :count) > 0
Repo.aggregate(query, :count) == 0Prefer:
Repo.exists?(query)
not Repo.exists?(query)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.PreferRepoAggregateCount, []}
]
}
]
}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.