# AUTOMATICALLY GENERATED by `shtab`

_shtab_b4_subparsers=('mbox' 'am' 'shazam' 'pr' 'ty' 'diff' 'kr' 'prep' 'trailers' 'send')

_shtab_b4_option_strings=('-h' '--help' '--version' '-d' '--debug' '-q' '--quiet' '-n' '--no-interactive' '--offline-mode' '--no-stdin' '-c' '--config')
_shtab_b4_mbox_option_strings=('-h' '--help' '-m' '--use-local-mbox' '--stdin-pipe-sep' '-C' '--no-cache' '--single-message' '-o' '--outdir' '-c' '--check-newer-revisions' '-n' '--mbox-name' '-M' '--save-as-maildir' '-f' '--filter-dupes' '-r' '--refetch' '--minimize')
_shtab_b4_am_option_strings=('-h' '--help' '-m' '--use-local-mbox' '--stdin-pipe-sep' '-C' '--no-cache' '--single-message' '-o' '--outdir' '-c' '--check-newer-revisions' '-n' '--mbox-name' '-M' '--save-as-maildir' '-v' '--use-version' '-t' '--apply-cover-trailers' '-S' '--sloppy-trailers' '-T' '--no-add-trailers' '-s' '--add-my-sob' '-P' '--cherry-pick' '-k' '--check' '--cc-trailers' '--no-parent' '--allow-unicode-control-chars' '-l' '--add-link' '-i' '--add-message-id' '-Q' '--quilt-ready' '-g' '--guess-base' '-b' '--guess-branch' '--guess-lookback' '-3' '--prep-3way' '--no-cover' '--no-partial-reroll')
_shtab_b4_shazam_option_strings=('-h' '--help' '-m' '--use-local-mbox' '--stdin-pipe-sep' '-C' '--no-cache' '--single-message' '-v' '--use-version' '-t' '--apply-cover-trailers' '-S' '--sloppy-trailers' '-T' '--no-add-trailers' '-s' '--add-my-sob' '-P' '--cherry-pick' '-k' '--check' '--cc-trailers' '--no-parent' '--allow-unicode-control-chars' '-l' '--add-link' '-i' '--add-message-id' '-H' '--make-fetch-head' '-M' '--merge' '--guess-lookback' '--merge-base')
_shtab_b4_pr_option_strings=('-h' '--help' '-g' '--gitdir' '-b' '--branch' '-c' '--check' '-e' '--explode' '-o' '--output-mbox' '-f' '--from-addr' '-s' '--send-as-identity' '--dry-run')
_shtab_b4_ty_option_strings=('-h' '--help' '-g' '--gitdir' '-o' '--outdir' '-l' '--list' '-t' '--thank-for' '-d' '--discard' '-a' '--auto' '-b' '--branch' '--since' '-S' '--send-email' '--dry-run' '--pw-set-state')
_shtab_b4_diff_option_strings=('-h' '--help' '-g' '--gitdir' '-C' '--no-cache' '-v' '--compare-versions' '-n' '--no-diff' '-o' '--output-diff' '-c' '--color' '-m' '--compare-am-mboxes')
_shtab_b4_kr_option_strings=('-h' '--help' '-m' '--use-local-mbox' '--stdin-pipe-sep' '-C' '--no-cache' '--single-message' '--show-keys')
_shtab_b4_prep_option_strings=('-h' '--help' '-c' '--auto-to-cc' '--force-revision' '--set-prefixes' '--add-prefixes' '-C' '--no-cache' '-p' '--format-patch' '--edit-cover' '--edit-deps' '--check-deps' '--check' '--show-revision' '--compare-to' '--manual-reroll' '--show-info' '--cleanup' '-n' '--new' '-f' '--fork-point' '-F' '--from-thread' '-e' '--enroll')
_shtab_b4_trailers_option_strings=('-h' '--help' '-u' '--update' '-S' '--sloppy-trailers' '-F' '--trailers-from' '--since' '--since-commit' '-m' '--use-local-mbox' '--stdin-pipe-sep' '-C' '--no-cache' '--single-message')
_shtab_b4_send_option_strings=('-h' '--help' '-d' '--dry-run' '-o' '--output-dir' '--preview-to' '--reflect' '--no-trailer-to-cc' '--to' '--cc' '--not-me-too' '--resend' '--no-sign' '--use-web-endpoint' '--web-auth-new' '--web-auth-verify')



