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())]