Auto-pin variables when replacing blanks in assert_receive

This commit is contained in:
Jay Hayes
2016-05-02 20:45:03 -05:00
parent 1b99ab0650
commit c7c2fbcdff
3 changed files with 31 additions and 6 deletions

View File

@@ -7,10 +7,25 @@ defmodule Blanks do
|> elem(0)
end
defp pre({:assert_receive, _, args} = node, replacements) do
{args, replacements} = Macro.prewalk(args, replacements, &pre_pin/2)
{put_elem(node, 2, args), replacements}
end
defp pre(:___, [first | remainder]), do: {first, remainder}
defp pre({:___, _, _}, [first | remainder]), do: {first, remainder}
defp pre(node, acc), do: {node, acc}
defp pre_pin(:___, [first | remainder]), do: {pin(first), remainder}
defp pre_pin({:___, _, _}, [first | remainder]), do: {pin(first), remainder}
defp pre_pin(node, acc), do: {node, acc}
defp pin(var) when is_tuple(var) do
quote do
^unquote(var)
end
end
defp pin(var), do: var
def count(ast) do
ast
|> Macro.prewalk(0, &count/2)