     end
   end
 
-  defp tag_option("no-" <> option = original, switches, allow_nonexistent_atoms?) do
+  defp tag_option("no-" <> option = original, %{switches: switches, allow_nonexistent_atoms?: allow_nonexistent_atoms?}) do
     cond do
       (negated = get_option_key(option, allow_nonexistent_atoms?)) && :boolean in List.wrap(switches[negated]) ->
         {:negated, negated}

  defp to_underscore(<<>>, acc),
    do: acc

  def get_option_key(option, allow_nonexistent_atoms?) do
    if string = to_underscore(option) do
      to_existing_key(string, allow_nonexistent_atoms?)
    end

    {Enum.reverse(opts), Enum.reverse(args), Enum.reverse(invalid)}
  end

  defp do_parse(argv, %{switches: switches} = config, opts, args, invalid, all?) do
    case next_with_config(argv, config) do
      {:ok, option, value, rest} ->
        # the option exists and it was successfully parsed
        kinds = List.wrap Keyword.get(switches, option)
