-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 => 29}) 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 => 30}) 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) -> internal@ast:is_pub_member_used( Files_ast, Pub_fun_name, Module_full_name, fun check_fun_usage/3 ). -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 => 9}) 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 => 10}) 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 => 12}) end, case Is_public of public when Fun_name =/= <<"main"/utf8>> -> [{public_fun, Fun_name}]; _ -> [] end end ).