 
   defp proxy_scheme(scheme) do
     case scheme do
-      :http  -> :proxy
+      :http -> :proxy
       :https -> :https_proxy
     end
   end
 
-  defp proxy_auth(%URI{scheme: "http"}, http_proxy, _https_proxy),
-    do: proxy_auth(http_proxy)
-  defp proxy_auth(%URI{scheme: "https"}, _http_proxy, https_proxy),
-    do: proxy_auth(https_proxy)
-
-  defp proxy_auth(nil),
-    do: []
-  defp proxy_auth(%URI{userinfo: nil}),
-    do: []
+  defp proxy_auth(%URI{scheme: "http"}, http_proxy, _https_proxy), do: proxy_auth(http_proxy)
+  defp proxy_auth(%URI{scheme: "https"}, _http_proxy, https_proxy), do: proxy_auth(https_proxy)
+
+  defp proxy_auth(nil), do: []
+  defp proxy_auth(%URI{userinfo: nil}), do: []
+
   defp proxy_auth(%URI{userinfo: auth}) do
     destructure [user, pass], String.split(auth, ":", parts: 2)
 


  @doc false
  def last_modified_and_size(path) do
    now = :calendar.universal_time

    case :elixir_utils.read_mtime_and_size(path) do
      {:ok, mtime, size} when mtime > now ->
        Mix.shell.error("warning: mtime (modified time) for \"#{path}\" was set to the future, resetting to now")
        File.touch!(path, now)
        {mtime, size}
      {:ok, mtime, size} ->
        {mtime, size}
      {:error, _} ->
        {{{1970, 1, 1}, {0, 0, 0}}, 0}
    end

  The callback will be invoked for each node and it
  must return a `{printed, children}` tuple.
  """
  @spec write_dot_graph!(
          Path.t(),
          String.t(),
          [tree_node],
          (tree_node -> {tree_node, [tree_node]}),
          keyword
        ) :: :ok
  def write_dot_graph!(path, title, nodes, callback, _opts \\ []) do
    {dot, _} = build_dot_graph(make_ref(), nodes, MapSet.new(), callback)
    File.write!(path, "digraph \"#{title}\" {\n#{dot}}\n")
  end

  defp build_dot_graph(_parent, [], seen, _callback), do: {"", seen}

  defp build_dot_graph(parent, [node | nodes], seen, callback) do
    {{name, edge_info}, children} = callback.(node)
    key = {parent, name}
