     # TODO: Remove on Elixir v2.0
     case value do
       {:parse_transform, _} when key == :compile and is_list(stack) ->
-        IO.warn "@compile {:parse_transform, _} is deprecated. " <>
-                "Elixir will no longer support Erlang-based transforms in future versions", stack
+        error_message =
+          "@compile {:parse_transform, _} is deprecated. " <>
+            "Elixir will no longer support Erlang-based transforms in future versions"
+
+        IO.warn(error_message, stack)
+
       _ ->
         :ok
     end
 
     case :ets.lookup(table, key) do
       [{^key, {line, <<_::binary>>}, accumulated?, _unread_line}]
-          when key in [:doc, :typedoc, :moduledoc] and is_list(stack) ->
-        IO.warn "redefining @#{key} attribute previously set at line #{line}", stack
+      when key in [:doc, :typedoc, :moduledoc] and is_list(stack) ->
+        IO.warn("redefining @#{key} attribute previously set at line #{line}", stack)
         :ets.insert(table, {key, value, accumulated?, unread_line})
 
       [{^key, current, _accumulated? = true, _read?}] ->

      for {{{name, arity}, kind}, module} <- callbacks do
        "\n  * " <> Exception.format_mfa(module, name, arity) <> " (#{format_definition(kind)})"
      end
    ". The known callbacks are:\n#{formatted_callbacks}\n"
  end


    case :ets.take(table, :doc) do
      [{:doc, {_, _} = pair, _, _}] ->
        pair

      [] ->
        case :ets.lookup(table, :impl) do
          [{:impl, value, _, _}] when value != false -> {env.line, false}
          _ -> {env.line, nil}
        end
    end
  end
