diff --git a/lib/ex_doc/language/elixir.ex b/lib/ex_doc/language/elixir.ex index 7807475ed..521d23526 100644 --- a/lib/ex_doc/language/elixir.ex +++ b/lib/ex_doc/language/elixir.ex @@ -109,11 +109,14 @@ defmodule ExDoc.Language.Elixir do if actual_def in module_data.private.optional_callbacks, do: ["optional"], else: [] specs = - case Map.fetch(module_data.private.callbacks, actual_def) do - {:ok, specs} -> + case module_data.private.callbacks do + %{^actual_def => specs} when kind == :macrocallback -> + Enum.map(specs, &remove_callback_term/1) + + %{^actual_def => specs} -> specs - :error -> + %{} -> [] end @@ -136,6 +139,14 @@ defmodule ExDoc.Language.Elixir do } end + defp remove_callback_term({:type, num, :bounded_fun, [lhs, rhs]}) do + {:type, num, :bounded_fun, [remove_callback_term(lhs), rhs]} + end + + defp remove_callback_term({:type, num, :fun, [{:type, num, :product, [_ | rest_args]} | rest]}) do + {:type, num, :fun, [{:type, num, :product, rest_args} | rest]} + end + @impl true def type_data(entry, module_data) do {{_kind, name, arity}, _anno, _signature, _doc, _metadata} = entry diff --git a/test/ex_doc/retriever/elixir_test.exs b/test/ex_doc/retriever/elixir_test.exs index 9f7f16e31..51984dca6 100644 --- a/test/ex_doc/retriever/elixir_test.exs +++ b/test/ex_doc/retriever/elixir_test.exs @@ -160,7 +160,7 @@ defmodule ExDoc.Retriever.ElixirTest do assert macrocallback1.group == :Callbacks assert Path.basename(macrocallback1.source_url) == "nofile:9" refute macrocallback1.doc - assert Macro.to_string(macrocallback1.specs) == "[macrocallback1(term()) :: :ok]" + assert Macro.to_string(macrocallback1.specs) == "[macrocallback1() :: :ok]" elixirc(c, ~S""" defmodule Impl do