diff --git a/lib/ex_doc/formatter/html/autolink.ex b/lib/ex_doc/formatter/html/autolink.ex index 42213e0e7..033af3f20 100644 --- a/lib/ex_doc/formatter/html/autolink.ex +++ b/lib/ex_doc/formatter/html/autolink.ex @@ -285,7 +285,17 @@ defmodule ExDoc.Formatter.HTML.Autolink do defp type_remote_url(source, alias, name, args) do name = enc("#{name}") - "#{source}#{enc(inspect(alias))}.html#t:#{name}/#{length(args)}" + + if erlang_alias?(alias) do + "#{source}#{enc(to_string(alias))}.html#type-#{name}" + else + "#{source}#{enc(inspect(alias))}.html#t:#{name}/#{length(args)}" + end + end + + defp erlang_alias?(alias) do + first_char = alias |> to_string() |> String.at(0) + first_char == String.downcase(first_char) end defp typespec_string_to_link(string, url) do diff --git a/test/ex_doc/formatter/html/autolink_test.exs b/test/ex_doc/formatter/html/autolink_test.exs index c6d4a54ee..136ca8d42 100644 --- a/test/ex_doc/formatter/html/autolink_test.exs +++ b/test/ex_doc/formatter/html/autolink_test.exs @@ -542,11 +542,16 @@ defmodule ExDoc.Formatter.HTML.AutolinkTest do ~s[:sets.set(foo())] end - test "autolinks shared aliases" do + test "autolinks shared Elixir aliases for ex_doc" do assert Autolink.typespec(quote(do: Foo.t()), [], [Foo]) == ~s[Foo.t()] end + test "autolinks shared Erlang aliases for EDoc" do + assert Autolink.typespec(quote(do: :foo.t()), [], [:foo]) == + ~s[:foo.t()] + end + test "autolinks inside parameterized types" do assert Autolink.typespec(quote(do: t(foo())), [t: 1, foo: 0], []) == ~s[t(foo())]