diff --git a/dialyzer.ignore_warnings.exs b/dialyzer.ignore_warnings.exs index 0990e3a..9fedb0e 100644 --- a/dialyzer.ignore_warnings.exs +++ b/dialyzer.ignore_warnings.exs @@ -4,5 +4,5 @@ {"lib/erlex.ex", :no_return, 140}, {"lib/erlex.ex", :no_return, 159}, {"lib/erlex.ex", :no_return, 180}, - {"lib/erlex.ex", :no_return, 536}, + {"lib/erlex.ex", :no_return, 547}, ] diff --git a/lib/erlex.ex b/lib/erlex.ex index f3a70e7..008bc35 100644 --- a/lib/erlex.ex +++ b/lib/erlex.ex @@ -326,6 +326,17 @@ defmodule Erlex do "struct()" end + defp do_pretty_print( + {:map, + [ + {:map_entry, {:atom, '\'__exception__\''}, {:atom, '\'true\''}}, + {:map_entry, {:atom, '\'__struct__\''}, {:atom, [:_]}}, + {:map_entry, {:atom, [:_]}, {:atom, [:_]}} + ]} + ) do + "Exception.t()" + end + defp do_pretty_print({:map, map_keys}) do %{struct_name: struct_name, entries: entries} = struct_parts(map_keys) diff --git a/test/pretty_print_test.exs b/test/pretty_print_test.exs index ae37b43..4535b23 100644 --- a/test/pretty_print_test.exs +++ b/test/pretty_print_test.exs @@ -562,4 +562,15 @@ defmodule Erlex.Test.PretyPrintTest do expected_output = "_ :: <<_::1>>" assert pretty_printed == expected_output end + + test "Exceptions are pretty printed appropriately" do + input = ~S""" + (__@5::#{'__exception__':='true', '__struct__':=_, _=>_}) + """ + + pretty_printed = Erlex.pretty_print_contract(input) + + expected_output = "(_ :: Exception.t())" + assert pretty_printed == expected_output + end end