lib/expo/po/duplicate_translations_error.ex

defmodule Expo.PO.DuplicateMessagesError do
  @moduledoc """
  An error raised when duplicate messages are detected.
  """

  @type t :: %__MODULE__{
          file: Path.t() | nil,
          duplicates: [{message :: String.t(), line :: pos_integer, original_line: pos_integer}]
        }

  defexception [:file, :duplicates]

  @impl Exception
  def message(%__MODULE__{file: file, duplicates: duplicates}) do
    prefix = if file, do: "#{Path.relative_to_cwd(file)}:", else: ""

    Enum.map_join(duplicates, "\n", fn {message, new_line, _old_line} ->
      "#{prefix}#{new_line}: #{message}"
    end)
  end
end