Current section

Files

Jump to
dune lib dune parser real_module.ex
Raw

lib/dune/parser/real_module.ex

defmodule Dune.Parser.RealModule do
@moduledoc false
@spec elixir_module?(module) :: boolean
def elixir_module?(module) do
module
|> Atom.to_string()
|> String.starts_with?("Elixir.")
end
def list_functions(module)
def list_functions(Kernel.SpecialForms) do
[{:%{}, 2}] ++ Kernel.SpecialForms.__info__(:macros)
end
@spec list_functions(module) :: [{atom, non_neg_integer}]
def list_functions(module) when is_atom(module) do
if elixir_module?(module) do
module.__info__(:functions) ++ module.__info__(:macros)
else
for {f, _a} = fa <- module.module_info(:exports), f != :module_info, do: fa
end
end
def fun_exists?(module, fun_name, arity) do
# TODO replace with fun_status
fun_status(module, fun_name, arity) == :defined
end
def fun_status(module, fun_name, arity)
def fun_status(Kernel.SpecialForms, fun_name, arity) do
if Macro.special_form?(fun_name, arity) do
:defined
else
:undefined_function
end
end
def fun_status(module, fun_name, arity) do
cond do
not Code.ensure_loaded?(module) -> :undefined_module
function_exported?(module, fun_name, arity) -> :defined
macro_exported?(module, fun_name, arity) -> :defined
true -> :undefined_function
end
end
end