_shtab_b4_pos_0_choices=('mbox' 'am' 'shazam' 'pr' 'ty' 'diff' 'kr' 'prep' 'trailers' 'send')

_shtab_b4_pos_0_nargs=A...
_shtab_b4__h_nargs=0
_shtab_b4___help_nargs=0
_shtab_b4___version_nargs=0
_shtab_b4__d_nargs=0
_shtab_b4___debug_nargs=0
_shtab_b4__q_nargs=0
_shtab_b4___quiet_nargs=0
_shtab_b4__n_nargs=0
_shtab_b4___no_interactive_nargs=0
_shtab_b4___offline_mode_nargs=0
_shtab_b4___no_stdin_nargs=0
_shtab_b4_mbox__h_nargs=0
_shtab_b4_mbox___help_nargs=0
_shtab_b4_mbox__C_nargs=0
_shtab_b4_mbox___no_cache_nargs=0
_shtab_b4_mbox___single_message_nargs=0
_shtab_b4_mbox__c_nargs=0
_shtab_b4_mbox___check_newer_revisions_nargs=0
_shtab_b4_mbox__M_nargs=0
_shtab_b4_mbox___save_as_maildir_nargs=0
_shtab_b4_mbox__f_nargs=0
_shtab_b4_mbox___filter_dupes_nargs=0
_shtab_b4_mbox___minimize_nargs=0
_shtab_b4_am__h_nargs=0
_shtab_b4_am___help_nargs=0
_shtab_b4_am__C_nargs=0
_shtab_b4_am___no_cache_nargs=0
_shtab_b4_am___single_message_nargs=0
_shtab_b4_am__c_nargs=0
_shtab_b4_am___check_newer_revisions_nargs=0
_shtab_b4_am__M_nargs=0
_shtab_b4_am___save_as_maildir_nargs=0
_shtab_b4_am__t_nargs=0
_shtab_b4_am___apply_cover_trailers_nargs=0
_shtab_b4_am__S_nargs=0
_shtab_b4_am___sloppy_trailers_nargs=0
_shtab_b4_am__T_nargs=0
_shtab_b4_am___no_add_trailers_nargs=0
_shtab_b4_am__s_nargs=0
_shtab_b4_am___add_my_sob_nargs=0
_shtab_b4_am__k_nargs=0
_shtab_b4_am___check_nargs=0
_shtab_b4_am___cc_trailers_nargs=0
_shtab_b4_am___no_parent_nargs=0
_shtab_b4_am___allow_unicode_control_chars_nargs=0
_shtab_b4_am__l_nargs=0
_shtab_b4_am___add_link_nargs=0
_shtab_b4_am__i_nargs=0
_shtab_b4_am___add_message_id_nargs=0
_shtab_b4_am__Q_nargs=0
_shtab_b4_am___quilt_ready_nargs=0
_shtab_b4_am__g_nargs=0
_shtab_b4_am___guess_base_nargs=0
_shtab_b4_am__b_nargs=+
_shtab_b4_am___guess_branch_nargs=+
_shtab_b4_am__3_nargs=0
_shtab_b4_am___prep_3way_nargs=0
_shtab_b4_am___no_cover_nargs=0
_shtab_b4_am___no_partial_reroll_nargs=0
_shtab_b4_shazam__h_nargs=0
_shtab_b4_shazam___help_nargs=0
_shtab_b4_shazam__C_nargs=0
_shtab_b4_shazam___no_cache_nargs=0
_shtab_b4_shazam___single_message_nargs=0
_shtab_b4_shazam__t_nargs=0
_shtab_b4_shazam___apply_cover_trailers_nargs=0
_shtab_b4_shazam__S_nargs=0
_shtab_b4_shazam___sloppy_trailers_nargs=0
_shtab_b4_shazam__T_nargs=0
_shtab_b4_shazam___no_add_trailers_nargs=0
_shtab_b4_shazam__s_nargs=0
_shtab_b4_shazam___add_my_sob_nargs=0
_shtab_b4_shazam__k_nargs=0
_shtab_b4_shazam___check_nargs=0
_shtab_b4_shazam___cc_trailers_nargs=0
_shtab_b4_shazam___no_parent_nargs=0
_shtab_b4_shazam___allow_unicode_control_chars_nargs=0
_shtab_b4_shazam__l_nargs=0
_shtab_b4_shazam___add_link_nargs=0
_shtab_b4_shazam__i_nargs=0
_shtab_b4_shazam___add_message_id_nargs=0
_shtab_b4_shazam__H_nargs=0
_shtab_b4_shazam___make_fetch_head_nargs=0
_shtab_b4_shazam__M_nargs=0
_shtab_b4_shazam___merge_nargs=0
_shtab_b4_pr__h_nargs=0
_shtab_b4_pr___help_nargs=0
_shtab_b4_pr__c_nargs=0
_shtab_b4_pr___check_nargs=0
_shtab_b4_pr__e_nargs=0
_shtab_b4_pr___explode_nargs=0
_shtab_b4_pr___dry_run_nargs=0
_shtab_b4_ty__h_nargs=0
_shtab_b4_ty___help_nargs=0
_shtab_b4_ty__l_nargs=0
_shtab_b4_ty___list_nargs=0
_shtab_b4_ty__a_nargs=0
_shtab_b4_ty___auto_nargs=0
_shtab_b4_ty__S_nargs=0
_shtab_b4_ty___send_email_nargs=0
_shtab_b4_ty___dry_run_nargs=0
_shtab_b4_diff__h_nargs=0
_shtab_b4_diff___help_nargs=0
_shtab_b4_diff__C_nargs=0
_shtab_b4_diff___no_cache_nargs=0
_shtab_b4_diff__v_nargs=+
_shtab_b4_diff___compare_versions_nargs=+
_shtab_b4_diff__n_nargs=0
_shtab_b4_diff___no_diff_nargs=0
_shtab_b4_diff__c_nargs=0
_shtab_b4_diff___color_nargs=0
_shtab_b4_diff__m_nargs=2
_shtab_b4_diff___compare_am_mboxes_nargs=2
_shtab_b4_kr__h_nargs=0
_shtab_b4_kr___help_nargs=0
_shtab_b4_kr__C_nargs=0
_shtab_b4_kr___no_cache_nargs=0
_shtab_b4_kr___single_message_nargs=0
_shtab_b4_kr___show_keys_nargs=0
_shtab_b4_prep__h_nargs=0
_shtab_b4_prep___help_nargs=0
_shtab_b4_prep__c_nargs=0
_shtab_b4_prep___auto_to_cc_nargs=0
_shtab_b4_prep___set_prefixes_nargs=+
_shtab_b4_prep___add_prefixes_nargs=+
_shtab_b4_prep__C_nargs=0
_shtab_b4_prep___no_cache_nargs=0
_shtab_b4_prep___edit_cover_nargs=0
_shtab_b4_prep___edit_deps_nargs=0
_shtab_b4_prep___check_deps_nargs=0
_shtab_b4_prep___check_nargs=0
_shtab_b4_prep___show_revision_nargs=0
_shtab_b4_prep___show_info_nargs=?
_shtab_b4_prep___cleanup_nargs=?
_shtab_b4_prep__e_nargs=?
_shtab_b4_prep___enroll_nargs=?
_shtab_b4_trailers__h_nargs=0
_shtab_b4_trailers___help_nargs=0
_shtab_b4_trailers__u_nargs=0
_shtab_b4_trailers___update_nargs=0
_shtab_b4_trailers__S_nargs=0
_shtab_b4_trailers___sloppy_trailers_nargs=0
_shtab_b4_trailers__C_nargs=0
_shtab_b4_trailers___no_cache_nargs=0
_shtab_b4_trailers___single_message_nargs=0
_shtab_b4_send__h_nargs=0
_shtab_b4_send___help_nargs=0
_shtab_b4_send__d_nargs=0
_shtab_b4_send___dry_run_nargs=0
_shtab_b4_send___preview_to_nargs=+
_shtab_b4_send___reflect_nargs=0
_shtab_b4_send___no_trailer_to_cc_nargs=0
_shtab_b4_send___to_nargs=+
_shtab_b4_send___cc_nargs=+
_shtab_b4_send___not_me_too_nargs=0
_shtab_b4_send___resend_nargs=?
_shtab_b4_send___no_sign_nargs=0
_shtab_b4_send___use_web_endpoint_nargs=0
_shtab_b4_send___web_auth_new_nargs=0


