Predicator.Errors (predicator v3.7.0)

View Source

Common utilities for error formatting across all Predicator error modules.

This module provides shared functions for formatting error messages, type names, and operation names consistently across all error types.

Summary

Functions

Formats an expected type name for error messages with proper articles.

Formats an operation name for user-friendly error messages.

Attaches a source position to an error struct that has a :position field.

Formats a type name with its value for error messages.

Functions

expected_type_name(type)

@spec expected_type_name(atom()) :: String.t()

Formats an expected type name for error messages with proper articles.

Examples

iex> Predicator.Errors.expected_type_name(:integer)
"an integer"

iex> Predicator.Errors.expected_type_name(:boolean)
"a boolean"

iex> Predicator.Errors.expected_type_name(:custom_type)
"a custom_type"

operation_display_name(op)

@spec operation_display_name(atom()) :: String.t()

Formats an operation name for user-friendly error messages.

Examples

iex> Predicator.Errors.operation_display_name(:add)
"Arithmetic add"

iex> Predicator.Errors.operation_display_name(:logical_and)
"Logical AND"

iex> Predicator.Errors.operation_display_name(:unary_bang)
"Logical NOT"

put_position(error, position)

@spec put_position(term(), Predicator.Types.position() | nil) :: term()

Attaches a source position to an error struct that has a :position field.

Returns the error unchanged when position is nil or when the value has no :position field, so it is safe to call on any error value - including the bare-string errors some evaluator paths return internally.

Examples

iex> error = Predicator.Errors.EvaluationError.new("boom", "boom")
iex> Predicator.Errors.put_position(error, {1, 3}).position
{1, 3}

iex> error = Predicator.Errors.EvaluationError.new("boom", "boom")
iex> Predicator.Errors.put_position(error, nil).position
nil

iex> Predicator.Errors.put_position("boom", {1, 3})
"boom"

type_name_with_value(type, value)

@spec type_name_with_value(atom(), any()) :: String.t()

Formats a type name with its value for error messages.

Examples

iex> Predicator.Errors.type_name_with_value(:string, "hello")
"\"hello\" (string)"

iex> Predicator.Errors.type_name_with_value(:integer, 42)
"42 (integer)"

iex> Predicator.Errors.type_name_with_value(:undefined, :undefined)
":undefined (undefined)"