From 0a3f798ea98b125dd95efdc83499aa3bf7b610d7 Mon Sep 17 00:00:00 2001
From: Wojtek Mach <wojtek@wojtekmach.pl>
Date: Mon, 29 Jan 2024 11:21:54 +0100
Subject: [PATCH] Default `defimpl` to `@moduledoc false`

---
 lib/elixir/lib/protocol.ex               |  1 +
 lib/elixir/scripts/elixir_docs.exs       |  4 ++++
 lib/elixir/test/elixir/protocol_test.exs | 18 ++++++++++++++++++
 3 files changed, 23 insertions(+)

diff --git a/lib/elixir/lib/protocol.ex b/lib/elixir/lib/protocol.ex
index 591d25354a0..30f92a60475 100644
--- a/lib/elixir/lib/protocol.ex
+++ b/lib/elixir/lib/protocol.ex
@@ -972,6 +972,7 @@ defmodule Protocol do
       Protocol.__ensure_defimpl__(protocol, for, __ENV__)
 
       defmodule name do
+        @moduledoc false
         @behaviour protocol
         @protocol protocol
         @for for
diff --git a/lib/elixir/scripts/elixir_docs.exs b/lib/elixir/scripts/elixir_docs.exs
index fd20e730c91..011547e81a9 100644
--- a/lib/elixir/scripts/elixir_docs.exs
+++ b/lib/elixir/scripts/elixir_docs.exs
@@ -79,6 +79,10 @@ canonical = System.fetch_env!("CANONICAL")
   skip_undefined_reference_warnings_on: [
     "lib/elixir/pages/references/compatibility-and-deprecations.md"
   ],
+  skip_code_autolink_to: [
+    "Enumerable.List",
+    "Inspect.MapSet"
+  ],
   formatters: ["html", "epub"],
   groups_for_modules: [
     # [Kernel, Kernel.SpecialForms],
diff --git a/lib/elixir/test/elixir/protocol_test.exs b/lib/elixir/test/elixir/protocol_test.exs
index 9931917bf11..e043f1adbbc 100644
--- a/lib/elixir/test/elixir/protocol_test.exs
+++ b/lib/elixir/test/elixir/protocol_test.exs
@@ -133,6 +133,20 @@ defmodule ProtocolTest do
       end
     )
 
+    write_beam(
+      defimpl SampleDocsProto, for: List do
+        def ok(_), do: true
+      end
+    )
+
+    write_beam(
+      defimpl SampleDocsProto, for: Map do
+        @moduledoc "for map"
+
+        def ok(_), do: true
+      end
+    )
+
     {:docs_v1, _, _, _, _, _, docs} = Code.fetch_docs(SampleDocsProto)
 
     assert {{:type, :t, 0}, _, [], %{"en" => type_doc}, _} = List.keyfind(docs, {:type, :t, 0}, 0)
@@ -143,6 +157,10 @@ defmodule ProtocolTest do
 
     deprecated = SampleDocsProto.__info__(:deprecated)
     assert [{{:ok, 1}, "Reason"}] = deprecated
+
+    {:docs_v1, _, _, _, :hidden, _, _} = Code.fetch_docs(SampleDocsProto.List)
+    {:docs_v1, _, _, _, moduledoc, _, _} = Code.fetch_docs(SampleDocsProto.Map)
+    assert moduledoc == %{"en" => "for map"}
   end
 
   @compile {:no_warn_undefined, WithAll}