-module(internal@ast_fun). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([is_pub_fun_used/3, public_funs/1]). -spec check_fun_usage( list(any()), internal@ast:public_member(), internal@ast:module_name() ) -> {ok, nil} | {error, nil}. check_fun_usage(Statements, Pub_fun_name, Module_name) -> {public_fun, Pub_fun_name@1} = case Pub_fun_name of {public_fun, _} -> Pub_fun_name; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail, module => <<"internal/ast_fun"/utf8>>, function => <<"check_fun_usage"/utf8>>, line => 41}) end, {module_name, Module_name@1} = case Module_name of {module_name, _} -> Module_name; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail@1, module => <<"internal/ast_fun"/utf8>>, function => <<"check_fun_usage"/utf8>>, line => 42}) end, gleam@list:find_map( Statements, fun(Statement) -> case begin _pipe = Statement, _pipe@1 = gleam@string:inspect(_pipe), gleam_stdlib:contains_string( _pipe@1, <<<<<<<<"FieldAccess(Variable(\""/utf8, Module_name@1/binary>>/binary, "\"), \""/utf8>>/binary, Pub_fun_name@1/binary>>/binary, "\")"/utf8>> ) end of true -> {ok, nil}; false -> {error, nil} end end ). -spec is_pub_fun_used( internal@ast:another_files_ast(), internal@ast:public_member(), internal@fs:module_full_name() ) -> {ok, nil} | {error, nil}. is_pub_fun_used(Files_ast, Pub_fun_name, Module_full_name) -> {another_files_ast, Files_ast@1} = case Files_ast of {another_files_ast, _} -> Files_ast; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail, module => <<"internal/ast_fun"/utf8>>, function => <<"is_pub_fun_used"/utf8>>, line => 23}) end, gleam@list:find_map( Files_ast@1, fun(File_ast) -> {file_ast, Ast} = case File_ast of {file_ast, _} -> File_ast; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail@1, module => <<"internal/ast_fun"/utf8>>, function => <<"is_pub_fun_used"/utf8>>, line => 25}) end, {module, Imports, _, _, _, _, _, Fns} = case Ast of {module, _, _, _, _, _, _, _} -> Ast; _assert_fail@2 -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail@2, module => <<"internal/ast_fun"/utf8>>, function => <<"is_pub_fun_used"/utf8>>, line => 26}) end, Imported_info_list = internal@ast:imported_info( Imports, Module_full_name, Pub_fun_name ), gleam@list:find_map( Imported_info_list, fun(Imported_info) -> case Imported_info of imported_as_alias -> {ok, nil}; {module_imported, Module_name} -> gleam@list:find_map( Fns, fun(Fun_def) -> {definition, _, {function, _, _, _, _, Statements, _}} = case Fun_def of {definition, _, {function, _, _, _, _, _, _}} -> Fun_def; _assert_fail@3 -> erlang:error( #{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail@3, module => <<"internal/ast_fun"/utf8>>, function => <<"is_pub_fun_used"/utf8>>, line => 34} ) end, check_fun_usage( Statements, Pub_fun_name, Module_name ) end ) end end ) end ). -spec public_funs(internal@ast:file_ast()) -> list(internal@ast:public_member()). public_funs(File_ast) -> {file_ast, Ast} = case File_ast of {file_ast, _} -> File_ast; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail, module => <<"internal/ast_fun"/utf8>>, function => <<"public_funs"/utf8>>, line => 12}) end, {module, _, _, _, _, _, _, Funs} = case Ast of {module, _, _, _, _, _, _, _} -> Ast; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail@1, module => <<"internal/ast_fun"/utf8>>, function => <<"public_funs"/utf8>>, line => 13}) end, gleam@list:flat_map( Funs, fun(Fun_def) -> {definition, _, {function, Fun_name, Is_public, _, _, _, _}} = case Fun_def of {definition, _, {function, _, _, _, _, _, _}} -> Fun_def; _assert_fail@2 -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail@2, module => <<"internal/ast_fun"/utf8>>, function => <<"public_funs"/utf8>>, line => 15}) end, case Is_public of public when Fun_name =/= <<"main"/utf8>> -> [{public_fun, Fun_name}]; _ -> [] end end ).