Packages
spark
2.0.1
2.7.2
2.7.1
2.7.0
2.6.1
2.6.0
2.5.0
2.4.1
2.4.0
2.3.14
2.3.13
2.3.12
2.3.11
2.3.10
2.3.9
2.3.8
2.3.7
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.69
2.2.68
2.2.67
2.2.66
2.2.65
2.2.64
2.2.63
2.2.62
2.2.61
2.2.60
2.2.59
2.2.58
2.2.57
2.2.56
2.2.55
2.2.54
2.2.53
2.2.52
2.2.51
2.2.50
2.2.49
2.2.48
2.2.47
2.2.46
2.2.45
2.2.44
2.2.43
2.2.42
2.2.41
2.2.40
2.2.39
2.2.38
2.2.37
2.2.36
2.2.35
2.2.34
2.2.33
2.2.32
2.2.31
2.2.30
2.2.29
2.2.28
2.2.27
2.2.26
2.2.25
2.2.24
2.2.23
2.2.22
2.2.21
2.2.20
2.2.19
2.2.18
2.2.17
2.2.16
2.2.15
2.2.14
2.2.13
2.2.12
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.24
2.1.23
2.1.22
2.1.21
2.1.20
2.1.19
2.1.18
2.1.17
2.1.16
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.1
2.0.0
1.1.55
1.1.54
1.1.53
1.1.52
1.1.51
1.1.50
1.1.49
1.1.48
1.1.47
1.1.46
1.1.45
1.1.44
1.1.43
1.1.42
1.1.41
1.1.40
1.1.39
1.1.38
1.1.37
1.1.36
1.1.35
1.1.34
1.1.32
1.1.31
1.1.30
1.1.29
1.1.28
1.1.27
1.1.26
1.1.25
1.1.24
1.1.22
1.1.21
1.1.20
1.1.19
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
retired
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Generic tooling for building DSLs
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/spark.replace_doc_links.ex
defmodule Mix.Tasks.Spark.ReplaceDocLinks do
@moduledoc """
Replaces any documentation links with text appropriate for hex docs.
This makes projects support
"""
use Mix.Task
@auto_prefixes ~w(
ash ash_postgres ash_graphql ash_phoenix ash_authentication ash_archival
ash_json_api ash_admin ash_state_machine ash_oban ash_geo ash_appsignal ash_rbac ash_query_builder
ash_uuid ash_csv pyro smokestack ash_thrift ash_double_entry ash_ulid
)
@prefixes @auto_prefixes
|> Map.new(&{Macro.camelize(&1), &1})
|> Map.merge(%{
"AshAuthentication.Phoenix" => "ash_authentication_phoenix"
})
@shortdoc "Replaces any spark dsl specific doc links with text appropriate for hex docs."
def run(_argv) do
mix_project = Mix.Project.get!()
module_prefix = mix_project |> Module.split() |> Enum.at(0)
"doc/**/*.html"
|> Path.wildcard()
|> Enum.each(fn file ->
new_contents =
file
|> File.read!()
|> String.replace(~r/\>d\:[a-zA-Z0-9|_\?\!\.]*\</, fn ">d:" <> contents ->
contents =
contents
|> String.trim_trailing("<")
|> String.replace("|", ".")
module_name =
contents
|> String.split(".")
|> Enum.take_while(&capitalized?/1)
|> Enum.join(".")
url_prefix =
if String.starts_with?(module_name, module_prefix <> ".") do
case Code.ensure_compiled(Module.concat([module_name])) do
{:module, _} ->
{:ok, ""}
{:error, error} ->
raise "Expected #{module_name} to be compiled because the link \"d:#{contents}\" was used, but it was not available: #{inspect(error)}"
end
else
@prefixes
|> Enum.filter(fn {key, _value} -> String.starts_with?(module_name, key) end)
|> Enum.sort_by(fn {key, _} -> String.length(key) end)
|> Enum.reverse()
|> Enum.at(0)
|> case do
nil ->
:error
{_, package_name} ->
{:ok, "https://hexdocs.pm/#{package_name}/"}
end
end
case url_prefix do
{:ok, prefix} ->
name =
module_name
|> String.trim_trailing(".Dsl")
|> String.split(".")
|> Enum.map_join("-", &String.downcase/1)
rest =
contents |> String.trim_leading(module_name <> ".") |> String.replace(".", "-")
"><a href=\"#{prefix}dsl-#{name}.html##{rest}\">#{contents}</a><"
:error ->
">#{contents}<"
end
end)
File.write!(file, new_contents)
end)
end
defp capitalized?(string) do
first =
string
|> String.graphemes()
|> Enum.at(0)
String.downcase(first) != first
end
end