Skip to content

Commit 181d157

Browse files
authored
Warn when trying to reference types in hidden modules (#1940)
1 parent 4f22ac3 commit 181d157

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

lib/ex_doc/autolink.ex

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,18 @@ defmodule ExDoc.Autolink do
511511
(config.language != ExDoc.Language.Erlang or kind == :function) ->
512512
nil
513513

514+
{:regular_link, :hidden, :hidden}
515+
when not same_module? ->
516+
if warn? do
517+
maybe_warn(config, ref, :hidden, %{
518+
original_text: original_text,
519+
module_visibility: :hidden,
520+
same_module?: false
521+
})
522+
end
523+
524+
nil
525+
514526
{_mode, _module_visibility, visibility} ->
515527
if warn? do
516528
maybe_warn(config, ref, visibility, %{original_text: original_text})
@@ -585,6 +597,19 @@ defmodule ExDoc.Autolink do
585597
warn(config, message)
586598
end
587599

600+
defp warn(
601+
config,
602+
{:type, module, _name, _arity},
603+
:hidden,
604+
%{original_text: original_text, module_visibility: :hidden, same_module?: false}
605+
) do
606+
message =
607+
"documentation references type \"#{original_text}\" but the module " <>
608+
"#{inspect(module)} is #{format_visibility(:hidden, :module)}"
609+
610+
warn(config, message)
611+
end
612+
588613
defp warn(
589614
config,
590615
{kind, _module, _name, _arity},

test/ex_doc/language/elixir_test.exs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,9 @@ defmodule ExDoc.Language.ElixirTest do
500500
ExDoc.Refs.insert([
501501
{{:module, AutolinkTest.Foo}, :public},
502502
{{:function, AutolinkTest.Foo, :bar, 1}, :hidden},
503-
{{:type, AutolinkTest.Foo, :bad, 0}, :hidden}
503+
{{:type, AutolinkTest.Foo, :bad, 0}, :hidden},
504+
{{:module, AutoLinkTest.Hidden}, :hidden},
505+
{{:type, AutoLinkTest.Hidden, :my_type, 0}, :hidden}
504506
])
505507

506508
opts = [
@@ -519,6 +521,12 @@ defmodule ExDoc.Language.ElixirTest do
519521
assert message =~ ~s|references function "AutolinkTest.Foo.bar/1" but it is hidden|
520522
assert metadata == [file: "foo.ex", line: 2]
521523

524+
assert warn(fn ->
525+
assert autolink_doc("`t:AutoLinkTest.Hidden.my_type/0`", opts) ==
526+
~s|<code class="inline">t:AutoLinkTest.Hidden.my_type/0</code>|
527+
end) =~
528+
~s|documentation references type "t:AutoLinkTest.Hidden.my_type/0" but the module AutoLinkTest.Hidden is hidden|
529+
522530
assert warn(fn ->
523531
assert autolink_doc("`t:AutolinkTest.Foo.bad/0`", opts) ==
524532
~s|<code class="inline">t:AutolinkTest.Foo.bad/0</code>|

0 commit comments

Comments
 (0)