       iex> add_attribute("tag tag=2", "attr=1")
       "tag attr=1 tag=2"
   """
+  @spec add_attribute(String.t(), String.t()) :: String.t()
   def add_attribute(tag, attribute) do
     String.replace(tag, tag_name(tag), "#{tag_name(tag)} #{attribute}", global: false)
   end

    iex> inject_attribute_to_last_opened "<img attr=2 src", "attr=1"
    {:already_there, "<img attr=2 src", "attr=2"}
  """
  def inject_attribute_to_last_opened(buffer, attribute) when is_tuple(buffer) do
    # in case when there is no text between expressions
    {result, [acc], attribute} = inject_attribute_to_last_opened([buffer], attribute)

      iex> deep_reverse [1, [2, 3], 4]
      [4, [3, 2], 1]
  """
  @spec deep_reverse(list) :: list
  def deep_reverse(list) do
    list |> Enum.reverse()
    |> Enum.map(fn
