Skip to content

Commit 774aacd

Browse files
committed
Warning on undefined types and callbacks in Erlang
1 parent a72f81f commit 774aacd

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
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

+42
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,6 +466,18 @@ defmodule ExDoc.Language.ErlangTest do
448466
~s|<code class="inline">...a/0</code>|
449467
end
450468

469+
@tag warnings: :send
470+
test "bad type", c do
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+
file: "extra.md",
477+
line: 1
478+
) =~ ~s|documentation references type "t:bad:bad/0" but it is undefined or private|
479+
end
480+
451481
@tag warnings: :send
452482
test "bad type ref", c do
453483
assert warn(
@@ -460,6 +490,18 @@ defmodule ExDoc.Language.ErlangTest do
460490
) =~ ~s|documentation references type "t:bad:bad/0" but it is undefined or private|
461491
end
462492

493+
@tag warnings: :send
494+
test "bad callback", c do
495+
assert warn(
496+
fn ->
497+
assert autolink_extra("`c:bad:bad/0`", c) ==
498+
~s|<code class="inline">c:bad:bad/0</code>|
499+
end,
500+
file: "extra.md",
501+
line: 1
502+
) =~ ~s|documentation references callback "c:bad:bad/0" but it is undefined|
503+
end
504+
463505
test "bad module", c do
464506
assert autolink_extra("`does_not_exist`", c) ==
465507
~s|<code class="inline">does_not_exist</code>|

0 commit comments

Comments
 (0)