   Same as `rm_rf/1` but raises `File.Error` in case of failures,
   otherwise the list of files or directories removed.
   """
-  @spec rm_rf!(Path.t) :: [binary] | no_return
+  @spec rm_rf!(Path.t()) :: [binary] | no_return
   def rm_rf!(path) do
     case rm_rf(path) do
-      {:ok, files} -> files
+      {:ok, files} ->
+        files
+
       {:error, reason, _} ->
-        raise File.Error, reason: reason, path: IO.chardata_to_string(path),
+        raise File.Error,
+          reason: reason,
+          path: IO.chardata_to_string(path),
           action: "remove files and directories recursively from"
     end
   end

  @doc """
  Same as `write/3` but raises an exception if it fails, returns `:ok` otherwise.
  """
  @spec write!(Path.t, iodata, [mode]) :: :ok | no_return
  def write!(path, content, modes \\ []) do
    modes = normalize_modes(modes, false)
    case :file.write_file(path, content, modes) do
      :ok -> :ok
      {:error, reason} ->
        raise File.Error, reason: reason, action: "write to file",
          path: IO.chardata_to_string(path)
    end
  end


  See `open/2` for the list of available `modes`.
  """
  @spec open!(Path.t(), [mode | :ram], (io_device -> res)) :: res | no_return when res: var
  def open!(path, modes, function) do
    case open(path, modes, function) do
      {:ok, function_result} ->
        function_result

      {:error, reason} ->
        raise File.Error, reason: reason, action: "open", path: IO.chardata_to_string(path)
    end
