Custom Credo checks.

Installation

Downstream applications should typically include this package only in development and test:

{:bylaw_credo, "== 0.1.0-alpha.1", only: [:dev, :test], runtime: false}

Usage

Configure Bylaw Credo checks through Credo's normal .credo.exs API. Add each check you want by listing its fully qualified module in the checks: list:

%{
  configs: [
    %{
      name: "default",
      plugins: [
        {Bylaw.Credo.Plugin.HEExSources, []}
      ],
      checks: [
        {Bylaw.Credo.Check.Elixir.DocBeforeSpec, []},
        {Bylaw.Credo.Check.Elixir.PreferEmptyListChecks, []},
        {Bylaw.Credo.Check.HEEx.NoDuplicateStaticIds, []},
        {Bylaw.Credo.Check.HEEx.NoElementSpacing, []},
        {Bylaw.Credo.Check.HEEx.PreferNativeInteractiveElement, []},
        {Bylaw.Credo.Check.HEEx.RequireAccessibleButtonText, []},
        {Bylaw.Credo.Check.HEEx.NoJavascriptHref, []},
        {Bylaw.Credo.Check.HEEx.RequireButtonType, []},
        {Bylaw.Credo.Check.HEEx.RequireImageAlt, []},
        {Bylaw.Credo.Check.HEEx.RequireLabelForInput, []},
        {Bylaw.Credo.Check.HEEx.RequireLoadingStateForSubmit, []},
        {Bylaw.Credo.Check.HEEx.RequireLinkHref, []},
        {Bylaw.Credo.Check.HEEx.RequireLinkText, []},
        {Bylaw.Credo.Check.HEEx.RequireTargetBlankRel, []},
        {Bylaw.Credo.Check.Elixir.PreferListTypeSyntax, []}
      ]
    }
  ]
}

There is no separate Bylaw runtime validation API for these checks. Credo loads the check modules from .credo.exs and passes each check its configured option list.

Minimal behaviour implementations

Bylaw.Credo.Check.Elixir.NoExtraPublicBehaviourFunctions is opt-in by behaviour. Configure :behaviours with the behaviour modules whose implementations should keep a minimal public API:

{Bylaw.Credo.Check.Elixir.NoExtraPublicBehaviourFunctions,
 [
   behaviours: [
     MyApp.Workers.Job,
     MyApp.Notifications.Delivery
   ],
   allowed: []
 ]}

The check reads callback signatures from each configured behaviour module with behaviour_info(:callbacks), so callback lists should not be duplicated in Credo config. Use :allowed, for example [child_spec: 1], for intentional extra public functions.

HEEx templates

HEEx checks use Phoenix LiveView's undocumented HEEx tokenizer when it is available. Add phoenix_live_view to applications that enable these checks.

Credo discovers embedded ~H templates in .ex and .exs files by default. To check standalone Phoenix .html.heex templates, enable Bylaw.Credo.Plugin.HEExSources as shown above.

See each check module's documentation for its examples, notes, options, and check-specific .credo.exs usage.