-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>>).