Skip to content

Commit e344b1f

Browse files
author
José Valim
committed
Add a small note to UndefinedFunctionError when the module is not available
1 parent f5f4205 commit e344b1f

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

lib/elixir/lib/exception.ex

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -615,10 +615,15 @@ end
615615
defmodule UndefinedFunctionError do
616616
defexception [module: nil, function: nil, arity: nil]
617617

618-
def message(exception) do
619-
if exception.function do
620-
formatted = Exception.format_mfa exception.module, exception.function, exception.arity
621-
"undefined function: #{formatted}"
618+
def message(%{function: function, module: module, arity: arity}) do
619+
if function do
620+
formatted = Exception.format_mfa module, function, arity
621+
suffix = if nil?(module) || :code.is_loaded(module) do
622+
""
623+
else
624+
" (module #{inspect module} is not available)"
625+
end
626+
"undefined function: #{formatted}" <> suffix
622627
else
623628
"undefined function"
624629
end

lib/elixir/test/elixir/exception_test.exs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,10 @@ defmodule Kernel.ExceptionTest do
308308

309309
test "undefined function message" do
310310
assert %UndefinedFunctionError{} |> message == "undefined function"
311+
assert %UndefinedFunctionError{module: Kernel, function: :bar, arity: 1} |> message ==
312+
"undefined function: Kernel.bar/1"
311313
assert %UndefinedFunctionError{module: Foo, function: :bar, arity: 1} |> message ==
312-
"undefined function: Foo.bar/1"
314+
"undefined function: Foo.bar/1 (module Foo is not available)"
313315
assert %UndefinedFunctionError{module: nil, function: :bar, arity: 0} |> message ==
314316
"undefined function: nil.bar/0"
315317
end

0 commit comments

Comments
 (0)