@@ -19,7 +19,8 @@ defmodule ExDoc.HTMLFormatter.Autolink do
1919 """
2020 def all(modules) do
2121 aliases = Enum.map modules, &(&1.module)
22- Enum.map modules, &(&1 |> local_docs() |> project_docs(modules) |> all_typespecs(aliases))
22+ project_funs = all_functions(modules)
23+ Enum.map modules, &(&1 |> local_docs() |> project_docs(project_funs) |> all_typespecs(aliases))
2324 end
2425
2526 defp local_docs(ExDoc.ModuleNode[] = module) do
@@ -33,8 +34,7 @@ defmodule ExDoc.HTMLFormatter.Autolink do
3334 module.moduledoc(moduledoc).docs(docs)
3435 end
3536
36- defp project_docs(ExDoc.ModuleNode[] = module, all_modules) do
37- project_funs = all_functions(all_modules)
37+ defp project_docs(ExDoc.ModuleNode[] = module, project_funs) do
3838 moduledoc = module.moduledoc && project_doc(module.moduledoc, project_funs)
3939
4040 docs = lc node inlist module.docs do
@@ -62,16 +62,12 @@ defmodule ExDoc.HTMLFormatter.Autolink do
6262 module.typespecs(typespecs).docs(docs)
6363 end
6464
65- @doc " ""
66- Given a list of `ModulesNodes`, return a list of all functions defined in those modules .
67- "" "
68- def all_functions(modules) do
69- m = Enum.map modules, fn (mod) ->
65+ defp all_functions(modules) do
66+ Enum.flat_map modules, fn (mod) ->
7067 Enum.map mod.docs, fn (d) ->
7168 mod.id <> " . " <> d.id
7269 end
7370 end
74- List.flatten m
7571 end
7672
7773 @doc " ""
@@ -165,7 +161,7 @@ defmodule ExDoc.HTMLFormatter.Autolink do
165161 |> List.flatten
166162 |> Enum.filter( &( &1 in project_funs) )
167163 |> Enum.reduce( bin, fn ( x, acc) ->
168- { mod_str, function_name, arity} = split_function( x)
164+ { mod_str, function_name, arity } = split_function( x)
169165 escaped = Regex.escape( x)
170166 Regex.replace( % r/( ?< !\[ ) `( \s*#{escaped} \s*) `( ?! \] ) /, acc,
171167 "[ `\\1 `] ( #{mod_str} .html##{function_name}/#{arity})")
@@ -174,14 +170,7 @@ defmodule ExDoc.HTMLFormatter.Autolink do
174170
175171 defp split_function( bin) do
176172 [ modules, arity] = String.split( bin, "/")
177- rev = modules
178- |> String.split( ".")
179- |> Enum.reverse
180- function_name = hd( rev)
181- mod_str = rev
182- |> tl
183- |> Enum.reverse
184- |> Enum.join( ".")
185- { mod_str, function_name, arity}
173+ { mod, name } = modules |> String.split( ".") |> Enum.split( -1 )
174+ { Enum.join( mod, ".") , hd( name) , arity }
186175 end
187176end
0 commit comments