 edf50fdf80
			
		
	
	edf50fdf80
	
	
	
		
			
			- Run mix credo --all to identify possible code optimizations - Resolve most of the errors generated by credo such as: - Numbers larger than 9999 should be written with underscores: 58_127 - Modules should have a @moduledoc tag - Comparison will always return true
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| defmodule Blanks do
 | |
|   @moduledoc false
 | |
|   def replace(ast, replacements) do
 | |
|     replacements = List.wrap(replacements)
 | |
| 
 | |
|     ast
 | |
|     |> Macro.prewalk(replacements, &pre/2)
 | |
|     |> 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(node, acc), do: {node, acc}
 | |
| 
 | |
|   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)
 | |
|     |> elem(1)
 | |
|   end
 | |
| 
 | |
|   defp count({:___, _, _} = node, acc), do: {node, acc + 1}
 | |
|   defp count(node, acc), do: {node, acc}
 | |
| 
 | |
|   def replace_line({:__block__, meta, lines}, replacement_fn) do
 | |
|     replaced_lines =
 | |
|       Enum.map(lines, fn line ->
 | |
|         replace_line(line, replacement_fn)
 | |
|       end)
 | |
| 
 | |
|     {:__block__, meta, replaced_lines}
 | |
|   end
 | |
| 
 | |
|   def replace_line(line, replacement_fn) do
 | |
|     if count(line) > 0 do
 | |
|       replacement_fn.(line)
 | |
|     else
 | |
|       line
 | |
|     end
 | |
|   end
 | |
| end
 |