src/gleeam_code@internal@erlang_convert.erl

-module(gleeam_code@internal@erlang_convert).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleeam_code/internal/erlang_convert.gleam").
-export([convert/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.

?MODULEDOC(false).

-file("src/gleeam_code/internal/erlang_convert.gleam", 58).
?DOC(false).
-spec is_module_directive(binary()) -> boolean().
is_module_directive(Line) ->
    gleam_stdlib:string_starts_with(Line, <<"-module("/utf8>>).

-file("src/gleeam_code/internal/erlang_convert.gleam", 62).
?DOC(false).
-spec is_compile_directive(binary()) -> boolean().
is_compile_directive(Line) ->
    gleam_stdlib:string_starts_with(Line, <<"-compile("/utf8>>).

-file("src/gleeam_code/internal/erlang_convert.gleam", 66).
?DOC(false).
-spec is_define_directive(binary()) -> boolean().
is_define_directive(Line) ->
    gleam_stdlib:string_starts_with(Line, <<"-define("/utf8>>).

-file("src/gleeam_code/internal/erlang_convert.gleam", 70).
?DOC(false).
-spec is_export_directive(binary()) -> boolean().
is_export_directive(Line) ->
    gleam_stdlib:string_starts_with(Line, <<"-export("/utf8>>).

-file("src/gleeam_code/internal/erlang_convert.gleam", 74).
?DOC(false).
-spec is_file_directive(binary()) -> boolean().
is_file_directive(Line) ->
    gleam_stdlib:string_starts_with(Line, <<"-file("/utf8>>).

-file("src/gleeam_code/internal/erlang_convert.gleam", 78).
?DOC(false).
-spec is_if_directive(binary()) -> boolean().
is_if_directive(Line) ->
    gleam_stdlib:string_starts_with(Line, <<"-if("/utf8>>).

-file("src/gleeam_code/internal/erlang_convert.gleam", 82).
?DOC(false).
-spec is_else_endif(binary()) -> boolean().
is_else_endif(Line) ->
    (Line =:= <<"-else."/utf8>>) orelse (Line =:= <<"-endif."/utf8>>).

-file("src/gleeam_code/internal/erlang_convert.gleam", 92).
?DOC(false).
-spec is_moduledoc_content(binary()) -> boolean().
is_moduledoc_content(Line) ->
    Trimmed = gleam@string:trim_start(Line),
    (gleam_stdlib:string_starts_with(Trimmed, <<"\""/utf8>>) andalso gleam_stdlib:string_ends_with(
        Trimmed,
        <<"\""/utf8>>
    ))
    orelse (Trimmed =:= <<")."/utf8>>).

-file("src/gleeam_code/internal/erlang_convert.gleam", 86).
?DOC(false).
-spec is_moduledoc_call(binary()) -> boolean().
is_moduledoc_call(Line) ->
    (gleam_stdlib:string_starts_with(Line, <<"?MODULEDOC("/utf8>>) orelse gleam_stdlib:string_starts_with(
        Line,
        <<"?DOC("/utf8>>
    ))
    orelse is_moduledoc_content(Line).

-file("src/gleeam_code/internal/erlang_convert.gleam", 46).
?DOC(false).
-spec is_directive_line(binary()) -> boolean().
is_directive_line(Line) ->
    Trimmed = gleam@string:trim_start(Line),
    ((((((is_module_directive(Trimmed) orelse is_compile_directive(Trimmed))
    orelse is_define_directive(Trimmed))
    orelse is_export_directive(Trimmed))
    orelse is_file_directive(Trimmed))
    orelse is_if_directive(Trimmed))
    orelse is_else_endif(Trimmed))
    orelse is_moduledoc_call(Trimmed).

-file("src/gleeam_code/internal/erlang_convert.gleam", 99).
?DOC(false).
-spec drop_leading_empty(list(binary())) -> list(binary()).
drop_leading_empty(Lines) ->
    case Lines of
        [<<""/utf8>> | Rest] ->
            drop_leading_empty(Rest);

        _ ->
            Lines
    end.

-file("src/gleeam_code/internal/erlang_convert.gleam", 30).
?DOC(false).
-spec skip_spec_continuation(list(binary()), list(binary())) -> list(binary()).
skip_spec_continuation(Lines, Acc) ->
    case Lines of
        [] ->
            lists:reverse(Acc);

        [Line | Rest] ->
            Trimmed = gleam@string:trim(Line),
            case gleam_stdlib:string_ends_with(Trimmed, <<"."/utf8>>) of
                true ->
                    drop_spec_blocks(Rest, Acc);

                false ->
                    skip_spec_continuation(Rest, Acc)
            end
    end.

-file("src/gleeam_code/internal/erlang_convert.gleam", 15).
?DOC(false).
-spec drop_spec_blocks(list(binary()), list(binary())) -> list(binary()).
drop_spec_blocks(Lines, Acc) ->
    case Lines of
        [] ->
            lists:reverse(Acc);

        [Line | Rest] ->
            case gleam_stdlib:string_starts_with(
                gleam@string:trim_start(Line),
                <<"-spec "/utf8>>
            ) of
                true ->
                    case gleam_stdlib:string_ends_with(
                        gleam@string:trim(Line),
                        <<"."/utf8>>
                    ) of
                        true ->
                            drop_spec_blocks(Rest, Acc);

                        false ->
                            skip_spec_continuation(Rest, Acc)
                    end;

                false ->
                    drop_spec_blocks(Rest, [Line | Acc])
            end
    end.

-file("src/gleeam_code/internal/erlang_convert.gleam", 4).
?DOC(false).
-spec convert(binary()) -> binary().
convert(Erl_source) ->
    _pipe = Erl_source,
    _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
    _pipe@2 = drop_spec_blocks(_pipe@1, []),
    _pipe@3 = gleam@list:filter(
        _pipe@2,
        fun(Line) -> not is_directive_line(Line) end
    ),
    _pipe@4 = drop_leading_empty(_pipe@3),
    _pipe@5 = gleam@string:join(_pipe@4, <<"\n"/utf8>>),
    _pipe@6 = gleam@string:trim_end(_pipe@5),
    (fun(S) -> <<S/binary, "\n"/utf8>> end)(_pipe@6).