I used this for the example if someone want's to play with it:
defmodule Colorize do
def compare() do
"""
IO.inspect-IO.innspect
IO.inspect-IO.ispect
IO.inspect-IO.imspect
IO.inspect-IO.inspcet
"""
|> String.split("\n", trim: true)
|> Enum.each(fn x ->
[l, r] = String.split(x, "-")
compare(l, r)
end)
end
def compare(expected, expected), do: expected
def compare(expected, rendered) do
{%ExUnit.Diff{left: {_, _, left}, right: {_, _, right}}, _} =
ExUnit.Diff.compute(expected, rendered, :==)
IO.puts(["did you mean: ", colorize(left, right)])
end
defp colorize([{_, _, added}, r1], [{_, _, deleted}, r2]) do
[added(added), deleted(deleted), colorize(r1, r2)]
end
defp colorize([], []), do: []
defp colorize([{_, _, added} | r1], r2), do: [added(added), colorize(r1, r2)]
defp colorize(r1, [{_, _, deleted} | r2]), do: [deleted(deleted), colorize(r1, r2)]
defp colorize([{_, _, added}], []), do: added(added)
defp colorize([], [{_, _, deleted}]), do: deleted(deleted)
defp colorize([h | r1], [h | r2]), do: [h, colorize(r1, r2)]
defp added(text), do: IO.ANSI.format([:green_background, text])
defp deleted(text), do: IO.ANSI.format([:red_background, text])
end