Soundcheck.Check.Warning.AsyncAssignFieldRead (soundcheck v0.1.0)

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

Flags template reads such as @org.name of an assign that assign_async/3,4 sets. The assign holds a Phoenix.LiveView.AsyncResult, whose only fields are ok?, loading, failed, and result, so any other field raises KeyError on render.

Before:

assign_async(socket, :org, fn -> {:ok, %{org: fetch_org!(id)}} end)

<h1>{@org.name}</h1>

After:

<.async_result :let={org} assign={@org}>
  <:loading>Loading...</:loading>
  <h1>{org.name}</h1>
</.async_result>

The check reads the module's own writes: a key counts as async when assign_async sets it and every other write is an update/3 or a value built with AsyncResult. Reads come from the module's render/1 template, colocated or inline.

Confidence: high. Tier: syntactic (works without compiling).

Check-Specific Parameters

Use the following parameters to configure this check:

:excluded_paths

Paths to skip (atoms, binaries as path segments, or regexes).

This parameter defaults to [~r/\/test\//, "test"].

:strict

Unused.

This parameter defaults to false.

General Parameters

Like with all checks, general params can be applied.

Parameters can be configured via the .credo.exs config file.