 
   defp invalid_calls(call, last_call_in_def, calls_in_block_above, required_mod_list, restrict_fun_names) do
     if call |> CodeHelper.do_block? do
+      #IO.inspect "do block"
       call
       |> calls_to_mod_fun(required_mod_list, restrict_fun_names)
+      #|> IO.inspect
       |> Enum.reject(&valid_call_to_string_mod?(call, &1, last_call_in_def, calls_in_block_above))
     else
+      #IO.inspect "no do block"
+      #IO.inspect call
       if call == last_call_in_def do
         []
       else

          calls_in_method
          |> Enum.flat_map(&invalid_calls(&1, last_call_in_def, calls_in_method, required_mod_list, restrict_fun_names))

      #IO.puts IO.ANSI.format [:yellow, "unquote(op)"]
      #IO.inspect ast |> CodeHelper.do_block_for
      #IO.inspect calls_in_method
      #IO.inspect last_call_in_def

      end
    end
  end
  defp valid_call_to_string_mod?({:|>, _, arguments} = ast, call_to_string, last_call_in_def, _calls_in_block_above) do
    #IO.puts IO.ANSI.format [:yellow, ":|>"]
    # We are in a pipe chain that is NOT the last call in the method
    # and that is NOT part of an assignment.
    # This is fine, as long as the call to String is not the last element
    # in the pipe chain.
    if CodeHelper.contains_child?(last_call_in_def, ast) && CodeHelper.contains_child?(ast, call_to_string) do
      true
    else
      List.last(arguments) != call_to_string
    end
  end
  defp valid_call_to_string_mod?({:++, _, _arguments} = ast, call_to_string, last_call_in_def, _calls_in_block_above) do
    #IO.puts IO.ANSI.format [:yellow, ":++"]
    CodeHelper.contains_child?(last_call_in_def, ast) && CodeHelper.contains_child?(ast, call_to_string)
  end
  defp valid_call_to_string_mod?({_atom, _meta, arguments} = ast, call_to_string, last_call_in_def, calls_in_block_above) do
    if fn_in_arguments?(ast) do
