Skip to content

Commit 5d20aec

Browse files
committed
Warning on undefined types and callbacks in Erlang
1 parent 864e66d commit 5d20aec

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

Diff for: lib/ex_doc/autolink.ex

+4-2
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ defmodule ExDoc.Autolink do
413413
{:type, _visibility} ->
414414
case config.language.try_builtin_type(name, arity, mode, config, original_text) do
415415
nil ->
416-
if mode == :custom_link do
416+
if mode == :custom_link or config.language == ExDoc.Language.Erlang do
417417
maybe_warn(config, ref, visibility, %{original_text: original_text})
418418
end
419419

@@ -482,7 +482,9 @@ defmodule ExDoc.Autolink do
482482

483483
nil
484484

485-
{:regular_link, _module_visibility, :undefined} when not same_module? ->
485+
{:regular_link, _module_visibility, :undefined}
486+
when not same_module? and
487+
(config.language != ExDoc.Language.Erlang or kind == :function) ->
486488
nil
487489

488490
{_mode, _module_visibility, visibility} ->

Diff for: test/ex_doc/language/erlang_test.exs

+37-2
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,24 @@ defmodule ExDoc.Language.ErlangTest do
382382
) =~ ~s|documentation references callback "c:erlang_bar:bad/0" but it is undefined|
383383
end
384384

385+
test "bad local type in module", c do
386+
assert warn(
387+
fn ->
388+
assert autolink_doc("\n`t:bad/0`", c) == ~s|<code class="inline">t:bad/0</code>|
389+
end,
390+
line: 2
391+
) =~ ~s|documentation references type "t:bad/0" but it is undefined or private|
392+
end
393+
394+
test "bad local callback in module", c do
395+
assert warn(
396+
fn ->
397+
assert autolink_doc("\n`c:bad/0`", c) == ~s|<code class="inline">c:bad/0</code>|
398+
end,
399+
line: 2
400+
) =~ ~s|documentation references callback "c:bad/0" but it is undefined|
401+
end
402+
385403
test "bad function in module ref", c do
386404
assert warn(
387405
fn ->
@@ -448,9 +466,26 @@ defmodule ExDoc.Language.ErlangTest do
448466
~s|<code class="inline">...a/0</code>|
449467
end
450468

469+
@tag warnings: :send
451470
test "bad type", c do
452-
assert autolink_extra("`t:bad:bad/0`", c) ==
453-
~s|<code class="inline">t:bad:bad/0</code>|
471+
assert warn(
472+
fn ->
473+
assert autolink_extra("`t:bad:bad/0`", c) ==
474+
~s|<code class="inline">t:bad:bad/0</code>|
475+
end,
476+
line: 1
477+
) =~ ~s|documentation references type "t:bad:bad/0" but it is undefined or private|
478+
end
479+
480+
@tag warnings: :send
481+
test "bad callback", c do
482+
assert warn(
483+
fn ->
484+
assert autolink_extra("`c:bad:bad/0`", c) ==
485+
~s|<code class="inline">c:bad:bad/0</code>|
486+
end,
487+
line: 1
488+
) =~ ~s|documentation references callback "c:bad:bad/0" but it is undefined|
454489
end
455490

456491
test "bad module", c do

0 commit comments

Comments
 (0)