From f560f83b98e804718ceca871de6c2efba11afeb4 Mon Sep 17 00:00:00 2001 From: Wojtek Mach Date: Mon, 30 Apr 2018 18:49:19 +0200 Subject: [PATCH 1/2] Autolink "/" function --- lib/ex_doc/formatter/html/autolink.ex | 13 +++++++++---- test/ex_doc/formatter/html/autolink_test.exs | 6 ++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/ex_doc/formatter/html/autolink.ex b/lib/ex_doc/formatter/html/autolink.ex index 7d6bded0d..fcb8416d1 100644 --- a/lib/ex_doc/formatter/html/autolink.ex +++ b/lib/ex_doc/formatter/html/autolink.ex @@ -337,7 +337,7 @@ defmodule ExDoc.Formatter.HTML.Autolink do will get translated to the new href of the function. """ 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+)}) + fun_re = Regex.source(~r{(([ct]:)?([a-z_]+[A-Za-z_\d]*[\\?\\!]?|[\{\}=&\\|\\.<>~*^@\\+\\%\\!-\/]+)/\d+)}) regex = ~r{(?~*^@\\+\\%\\!-]+)/\d+)}) + fun_re = Regex.source(~r{([ct]:)?(#{module_re}(([a-z_]+[A-Za-z_\d]*[\\?\\!]?)|[\{\}=&\\|\\.<>~*^@\\+\\%\\!-\/]+)/\d+)}) @custom_re ~r{\[(.*?)\]\(`(#{fun_re})`\)} @normal_re ~r{(? String.replace(~r{([^\.])\.}, "\\1 ") # this handles the case of the ".." function @@ -498,6 +500,9 @@ defmodule ExDoc.Formatter.HTML.Autolink do |> Enum.split(-1) {"", Enum.join(mod, "."), hd(name), arity} end + defp split_function([modules, "", arity]) do # handles "/" function + split_function([modules <> "/", arity]) + end @doc """ Create links to Erlang functions in code blocks. diff --git a/test/ex_doc/formatter/html/autolink_test.exs b/test/ex_doc/formatter/html/autolink_test.exs index c36fb9f3d..e77ef6c34 100644 --- a/test/ex_doc/formatter/html/autolink_test.exs +++ b/test/ex_doc/formatter/html/autolink_test.exs @@ -10,6 +10,7 @@ defmodule ExDoc.Formatter.HTML.AutolinkTest do test "autolink fun/arity in docs" do assert Autolink.local_doc("`example/2`", ["example/2"]) == "[`example/2`](#example/2)" + assert Autolink.local_doc("`__ENV__/0`", ["__ENV__/0"]) == "[`__ENV__/0`](#__ENV__/0)" assert Autolink.local_doc("`example/2` then `example/2`", ["example/2"]) == "[`example/2`](#example/2) then [`example/2`](#example/2)" @@ -20,6 +21,8 @@ defmodule ExDoc.Formatter.HTML.AutolinkTest do assert Autolink.local_doc("`funny_name\?/1` and `funny_name!/2`", ["funny_name\?/1", "funny_name!/2"]) == "[`funny_name\?/1`](#funny_name\?/1) and [`funny_name!/2`](#funny_name!/2)" + + assert Autolink.local_doc("`//2`", ["//2"]) == "[`//2`](#//2)" end test "autolink to local callbacks" do @@ -143,6 +146,9 @@ defmodule ExDoc.Formatter.HTML.AutolinkTest do assert Autolink.elixir_functions("[`f`](`Foo.foo/1`), [`f`](`Foo.foo/1`)", ["Foo.foo/1"]) == "[`f`](Foo.html#foo/1), [`f`](Foo.html#foo/1)" + + assert Autolink.elixir_functions("[`foo`](`Foo.//2`)", ["Foo.//2"]) == + "[`foo`](Foo.html#//2)" end test "autolink functions to types in the project" do From 1a3bd34d0efa645cf632d3dfef14859b719eaf5e Mon Sep 17 00:00:00 2001 From: Wojtek Mach Date: Mon, 30 Apr 2018 18:52:08 +0200 Subject: [PATCH 2/2] Update autolink_test.exs --- test/ex_doc/formatter/html/autolink_test.exs | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/ex_doc/formatter/html/autolink_test.exs b/test/ex_doc/formatter/html/autolink_test.exs index e77ef6c34..d3424e700 100644 --- a/test/ex_doc/formatter/html/autolink_test.exs +++ b/test/ex_doc/formatter/html/autolink_test.exs @@ -10,7 +10,6 @@ defmodule ExDoc.Formatter.HTML.AutolinkTest do test "autolink fun/arity in docs" do assert Autolink.local_doc("`example/2`", ["example/2"]) == "[`example/2`](#example/2)" - assert Autolink.local_doc("`__ENV__/0`", ["__ENV__/0"]) == "[`__ENV__/0`](#__ENV__/0)" assert Autolink.local_doc("`example/2` then `example/2`", ["example/2"]) == "[`example/2`](#example/2) then [`example/2`](#example/2)" @@ -21,7 +20,6 @@ defmodule ExDoc.Formatter.HTML.AutolinkTest do assert Autolink.local_doc("`funny_name\?/1` and `funny_name!/2`", ["funny_name\?/1", "funny_name!/2"]) == "[`funny_name\?/1`](#funny_name\?/1) and [`funny_name!/2`](#funny_name!/2)" - assert Autolink.local_doc("`//2`", ["//2"]) == "[`//2`](#//2)" end