Bylaw.Credo.Check.Elixir.FilterRejectFirst (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

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.