       end
     end
   end
-  defp valid_call_to_string_mod?({:|>, _, arguments}, call_to_string, _last_call_in_def, _calls_in_block_above) do
+  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.
-    List.last(arguments) != call_to_string
+    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

          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

      calls_in_this_block = any_value |> List.wrap

      calls_in_this_block
      #|> IO.inspect
      |> Enum.any?(&valid_call_to_string_mod?(&1, call_to_string, last_call_in_def, calls_in_this_block))
    end
  end
