Print the error kind in error messages
This commit is contained in:
+16
-4
@@ -30,6 +30,7 @@
|
||||
|
||||
-export([ err_msg/1
|
||||
, msg/1
|
||||
, new/2
|
||||
, new/3
|
||||
, new/4
|
||||
, pos/2
|
||||
@@ -40,6 +41,9 @@
|
||||
, type/1
|
||||
]).
|
||||
|
||||
new(Type, Msg) ->
|
||||
new(Type, pos(0, 0), Msg).
|
||||
|
||||
new(Type, Pos, Msg) ->
|
||||
#err{ type = Type, pos = Pos, message = Msg }.
|
||||
|
||||
@@ -72,15 +76,23 @@ str_pos(#pos{file = F, line = L, col = C}) ->
|
||||
|
||||
type(#err{ type = Type }) -> Type.
|
||||
|
||||
pp(#err{ pos = Pos } = Err) ->
|
||||
lists:flatten(io_lib:format("~s~s", [pp_pos(Pos), msg(Err)])).
|
||||
pp(#err{ type = Kind, pos = Pos } = Err) ->
|
||||
lists:flatten(io_lib:format("~s~s:\n~s", [pp_kind(Kind), pp_pos(Pos), msg(Err)])).
|
||||
|
||||
pp_kind(type_error) -> "Type error";
|
||||
pp_kind(parse_error) -> "Parse error";
|
||||
pp_kind(code_error) -> "Code generation error";
|
||||
pp_kind(file_error) -> "File error";
|
||||
pp_kind(data_error) -> "Data error";
|
||||
pp_kind(internal_error) -> "Internal error".
|
||||
|
||||
pp_pos(#pos{file = no_file, line = 0, col = 0}) ->
|
||||
"";
|
||||
pp_pos(#pos{file = no_file, line = L, col = C}) ->
|
||||
io_lib:format("At line ~p, col ~p:\n", [L, C]);
|
||||
io_lib:format(" at line ~p, col ~p", [L, C]);
|
||||
pp_pos(#pos{file = F, line = L, col = C}) ->
|
||||
io_lib:format("In '~s' at line ~p, col ~p:\n", [F, L, C]).
|
||||
io_lib:format(" in '~s' at line ~p, col ~p", [F, L, C]).
|
||||
|
||||
to_json(#err{pos = Pos, type = Type, message = Msg, context = Cxt}) ->
|
||||
Json = #{ pos => pos_to_json(Pos),
|
||||
type => atom_to_binary(Type, utf8),
|
||||
|
||||
Reference in New Issue
Block a user