Basics
This check is disabled by default.
Learn how to enable it via .credo.exs.
This check has a base priority of higher and works with any version of Elixir.
Explanation
use Ecto.Schema should not be used directly. Use your app schema module instead.
Examples
For example:
defmodule MyApp.Schema do
defmacro __using__(_opts) do
quote do
use Ecto.Schema
@primary_key {:id, UUIDv7, autogenerate: true}
@foreign_key_type UUIDv7
@timestamps_opts [type: :utc_datetime_usec]
end
end
endAvoid:
defmodule MyApp.User do
use Ecto.Schema
schema "users" do
field :name, :string
end
endPrefer:
defmodule MyApp.User do
use MyApp.Schema
schema "users" do
field :name, :string
end
endNotes
An app schema module, such as MyApp.Schema, can provide project-specific
schema defaults:
- primary key conventions
- foreign key conventions
- timestamp precision and type conventions
This check uses static AST analysis, so it favors clear source-level patterns over runtime behavior.
Since each application chooses its own schema wrapper module, files ending in
/schema.ex are treated as wrapper modules and are not reported.
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.UseMyAppSchema, []}
]
}
]
}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.