Packages
spark
1.1.35
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/spark/types.ex
defmodule Spark.Types do
@moduledoc "Helpers for spark types"
def doc_type({:behaviour, _mod}), do: "module"
def doc_type({:spark, mod}), do: doc_type({:behaviour, mod})
def doc_type({:spark_behaviour, mod}), do: doc_type({:behaviour, mod})
def doc_type({:spark_behaviour, mod, _builtins}), do: doc_type({:behaviour, inspect(mod)})
def doc_type(:module), do: "module"
def doc_type({:spark_function_behaviour, mod, {_, arity}}) do
doc_type({:or, [{:fun, arity}, {:spark_behaviour, mod}]})
end
def doc_type({:spark_function_behaviour, mod, _builtins, {_, arity}}) do
doc_type({:or, [{:fun, arity}, {:spark_behaviour, mod}]})
end
def doc_type({:custom, _, _, _}), do: "`any`"
def doc_type(:any), do: "`any`"
def doc_type(:keyword_list), do: "Keyword.t"
def doc_type({:keyword_list, schema}) do
options = Enum.map(schema, fn {key, value} -> {key, value[:type]} end)
"#{doc_type({:or, options})}"
end
def doc_type(:non_empty_keyword_list), do: "Keyword.t"
def doc_type(:atom), do: "atom"
def doc_type(:string), do: "String.t"
def doc_type(:boolean), do: "boolean"
def doc_type(:integer), do: "integer"
def doc_type(:non_neg_integer), do: "non_neg_integer"
def doc_type(:pos_integer), do: "pos_integer"
def doc_type(:float), do: "float"
def doc_type(:timeout), do: "timeout"
def doc_type(:pid), do: "pid"
def doc_type(:mfa), do: "mfa"
def doc_type(:mod_arg), do: doc_type({:tuple, [:module, {:list, :any}]})
def doc_type({:tuple, list}) when is_list(list) do
tuple = Enum.map_join(list, ", ", &doc_type/1)
"{#{tuple}}"
end
def doc_type(:map), do: "map"
def doc_type(:struct), do: "struct"
def doc_type({:struct, struct}), do: "#{inspect(struct)}"
def doc_type(nil), do: "nil"
def doc_type({:fun, 0}), do: "(-> any)"
def doc_type({:fun, arity}) when is_integer(arity) do
args =
Enum.map_join(0..(arity - 1), ", ", fn _ -> "any" end)
"(#{args} -> any)"
end
def doc_type({:fun, args}) when is_list(args) do
args =
Enum.map_join(args, ", ", &doc_type/1)
"(#{args} -> any)"
end
def doc_type({:fun, args, return}) when is_list(args) do
args =
Enum.map_join(args, ", ", &doc_type/1)
"(#{args} -> #{doc_type(return)})"
end
def doc_type({:one_of, choices}), do: doc_type({:in, choices})
def doc_type({:in, choices}), do: Enum.map_join(choices, " | ", &inspect/1)
def doc_type({:or, subtypes}), do: Enum.map_join(subtypes, " | ", &doc_type/1)
def doc_type({:list, subtype}), do: "list(#{doc_type(subtype)})"
def doc_type({:wrap_list, subtype}) do
str = doc_type(subtype)
"list(#{str}) | #{str}"
end
def doc_type({:list_of, subtype}), do: doc_type({:list, subtype})
def doc_type({:mfa_or_fun, arity}), do: doc_type({:or, [{:fun, arity}, :mfa]})
def doc_type(:literal), do: "any()"
def doc_type({:literal, value}), do: inspect(value)
def doc_type({:tagged_tuple, tag, type}), do: doc_type({:tuple, [{:literal, tag}, type]})
def doc_type({:spark_type, type, _}), do: doc_type({:behaviour, type})
def doc_type({:spark_type, type, _, _}), do: doc_type({:behaviour, type})
end