Current section

Files

Jump to
caffeine_lang src caffeine_lang@parser@file_discovery.erl
Raw

src/caffeine_lang@parser@file_discovery.erl

-module(caffeine_lang@parser@file_discovery).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/parser/file_discovery.gleam").
-export([get_caffeine_files/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/parser/file_discovery.gleam", 26).
-spec read_directory_or_error(binary()) -> {ok, list(binary())} |
{error, caffeine_lang@common@errors:compilation_error()}.
read_directory_or_error(Directory_path) ->
case simplifile_erl:read_directory(Directory_path) of
{ok, Items} ->
{ok, Items};
{error, Err} ->
{error,
{linker_parse_error,
<<<<<<(simplifile:describe_error(Err))/binary, " ("/utf8>>/binary,
Directory_path/binary>>/binary,
")"/utf8>>}}
end.
-file("src/caffeine_lang/parser/file_discovery.gleam", 77).
-spec extract_caffeine_files_with_full_paths(list(binary()), binary()) -> list(binary()).
extract_caffeine_files_with_full_paths(Files, Directory_path) ->
_pipe = Files,
_pipe@1 = gleam@list:filter(
_pipe,
fun(File) ->
gleam_stdlib:string_ends_with(File, <<".caffeine"/utf8>>)
end
),
gleam@list:map(
_pipe@1,
fun(File@1) ->
<<<<Directory_path/binary, "/"/utf8>>/binary, File@1/binary>>
end
).
-file("src/caffeine_lang/parser/file_discovery.gleam", 53).
-spec collect_caffeine_files_from_subdirectory(binary(), list(binary())) -> {ok,
list(binary())} |
{error, caffeine_lang@common@errors:compilation_error()}.
collect_caffeine_files_from_subdirectory(Subdirectory_path, Accumulated_files) ->
gleam@result:'try'(
read_directory_or_error(Subdirectory_path),
fun(Items_in_subdirectory) -> _pipe = Items_in_subdirectory,
gleam@list:try_fold(
_pipe,
Accumulated_files,
fun(Acc, Item_name) ->
Nested_path = <<<<Subdirectory_path/binary, "/"/utf8>>/binary,
Item_name/binary>>,
case simplifile_erl:is_directory(Nested_path) of
{ok, true} ->
gleam@result:'try'(
read_directory_or_error(Nested_path),
fun(Files_in_nested) ->
Caffeine_files = extract_caffeine_files_with_full_paths(
Files_in_nested,
Nested_path
),
{ok, lists:append(Acc, Caffeine_files)}
end
);
_ ->
{ok, Acc}
end
end
) end
).
-file("src/caffeine_lang/parser/file_discovery.gleam", 38).
-spec process_top_level_item(binary(), binary(), list(binary())) -> {ok,
list(binary())} |
{error, caffeine_lang@common@errors:compilation_error()}.
process_top_level_item(Base_directory, Item_name, Accumulated_files) ->
Item_path = <<<<Base_directory/binary, "/"/utf8>>/binary, Item_name/binary>>,
case simplifile_erl:is_directory(Item_path) of
{ok, true} ->
collect_caffeine_files_from_subdirectory(
Item_path,
Accumulated_files
);
_ ->
{ok, Accumulated_files}
end.
-file("src/caffeine_lang/parser/file_discovery.gleam", 9).
?DOC(false).
-spec get_caffeine_files(binary()) -> {ok, list(binary())} |
{error, caffeine_lang@common@errors:compilation_error()}.
get_caffeine_files(Base_directory) ->
gleam@result:'try'(
read_directory_or_error(Base_directory),
fun(Top_level_items) ->
File_paths = begin
_pipe = Top_level_items,
gleam@list:try_fold(
_pipe,
[],
fun(Accumulated_files, Item_name) ->
process_top_level_item(
Base_directory,
Item_name,
Accumulated_files
)
end
)
end,
case File_paths of
{error, Err} ->
{error, Err};
{ok, Files} ->
{ok, Files}
end
end
).