From 82a96f5c8e5274dc2e14bac2646344681f545921 Mon Sep 17 00:00:00 2001 From: Wojtek Mach Date: Sun, 17 Dec 2017 12:17:23 +0100 Subject: [PATCH] Fix autolinking Kernel & Kernel.SpecialForms for Elixir itself --- lib/ex_doc/formatter/html/autolink.ex | 14 +++++++------- test/ex_doc/formatter/html/autolink_test.exs | 3 +++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/ex_doc/formatter/html/autolink.ex b/lib/ex_doc/formatter/html/autolink.ex index a508fabfa..ae7c5a976 100644 --- a/lib/ex_doc/formatter/html/autolink.ex +++ b/lib/ex_doc/formatter/html/autolink.ex @@ -83,7 +83,7 @@ defmodule ExDoc.Formatter.HTML.Autolink do defp process_module(module, modules, aliases, extension, lib_dirs) do module - |> all_docs(modules, extension, lib_dirs) + |> all_docs(modules, aliases, extension, lib_dirs) |> all_typespecs(aliases, lib_dirs) end @@ -91,7 +91,7 @@ defmodule ExDoc.Formatter.HTML.Autolink do inspect module.module end - defp all_docs(module, modules, extension, lib_dirs) do + defp all_docs(module, modules, aliases, extension, lib_dirs) do locals = for doc <- module.docs, prefix = doc_prefix(doc), @@ -102,7 +102,7 @@ defmodule ExDoc.Formatter.HTML.Autolink do moduledoc = if module.doc do module.doc - |> local_doc(locals, extension, lib_dirs) + |> local_doc(locals, aliases, extension, lib_dirs) |> project_doc(modules, module.id, extension, lib_dirs) end @@ -110,7 +110,7 @@ defmodule ExDoc.Formatter.HTML.Autolink do doc = if module_node.doc do module_node.doc - |> local_doc(locals, extension, lib_dirs) + |> local_doc(locals, aliases, extension, lib_dirs) |> project_doc(modules, module.id, extension, lib_dirs) end %{module_node | doc: doc} @@ -120,7 +120,7 @@ defmodule ExDoc.Formatter.HTML.Autolink do doc = if module_node.doc do module_node.doc - |> local_doc(locals, extension, lib_dirs) + |> local_doc(locals, aliases, extension, lib_dirs) |> project_doc(modules, module.id, extension, lib_dirs) end %{module_node | doc: doc} @@ -347,10 +347,10 @@ defmodule ExDoc.Formatter.HTML.Autolink do or trailing `]`, e.g. `[my link link/1 is here](url)`, the fun/arity will get translated to the new href of the function. """ - def local_doc(bin, locals, extension \\ ".html", lib_dirs \\ elixir_lib_dirs()) when is_binary(bin) do + def local_doc(bin, locals, aliases \\ [], extension \\ ".html", lib_dirs \\ elixir_lib_dirs()) when is_binary(bin) do fun_re = Regex.source(~r{(([ct]:)?([a-z_]+[A-Za-z_\d]*[\\?\\!]?|[\{\}=&\\|\\.<>~*^@\\+\\%\\!-]+)/\d+)}) regex = ~r{(? {prefix, _, function, arity} = split_function(match) diff --git a/test/ex_doc/formatter/html/autolink_test.exs b/test/ex_doc/formatter/html/autolink_test.exs index 65cb1d625..eb1258ccc 100644 --- a/test/ex_doc/formatter/html/autolink_test.exs +++ b/test/ex_doc/formatter/html/autolink_test.exs @@ -57,6 +57,8 @@ defmodule ExDoc.Formatter.HTML.AutolinkTest do assert Autolink.local_doc("`<<>>/1`", ["<<>>/1"]) === "[`<<>>/1`](#%3C%3C%3E%3E/1)" assert Autolink.local_doc("`<<>>/1`", []) === "[`<<>>/1`](#{@elixir_docs}elixir/Kernel.SpecialForms.html#%3C%3C%3E%3E/1)" + assert Autolink.local_doc("`<<>>/1`", [], [Kernel]) === + "[`<<>>/1`](Kernel.SpecialForms.html#%3C%3C%3E%3E/1)" end test "autolink creates links for Kernel functions" do @@ -64,6 +66,7 @@ defmodule ExDoc.Formatter.HTML.AutolinkTest do assert Autolink.local_doc("`abs/1`", []) === "[`abs/1`](#{@elixir_docs}elixir/Kernel.html#abs/1)" assert Autolink.local_doc("`!/1`", ["!/1"]) === "[`!/1`](#!/1)" assert Autolink.local_doc("`!/1`", []) === "[`!/1`](#{@elixir_docs}elixir/Kernel.html#!/1)" + assert Autolink.local_doc("`!/1`", [], [Kernel]) === "[`!/1`](Kernel.html#!/1)" end # elixir_functions