# $1=COMP_WORDS[1]
_shtab_compgen_files() {
  compgen -f -- $1  # files
}

# $1=COMP_WORDS[1]
_shtab_compgen_dirs() {
  compgen -d -- $1  # recurse into subdirs
}

# $1=COMP_WORDS[1]
_shtab_replace_nonword() {
  echo "${1//[^[:word:]]/_}"
}

# set default values (called for the initial parser & any subparsers)
_set_parser_defaults() {
  local subparsers_var="${prefix}_subparsers[@]"
  sub_parsers=${!subparsers_var-}

  local current_option_strings_var="${prefix}_option_strings[@]"
  current_option_strings=${!current_option_strings_var}

  completed_positional_actions=0

  _set_new_action "pos_${completed_positional_actions}" true
}

# $1=action identifier
# $2=positional action (bool)
# set all identifiers for an action's parameters
_set_new_action() {
  current_action="${prefix}_$(_shtab_replace_nonword $1)"

  local current_action_compgen_var=${current_action}_COMPGEN
  current_action_compgen="${!current_action_compgen_var-}"

  local current_action_choices_var="${current_action}_choices[@]"
  current_action_choices="${!current_action_choices_var-}"

  local current_action_nargs_var="${current_action}_nargs"
  if [ -n "${!current_action_nargs_var-}" ]; then
    current_action_nargs="${!current_action_nargs_var}"
  else
    current_action_nargs=1
  fi

  current_action_args_start_index=$(( $word_index + 1 - $pos_only ))

  current_action_is_positional=$2
}

