-module(caffeine_lang@frontend@parser_error). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/caffeine_lang/frontend/parser_error.gleam"). -export([to_string/1, error_line/1]). -export_type([parser_error/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -type parser_error() :: {tokenizer_error, caffeine_lang@frontend@tokenizer_error:tokenizer_error()} | {unexpected_token, binary(), binary(), integer(), integer()} | {unexpected_e_o_f, binary(), integer(), integer()} | {unknown_type, binary(), integer(), integer()} | {invalid_refinement, binary(), integer(), integer()} | {quoted_field_name, binary(), integer(), integer()} | {invalid_type_alias_name, binary(), binary(), integer(), integer()}. -file("src/caffeine_lang/frontend/parser_error.gleam", 17). ?DOC(false). -spec to_string(parser_error()) -> binary(). to_string(Err) -> case Err of {tokenizer_error, Tok_err} -> caffeine_lang@frontend@tokenizer_error:to_string(Tok_err); {unexpected_token, Expected, Got, Line, Column} -> <<<<<<<<<<<<<<"Unexpected token at line "/utf8, (erlang:integer_to_binary(Line))/binary>>/binary, ", column "/utf8>>/binary, (erlang:integer_to_binary(Column))/binary>>/binary, ": expected "/utf8>>/binary, Expected/binary>>/binary, ", got "/utf8>>/binary, Got/binary>>; {unexpected_e_o_f, Expected@1, Line@1, Column@1} -> <<<<<<<<<<"Unexpected end of file at line "/utf8, (erlang:integer_to_binary(Line@1))/binary>>/binary, ", column "/utf8>>/binary, (erlang:integer_to_binary(Column@1))/binary>>/binary, ": expected "/utf8>>/binary, Expected@1/binary>>; {unknown_type, Name, Line@2, Column@2} -> <<<<<<<<<<"Unknown type '"/utf8, Name/binary>>/binary, "' at line "/utf8>>/binary, (erlang:integer_to_binary(Line@2))/binary>>/binary, ", column "/utf8>>/binary, (erlang:integer_to_binary(Column@2))/binary>>; {invalid_refinement, Message, Line@3, Column@3} -> <<<<<<<<<<"Invalid refinement at line "/utf8, (erlang:integer_to_binary(Line@3))/binary>>/binary, ", column "/utf8>>/binary, (erlang:integer_to_binary(Column@3))/binary>>/binary, ": "/utf8>>/binary, Message/binary>>; {quoted_field_name, Name@1, Line@4, Column@4} -> <<<<<<<<<<<<<<<<"Quoted field name at line "/utf8, (erlang:integer_to_binary(Line@4))/binary>>/binary, ", column "/utf8>>/binary, (erlang:integer_to_binary(Column@4))/binary>>/binary, ": field names should not be quoted. Use '"/utf8>>/binary, Name@1/binary>>/binary, "' instead of '\""/utf8>>/binary, Name@1/binary>>/binary, "\"'"/utf8>>; {invalid_type_alias_name, Name@2, Message@1, Line@5, Column@5} -> <<<<<<<<<<<<<<"Invalid type alias name '"/utf8, Name@2/binary>>/binary, "' at line "/utf8>>/binary, (erlang:integer_to_binary(Line@5))/binary>>/binary, ", column "/utf8>>/binary, (erlang:integer_to_binary(Column@5))/binary>>/binary, ": "/utf8>>/binary, Message@1/binary>> end. -file("src/caffeine_lang/frontend/parser_error.gleam", 73). ?DOC(" Extracts the line number from a parser error.\n"). -spec error_line(parser_error()) -> integer(). error_line(Err) -> case Err of {tokenizer_error, Tok_err} -> case Tok_err of {unterminated_string, Line, _} -> Line; {invalid_character, Line@1, _, _} -> Line@1 end; {unexpected_token, _, _, Line@2, _} -> Line@2; {unexpected_e_o_f, _, Line@3, _} -> Line@3; {unknown_type, _, Line@4, _} -> Line@4; {invalid_refinement, _, Line@5, _} -> Line@5; {quoted_field_name, _, Line@6, _} -> Line@6; {invalid_type_alias_name, _, _, Line@7, _} -> Line@7 end.