Skip to content

Commit a27be64

Browse files
committed
Parse Erlang module names using erl_scan to make things consistent
1 parent 4f1211f commit a27be64

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

Diff for: lib/ex_doc/language/erlang.ex

+19-14
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,11 @@ defmodule ExDoc.Language.Erlang do
279279

280280
case String.split(url, ":") do
281281
[module] ->
282-
walk_doc({:a, [href: "`m:#{module}#{fragment}`"], inner, meta}, config)
282+
walk_doc({:a, [href: "`m:#{maybe_quote(module)}#{fragment}`"], inner, meta}, config)
283283

284284
[app, module] ->
285285
inner = strip_app(inner, app)
286-
walk_doc({:a, [href: "`m:#{module}#{fragment}`"], inner, meta}, config)
286+
walk_doc({:a, [href: "`m:#{maybe_quote(module)}#{fragment}`"], inner, meta}, config)
287287

288288
_ ->
289289
warn_ref(attrs[:href], config)
@@ -372,13 +372,21 @@ defmodule ExDoc.Language.Erlang do
372372
end
373373

374374
defp fixup(mfa) do
375-
case String.split(mfa, "#") do
376-
["", mfa] ->
377-
mfa
375+
{m, fa} =
376+
case String.split(mfa, "#") do
377+
["", mfa] ->
378+
{"", mfa}
378379

379-
[m, fa] ->
380-
m <> ":" <> fa
381-
end
380+
[m, fa] ->
381+
{"#{maybe_quote(m)}:", fa}
382+
end
383+
384+
[f, a] = String.split(fa, "/")
385+
m <> maybe_quote(f) <> "/" <> a
386+
end
387+
388+
defp maybe_quote(m) do
389+
to_string(:io_lib.write_atom(String.to_atom(m)))
382390
end
383391

384392
defp strip_app([{:code, attrs, [code], meta}], app) do
@@ -474,12 +482,9 @@ defmodule ExDoc.Language.Erlang do
474482
end
475483
end
476484

477-
def parse_module_string(string, _mode) do
478-
case Code.string_to_quoted(":'#{string}'",
479-
warn_on_unnecessary_quotes: false,
480-
emit_warnings: false
481-
) do
482-
{:ok, module} when is_atom(module) ->
485+
defp parse_module_string(string, _mode) do
486+
case :erl_scan.string(String.to_charlist(string)) do
487+
{:ok, [{:atom, _, module}], _} when is_atom(module) ->
483488
{:module, module}
484489

485490
_ ->

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

+5
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@ defmodule ExDoc.Language.ErlangTest do
197197
~s|<a href=\"erlang_bar.html\"><code class="inline">erlang_bar</code></a>|
198198
end
199199

200+
test "invalid m:module in module code", c do
201+
assert autolink_doc("`m:erlang_bar()`", c) ==
202+
~s|<code class="inline">m:erlang_bar()</code>|
203+
end
204+
200205
test "module in module code reference", c do
201206
assert autolink_doc("[`erlang_bar`](`erlang_bar`)", c) ==
202207
~s|<a href=\"erlang_bar.html\"><code class="inline">erlang_bar</code></a>|

0 commit comments

Comments
 (0)