Skip to content

Commit e347983

Browse files
milmazzjosevalim
authored andcommitted
Do not show warning when super is in GenServer.child_spec/1 (#10418)
The original goal[1] was to deprecate the usage of `super` on every `GenServer` callback, but `child_spec/1` is not a callback, it's a default implementation that can be re-implemented. This commit removes the _deprecation warning_ when someone use `super` in `GenServer.child_spec/1`. Fixes: #10415 [1] c024b0e#diff-ed0344c13ed25389035f337d94902894R301-R316
1 parent ffbcc00 commit e347983

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

lib/elixir/src/elixir_expand.erl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,13 @@ maybe_warn_underscored_var_access(Meta, Name, Kind, E) ->
631631
maybe_warn_deprecated_super_in_gen_server_callback(Meta, Function, SuperMeta, E) ->
632632
case lists:keyfind(context, 1, SuperMeta) of
633633
{context, 'Elixir.GenServer'} ->
634-
elixir_errors:form_warn(Meta, E, ?MODULE, {super_in_genserver, Function});
634+
case Function of
635+
{child_spec, 1} ->
636+
ok;
637+
638+
_ ->
639+
elixir_errors:form_warn(Meta, E, ?MODULE, {super_in_genserver, Function})
640+
end;
635641

636642
_ ->
637643
ok

lib/elixir/test/elixir/kernel/warning_test.exs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1709,7 +1709,7 @@ defmodule Kernel.WarningTest do
17091709
end
17101710
end
17111711

1712-
test "deprecated GenServer super" do
1712+
test "deprecated GenServer super on callbacks" do
17131713
assert capture_err(fn ->
17141714
Code.eval_string("""
17151715
defmodule Sample do
@@ -1725,6 +1725,22 @@ defmodule Kernel.WarningTest do
17251725
purge(Sample)
17261726
end
17271727

1728+
test "super is allowed on GenServer.child_spec/1" do
1729+
refute capture_err(fn ->
1730+
Code.eval_string("""
1731+
defmodule Sample do
1732+
use GenServer
1733+
1734+
def child_spec(opts) do
1735+
super(opts)
1736+
end
1737+
end
1738+
""")
1739+
end) =~ "calling super for GenServer callback child_spec/1 is deprecated"
1740+
after
1741+
purge(Sample)
1742+
end
1743+
17281744
test "nested comparison operators" do
17291745
message =
17301746
capture_err(fn ->

0 commit comments

Comments
 (0)