diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e74f2f578..07479ed05 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -83,7 +83,7 @@ jobs:
otp: "27"
# Test with latest Elixir and Erlang versions
- elixir: "1.19"
- otp: "28"
+ otp: "29"
lint: true
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 8eec2e690..5a0ed7763 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -29,15 +29,15 @@ jobs:
fail-fast: true
matrix:
include:
- - otp: 26
- otp_version: "26.2.5"
- elixir_version: "1.16.2"
- otp: 27
otp_version: "27.3.4.9"
elixir_version: "1.19.5"
- otp: 28
otp_version: "28.4.1"
elixir_version: "1.19.5"
+ - otp: 29
+ otp_version: "29.0"
+ elixir_version: "1.19.5"
runs-on: ubuntu-22.04
steps:
diff --git a/lib/ex_doc/language/erlang.ex b/lib/ex_doc/language/erlang.ex
index 7565960fe..2ad0ff504 100644
--- a/lib/ex_doc/language/erlang.ex
+++ b/lib/ex_doc/language/erlang.ex
@@ -570,7 +570,7 @@ defmodule ExDoc.Language.Erlang do
arity = length(args)
cond do
- name == :record and acc != [] ->
+ name == :record and args != [] and acc != [] ->
{ast, acc}
name in [:"::", :when, :%{}, :{}, :|, :->, :..., :fun] ->
diff --git a/test/ex_doc/language/erlang_test.exs b/test/ex_doc/language/erlang_test.exs
index a6caf2531..918ed2e7a 100644
--- a/test/ex_doc/language/erlang_test.exs
+++ b/test/ex_doc/language/erlang_test.exs
@@ -708,6 +708,13 @@ defmodule ExDoc.Language.ErlangTest do
~s| atom()}]].|
end
+ if System.otp_release() >= "29" do
+ test "spec referencing builtin record/0 type", c do
+ assert autolink_spec("-spec foo() -> record().", c) ==
+ ~s|foo() -> record().|
+ end
+ end
+
test "callback", c do
assert autolink_spec("-callback foo() -> t().", c) ==
~s|foo() -> t().|