Skip to content

Commit cd38841

Browse files
authored
Raise clearer error when reserved word used at the top level of defmodule (#15123)
1 parent 132197a commit cd38841

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

lib/elixir/lib/kernel.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5220,6 +5220,11 @@ defmodule Kernel do
52205220
end
52215221
end
52225222

5223+
defmacro defmodule(alias, [{:do, _block}, {atom, _} | _]) when is_atom(atom) do
5224+
raise ArgumentError,
5225+
"unexpected reserved word at the top-level of the \"defmodule #{Macro.to_string(alias)}\" do-block: #{atom}"
5226+
end
5227+
52235228
defp module_meta({_, meta, _}), do: meta
52245229
defp module_meta(_), do: []
52255230

lib/elixir/test/elixir/kernel/errors_test.exs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,18 @@ defmodule Kernel.ErrorsTest do
10031003
)
10041004
end
10051005

1006+
test "reserved word used at module top-level" do
1007+
assert_eval_raise(
1008+
ArgumentError,
1009+
["unexpected reserved word at the top-level of the \"defmodule Foo\" do-block: catch"],
1010+
"""
1011+
defmodule Foo do
1012+
def foo, do: :foo catch :bar
1013+
end
1014+
"""
1015+
)
1016+
end
1017+
10061018
defp bad_remote_call(x), do: x.foo()
10071019

10081020
defmacro sample(0), do: 0

0 commit comments

Comments
 (0)