Bylaw.Credo.Check.Ecto.UseMyAppSchema (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 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
end

Avoid:

defmodule MyApp.User do
    use Ecto.Schema

    schema "users" do
      field :name, :string
    end
end

Prefer:

defmodule MyApp.User do
    use MyApp.Schema

    schema "users" do
      field :name, :string
    end
end

Notes

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.