Skip to content

Instantly share code, notes, and snippets.

@nkezhaya
Created August 21, 2020 19:18
Show Gist options
  • Select an option

  • Save nkezhaya/bfb9ae96305b572fc7091b307bf0826a to your computer and use it in GitHub Desktop.

Select an option

Save nkezhaya/bfb9ae96305b572fc7091b307bf0826a to your computer and use it in GitHub Desktop.
defmodule Foo do
def bar() do
"""
x = 10
IO.inspect({x, y})
"""
|> Code.string_to_quoted!()
|> Macro.traverse(
%{vars: [], unbound: []},
fn
{:=, _, [{new_var, _, nil} | _]} = ast, acc ->
{ast, %{acc | vars: [new_var | acc.vars]}}
{var, _, nil} = ast, acc ->
if var in acc.vars do
{ast, acc}
else
{ast, %{acc | unbound: [var | acc.unbound]}}
end
ast, acc ->
{ast, acc}
end,
fn ast, acc -> {ast, acc} end
)
|> elem(1)
|> IO.inspect()
end
end
Foo.bar()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment