diff --git a/lib/blanks.ex b/lib/blanks.ex index c1c8e54..e808b69 100644 --- a/lib/blanks.ex +++ b/lib/blanks.ex @@ -1,7 +1,6 @@ defmodule Blanks do - def replace(ast, replacement) when not is_list(replacement), do: replace(ast, [replacement]) - def replace([do: ast], replacements), do: [do: replace(ast, replacements)] def replace(ast, replacements) do + replacements = List.wrap(replacements) ast |> Macro.prewalk(replacements, &pre/2) |> elem(0) @@ -11,11 +10,9 @@ defmodule Blanks 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} @@ -32,11 +29,9 @@ defmodule Blanks do |> elem(1) end - defp count(:___ = node, acc), do: {node, acc+1} defp count({:___, _, _} = node, acc), do: {node, acc+1} defp count(node, acc), do: {node, acc} - def replace_line([do: ast], replacement_fn), do: [do: replace_line(ast, replacement_fn)] def replace_line({:__block__, meta, lines}, replacement_fn) do replaced_lines = Enum.map(lines, fn(line) -> replace_line(line, replacement_fn)