     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}


  ## Helpers

  defp compile_config(opts) do
    aliases = opts[:aliases] || []
    allow_nonexistent_atoms? = opts[:allow_nonexistent_atoms] || false

    {switches, strict?} = cond do
      opts[:switches] && opts[:strict] ->
        raise ArgumentError, ":switches and :strict cannot be given together"

        option_key = aliases[key]
        if key && option_key do
          IO.warn "multi-letter aliases are deprecated, got: #{inspect(key)}"
          next_tagged({:default, option_key}, value, original, rest, config)
        else
          next_with_config(expand_multiletter_alias(option, value) ++ rest, config)
        end
      true ->
        # We have a regular one-letter alias here
        tagged = tag_oneletter_alias(option, config)
        next_tagged(tagged, value, original, rest, config)
    end
  end

  defp next_with_config(argv, _config) do
    {:error, argv}
  end

  defp next_tagged(tagged, value, original, rest, %{switches: switches, strict?: strict?}) do
    if strict? and not option_defined?(tagged, switches) do
      {:undefined, original, value, rest}
    else
