38 lines
1.1 KiB
Erlang
38 lines
1.1 KiB
Erlang
-module(elixir_transform).
|
|
-export([parse_transform/2]).
|
|
|
|
parse_transform(Forms, _) ->
|
|
do_transform(Forms).
|
|
|
|
do_transform({ atom, Line, Atom }) ->
|
|
case atom_to_list(Atom) of
|
|
"Elixir." ++ _ = List ->
|
|
Module = [case T of
|
|
$. -> $-;
|
|
_ -> T
|
|
end || T <- List],
|
|
{ atom, Line, list_to_atom(Module) };
|
|
_ ->
|
|
{ atom, Line, Atom }
|
|
end;
|
|
|
|
do_transform({ Name, Item1 }) ->
|
|
{ Name, do_transform(Item1) };
|
|
|
|
do_transform({ Name, Item1, Item2 }) ->
|
|
{ Name, do_transform(Item1), do_transform(Item2) };
|
|
|
|
do_transform({ Name, Item1, Item2, Item3 }) ->
|
|
{ Name, do_transform(Item1), do_transform(Item2), do_transform(Item3) };
|
|
|
|
do_transform({ Name, Item1, Item2, Item3, Item4 }) ->
|
|
{ Name, do_transform(Item1), do_transform(Item2), do_transform(Item3), do_transform(Item4) };
|
|
|
|
do_transform({ Name, Item1, Item2, Item3, Item4, Item5 }) ->
|
|
{ Name, do_transform(Item1), do_transform(Item2), do_transform(Item3), do_transform(Item4), do_transform(Item5) };
|
|
|
|
do_transform(List) when is_list(List) ->
|
|
[do_transform(X) || X <- List];
|
|
|
|
do_transform(Other) when not is_tuple(Other) ->
|
|
Other. |