Current section

Files

Jump to
caffeine_lang src caffeine_lang@error_renderer.erl
Raw

src/caffeine_lang@error_renderer.erl

-module(caffeine_lang@error_renderer).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/error_renderer.gleam").
-export([render_plain/1, render_all_plain/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/caffeine_lang/error_renderer.gleam", 68).
?DOC(" Renders a source snippet for the given content and location.\n").
-spec render_snippet(binary(), caffeine_lang@errors:source_location()) -> binary().
render_snippet(Content, Loc) ->
Snippet = caffeine_lang@source_snippet:extract_snippet(
Content,
erlang:element(2, Loc),
erlang:element(3, Loc),
erlang:element(4, Loc)
),
erlang:element(2, Snippet).
-file("src/caffeine_lang/error_renderer.gleam", 12).
?DOC(" Renders a CompilationError to a plain-text diagnostic string.\n").
-spec render_plain(caffeine_lang@errors:compilation_error()) -> binary().
render_plain(Error) ->
Code_str = caffeine_lang@errors:error_code_to_string(
caffeine_lang@errors:error_code_for(Error)
),
Msg = caffeine_lang@errors:to_message(Error),
Ctx = caffeine_lang@errors:error_context(Error),
Header = <<<<<<"error["/utf8, Code_str/binary>>/binary, "]: "/utf8>>/binary,
Msg/binary>>,
Location_line = case {erlang:element(3, Ctx), erlang:element(5, Ctx)} of
{{some, Path}, {some, Loc}} ->
{some,
<<<<<<<<<<" --> "/utf8, Path/binary>>/binary, ":"/utf8>>/binary,
(erlang:integer_to_binary(erlang:element(2, Loc)))/binary>>/binary,
":"/utf8>>/binary,
(erlang:integer_to_binary(erlang:element(3, Loc)))/binary>>};
{{some, Path@1}, none} ->
{some, <<" --> "/utf8, Path@1/binary>>};
{_, _} ->
none
end,
Snippet = case {erlang:element(4, Ctx), erlang:element(5, Ctx)} of
{{some, Content}, {some, Loc@1}} ->
{some, render_snippet(Content, Loc@1)};
{_, _} ->
none
end,
Suggestion_line = case erlang:element(6, Ctx) of
{some, Suggestion} ->
{some,
<<<<" = help: Did you mean '"/utf8, Suggestion/binary>>/binary,
"'?"/utf8>>};
none ->
none
end,
_pipe = [{some, Header}, Location_line, Snippet, Suggestion_line],
_pipe@1 = gleam@list:filter_map(_pipe, fun(Opt) -> case Opt of
{some, Val} ->
{ok, Val};
none ->
{error, nil}
end end),
gleam@string:join(_pipe@1, <<"\n"/utf8>>).
-file("src/caffeine_lang/error_renderer.gleam", 61).
?DOC(" Renders a list of CompilationErrors to a plain-text string.\n").
-spec render_all_plain(list(caffeine_lang@errors:compilation_error())) -> binary().
render_all_plain(Errors) ->
_pipe = Errors,
_pipe@1 = gleam@list:map(_pipe, fun render_plain/1),
gleam@string:join(_pipe@1, <<"\n\n"/utf8>>).