lib/zig/compile_error.ex

defmodule Zig.CompileError do
  defexception [:command, :code, :error]

  def message(error) do
    "zig command failed: #{error.command} failed with error #{error.code}: #{error.error}"
  end

  alias Zig.Manifest

  def to_error(error, opts) do
    [location_info, error_msg | _] =
      error.error
      |> String.split("\nerror:")
      |> List.first()
      |> String.split(": error: ")

    manifest = Keyword.fetch!(opts, :manifest)

    [file, line, _column] = String.split(location_info, ":")

    {resolved_file, resolved_line} = Manifest.resolve(manifest, file, String.to_integer(line))

    %CompileError{description: error_msg, file: resolved_file, line: resolved_line}
  end
end