Soundcheck.Check.Warning.PatchToForeignLiveView (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 push_patch to a path whose live route renders a different LiveView. A patch keeps the current LiveView and only calls handle_params/3, so LiveView raises when the server pushes one that points elsewhere. Use push_navigate for another LiveView. A client-side patch (<.link patch={...}>, JS.patch) to another LiveView does not raise: LiveView falls back to navigating there.

Before:

# in MyAppWeb.PostLive.Index
{:noreply, push_patch(socket, to: ~p"/users/#{user}")}

After:

{:noreply, push_navigate(socket, to: ~p"/users/#{user}")}

Only literal paths and ~p sigils are checked, and only in a LiveView's own functions. An interpolation inside ~p matches any one route segment; one in a plain string matches any number of them, because the value can hold slashes. The check reports only when every matching live route renders another LiveView.

Confidence: high. Tier: semantic (run mix compile before mix credo).

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.