Credo.Check.Readability.WithCustomTaggedTuple (Credo v1.5.0) View Source
This check has a base priority of low
and works with any version of Elixir.
Explanation
Avoid using custom tags for error reporting from with
macros.
This code injects placeholder tags such as :resource
and :authz
for the purpose of error
reporting.
with {:resource, {:ok, resource}} <- {:resource, Resource.fetch(user)},
{:authz, :ok} <- {:authz, Resource.authorize(resource, user)} do
do_something_with(resource)
else
{:resource, _} -> {:error, :not_found}
{:authz, _} -> {:error, :unauthorized}
end
Instead, extract each validation into a separate helper function which returns error information immediately:
defp find_resource(user) do
with :error <- Resource.fetch(user), do: {:error, :not_found}
end
defp authorize(resource, user) do
with :error <- Resource.authorize(resource, user), do: {:error, :unauthorized}
end
At this point, the validation chain in with
becomes clearer and easier to understand:
with {:ok, resource} <- find_resource(user),
:ok <- authorize(resource, user),
do: do_something(user)
Like all Readability
issues, this one is not a technical concern.
But you can improve the odds of others reading and liking your code by making
it easier to follow.
Configuration parameters
There are no specific parameters for this check.
Like with all checks, general params can be applied.
Parameters can be configured via the .credo.exs
config file.