# Notes:
# `COMPREPLY`: what will be rendered after completion is triggered
# `completing_word`: currently typed word to generate completions for
# `${!var}`: evaluates the content of `var` and expand its content as a variable
#     hello="world"
#     x="hello"
#     ${!x} -> ${hello} -> "world"
_shtab_b4() {
  local completing_word="${COMP_WORDS[COMP_CWORD]}"
  local previous_word="${COMP_WORDS[COMP_CWORD-1]}"
  local completed_positional_actions
  local current_action
  local current_action_args_start_index
  local current_action_choices
  local current_action_compgen
  local current_action_is_positional
  local current_action_nargs
  local current_option_strings
  local sub_parsers
  COMPREPLY=()

  local prefix=_shtab_b4
  local word_index=0
  local pos_only=0 # "--" delimeter not encountered yet
  _set_parser_defaults
  word_index=1

  # determine what arguments are appropriate for the current state
  # of the arg parser
  while [ $word_index -ne $COMP_CWORD ]; do
    local this_word="${COMP_WORDS[$word_index]}"

    if [[ $pos_only = 1 || " $this_word " != " -- " ]]; then
      if [[ -n $sub_parsers && " ${sub_parsers[@]} " == *" ${this_word} "* ]]; then
        # valid subcommand: add it to the prefix & reset the current action
        prefix="${prefix}_$(_shtab_replace_nonword $this_word)"
        _set_parser_defaults
      fi

      if [[ " ${current_option_strings[@]} " == *" ${this_word} "* ]]; then
        # a new action should be acquired (due to recognised option string or
        # no more input expected from current action);
        # the next positional action can fill in here
        _set_new_action $this_word false
      fi

      if [[ "$current_action_nargs" != "*" ]] && \
         [[ "$current_action_nargs" != "+" ]] && \
         [[ "$current_action_nargs" != *"..." ]] && \
         (( $word_index + 1 - $current_action_args_start_index - $pos_only >= \
            $current_action_nargs )); then
        $current_action_is_positional && let "completed_positional_actions += 1"
        _set_new_action "pos_${completed_positional_actions}" true
      fi
    else
      pos_only=1 # "--" delimeter encountered
    fi

    let "word_index+=1"
  done

  # Generate the completions

  if [[ $pos_only = 0 && "${completing_word}" == -* ]]; then
    # optional argument started: use option strings
    COMPREPLY=( $(compgen -W "${current_option_strings[*]}" -- "${completing_word}") )
  elif [[ "${previous_word}" == ">" || "${previous_word}" == ">>" ||
          "${previous_word}" =~ ^[12]">" || "${previous_word}" =~ ^[12]">>" ]]; then
    # handle redirection operators
    COMPREPLY=( $(compgen -f -- "${completing_word}") )
  else
    # use choices & compgen
    local IFS=$'\n' # items may contain spaces, so delimit using newline
    COMPREPLY=( $([ -n "${current_action_compgen}" ] \
                  && "${current_action_compgen}" "${completing_word}") )
    unset IFS
    COMPREPLY+=( $(compgen -W "${current_action_choices[*]}" -- "${completing_word}") )
  fi

  return 0
}

complete -o filenames -F _shtab_b4 b4
