Skip to content

Commit 6645809

Browse files
Add skip_code_autolink_to option (#1759)
1 parent 48949c5 commit 6645809

File tree

6 files changed

+38
-3
lines changed

6 files changed

+38
-3
lines changed

lib/ex_doc/autolink.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ defmodule ExDoc.Autolink do
2020
# * `:extras` - map of extras
2121
#
2222
# * `:skip_undefined_reference_warnings_on` - list of modules to skip the warning on
23+
#
24+
# * `:skip_code_autolink_to` - list of terms that will be skipped when autolinking (e.g: "PrivateModule")
2325

2426
defstruct [
2527
:current_module,
@@ -32,7 +34,8 @@ defmodule ExDoc.Autolink do
3234
deps: [],
3335
ext: ".html",
3436
siblings: [],
35-
skip_undefined_reference_warnings_on: []
37+
skip_undefined_reference_warnings_on: [],
38+
skip_code_autolink_to: []
3639
]
3740

3841
@hexdocs "https://hexdocs.pm/"

lib/ex_doc/config.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ defmodule ExDoc.Config do
3838
project: nil,
3939
retriever: ExDoc.Retriever,
4040
skip_undefined_reference_warnings_on: [],
41+
skip_code_autolink_to: [],
4142
source_beam: nil,
4243
source_ref: @default_source_ref,
4344
source_url: nil,
@@ -75,6 +76,7 @@ defmodule ExDoc.Config do
7576
project: nil | String.t(),
7677
retriever: atom(),
7778
skip_undefined_reference_warnings_on: [String.t()],
79+
skip_code_autolink_to: [String.t()],
7880
source_beam: nil | String.t(),
7981
source_ref: nil | String.t(),
8082
source_url: nil | String.t(),

lib/ex_doc/formatter/html.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ defmodule ExDoc.Formatter.HTML do
7070
deps: config.deps,
7171
ext: ext,
7272
extras: extra_paths(config),
73-
skip_undefined_reference_warnings_on: config.skip_undefined_reference_warnings_on
73+
skip_undefined_reference_warnings_on: config.skip_undefined_reference_warnings_on,
74+
skip_code_autolink_to: config.skip_code_autolink_to
7475
]
7576

7677
project_nodes
@@ -375,7 +376,8 @@ defmodule ExDoc.Formatter.HTML do
375376
deps: config.deps,
376377
ext: ext,
377378
extras: extra_paths(config),
378-
skip_undefined_reference_warnings_on: config.skip_undefined_reference_warnings_on
379+
skip_undefined_reference_warnings_on: config.skip_undefined_reference_warnings_on,
380+
skip_code_autolink_to: config.skip_code_autolink_to
379381
]
380382

381383
extras =

lib/ex_doc/language/elixir.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,14 @@ defmodule ExDoc.Language.Elixir do
559559
end
560560

561561
defp url(string, mode, config) do
562+
if Enum.any?(config.skip_code_autolink_to, &(&1 == string)) do
563+
nil
564+
else
565+
parse_url(string, mode, config)
566+
end
567+
end
568+
569+
defp parse_url(string, mode, config) do
562570
case Regex.run(~r{^(.+)/(\d+)$}, string) do
563571
[_, left, right] ->
564572
with {:ok, arity} <- parse_arity(right) do

lib/mix/tasks/docs.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,12 @@ defmodule Mix.Tasks.Docs do
148148
skip the warnings, for a given module/function/callback/type (e.g.: `["Foo", "Bar.baz/0"]`)
149149
or on a given file (e.g.: `["pages/deprecations.md"]`); default: `[]`.
150150
151+
* `:skip_code_autolink_to` - Similar to `:skip_undefined_reference_warnings_on`, this option
152+
controls which terms will be skipped by ExDoc when building documentation.
153+
Useful for example if you want to highlight private modules or functions
154+
without warnings (e.g.: `["PrivateModule", "PrivateModule.func/1"]`);
155+
default: `[]`.
156+
151157
* `:source_beam` - Path to the beam directory; default: mix's compile path.
152158
153159
* `:source_ref` - The branch/commit/tag used for source link inference;

test/ex_doc/language/elixir_test.exs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,20 @@ defmodule ExDoc.Language.ElixirTest do
381381
~s[t() :: <a href="https://hexdocs.pm/elixir/String.html#t:t/0">String.t</a>()]
382382
end
383383

384+
test "skips autolinking if requested" do
385+
ExDoc.Refs.insert([
386+
{{:module, AutolinkTest.Hidden}, :hidden},
387+
{{:function, AutolinkTest.Hidden, :foo, 1}, :hidden}
388+
])
389+
390+
assert_skip_autolink_no_warn("AutolinkTest.Hidden")
391+
assert_skip_autolink_no_warn("AutolinkTest.Hidden.foo/1")
392+
end
393+
394+
defp assert_skip_autolink_no_warn(string) do
395+
assert_unchanged(~m(`#{string}`), skip_code_autolink_to: [string])
396+
end
397+
384398
test "Elixir basic types" do
385399
assert autolink_spec(quote(do: t() :: atom())) ==
386400
~s[t() :: <a href="https://hexdocs.pm/elixir/typespecs.html#basic-types">atom</a>()]

0 commit comments

Comments
 (0)