Current section

Files

Jump to
snap_framework lib engine parser enumeration.ex
Raw

lib/engine/parser/enumeration.ex

defmodule SnapFramework.Parser.Enumeration do
require Logger
@moduledoc false
def run(ast) do
ast
|> parse()
end
def parse(
{{:., _, [{:__aliases__, _, [:Enum]}, :map]}, _,
[
list,
{:fn, _,
[
{:->, _,
[
[_var],
{:__block__, [], block}
]}
]}
]}
) do
for cmp_data <- Macro.expand(list, SnapFramework.Engine) do
Macro.prewalk(block, &handle_block(&1, cmp_data))
end
end
def parse({:for, _meta, [{:<-, _, [_var, arg]}, [do: {:__block__, [], block}]]}) do
for cmp_data <- Macro.expand(arg, SnapFramework.Engine) do
Macro.prewalk(block, &handle_block(&1, cmp_data))
end
end
def parse(ast), do: ast
defp handle_block({:slot, meta, [cmp, _cmp_data]}, cmp_data) do
quote line: meta[:line] || 0 do
{:slot, [unquote(cmp), unquote(cmp_data)]}
end
end
defp handle_block({:slot, meta, [cmp, _cmp_data, opts]}, cmp_data) do
quote line: meta[:line] || 0 do
{:slot, [unquote(cmp), unquote(cmp_data), unquote(opts)]}
end
end
defp handle_block({:arg3, [], SnapFrameWork.Engine}, _cmp_data) do
quote do
end
end
defp handle_block(ast, _), do: ast
end