# AUTOMATICALLY GENERATED by `shtab`

_shtab_kas_subparsers=('build' 'checkout' 'clean' 'cleansstate' 'cleanall' 'purge' 'diff' 'dump' 'for-all-repos' 'lock' 'menu' 'shell')

_shtab_kas_option_strings=('-h' '--help' '--version' '-l' '--log-level')
_shtab_kas_build_option_strings=('-h' '--help' '--skip' '--force-checkout' '--update' '-k' '--keep-config-unchanged' '--target' '-c' '--cmd' '--task' '--provenance')
_shtab_kas_checkout_option_strings=('-h' '--help' '--skip' '--force-checkout' '--update')
_shtab_kas_clean_option_strings=('-h' '--help' '--dry-run' '--isar')
_shtab_kas_cleansstate_option_strings=('-h' '--help' '--dry-run' '--isar')
_shtab_kas_cleanall_option_strings=('-h' '--help' '--dry-run' '--isar')
_shtab_kas_purge_option_strings=('-h' '--help' '--dry-run' '--isar' '--preserve-repo-refs')
_shtab_kas_diff_option_strings=('-h' '--help' '--skip' '--force-checkout' '--update' '--format' '--oneline' '--no-color' '--commit-only' '--content-only')
_shtab_kas_dump_option_strings=('-h' '--help' '--skip' '--force-checkout' '--update' '--indent' '--sort' '--format' '--resolve-refs' '--resolve-local' '--resolve-env' '--lock')
_shtab_kas_for_all_repos_option_strings=('-h' '--help' '--skip' '--force-checkout' '--update' '-E' '--preserve-env' '-k' '--keep-config-unchanged')
_shtab_kas_lock_option_strings=('-h' '--help' '--skip' '--force-checkout' '--update' '--indent' '--sort')
_shtab_kas_menu_option_strings=('-h' '--help')
_shtab_kas_shell_option_strings=('-h' '--help' '--skip' '--force-checkout' '--update' '-E' '--preserve-env' '-k' '--keep-config-unchanged' '-c' '--command')



_shtab_kas_pos_0_choices=('build' 'checkout' 'clean' 'cleansstate' 'cleanall' 'purge' 'diff' 'dump' 'for-all-repos' 'lock' 'menu' 'shell')
_shtab_kas__l_choices=('debug' 'info' 'warning' 'error' 'critical')
_shtab_kas___log_level_choices=('debug' 'info' 'warning' 'error' 'critical')
_shtab_kas_build___skip_choices=('setup_dir' 'setup_home' 'init_setup_repos' 'repo_setup_loop' 'finish_setup_repos' 'repos_checkout' 'repos_check_signatures' 'repos_apply_patches' 'setup_environ' 'write_bbconfig')
_shtab_kas_build___provenance_choices=('true' 'mode=min' 'mode=max')
_shtab_kas_checkout___skip_choices=('setup_dir' 'setup_home' 'init_setup_repos' 'repo_setup_loop' 'finish_setup_repos' 'repos_checkout' 'repos_check_signatures' 'repos_apply_patches' 'setup_environ' 'write_bbconfig')
_shtab_kas_diff___skip_choices=('setup_dir' 'setup_home' 'init_setup_repos' 'repo_setup_loop' 'finish_setup_repos' 'repos_checkout' 'repos_check_signatures' 'repos_apply_patches' 'setup_environ' 'write_bbconfig')
_shtab_kas_diff___format_choices=('json' 'text')
_shtab_kas_dump___skip_choices=('setup_dir' 'setup_home' 'init_setup_repos' 'repo_setup_loop' 'finish_setup_repos' 'repos_checkout' 'repos_check_signatures' 'repos_apply_patches' 'setup_environ' 'write_bbconfig')
_shtab_kas_dump___format_choices=('yaml' 'json')
_shtab_kas_for_all_repos___skip_choices=('setup_dir' 'setup_home' 'init_setup_repos' 'repo_setup_loop' 'finish_setup_repos' 'repos_checkout' 'repos_check_signatures' 'repos_apply_patches' 'setup_environ' 'write_bbconfig')
_shtab_kas_lock___skip_choices=('setup_dir' 'setup_home' 'init_setup_repos' 'repo_setup_loop' 'finish_setup_repos' 'repos_checkout' 'repos_check_signatures' 'repos_apply_patches' 'setup_environ' 'write_bbconfig')
_shtab_kas_shell___skip_choices=('setup_dir' 'setup_home' 'init_setup_repos' 'repo_setup_loop' 'finish_setup_repos' 'repos_checkout' 'repos_check_signatures' 'repos_apply_patches' 'setup_environ' 'write_bbconfig')

_shtab_kas_pos_0_nargs=A...
_shtab_kas__h_nargs=0
_shtab_kas___help_nargs=0
_shtab_kas___version_nargs=0
_shtab_kas_build_pos_1_nargs=*
_shtab_kas_build__h_nargs=0
_shtab_kas_build___help_nargs=0
_shtab_kas_build___force_checkout_nargs=0
_shtab_kas_build___update_nargs=0
_shtab_kas_build__k_nargs=0
_shtab_kas_build___keep_config_unchanged_nargs=0
_shtab_kas_checkout__h_nargs=0
_shtab_kas_checkout___help_nargs=0
_shtab_kas_checkout___force_checkout_nargs=0
_shtab_kas_checkout___update_nargs=0
_shtab_kas_clean__h_nargs=0
_shtab_kas_clean___help_nargs=0
_shtab_kas_clean___dry_run_nargs=0
_shtab_kas_clean___isar_nargs=0
_shtab_kas_cleansstate__h_nargs=0
_shtab_kas_cleansstate___help_nargs=0
_shtab_kas_cleansstate___dry_run_nargs=0
_shtab_kas_cleansstate___isar_nargs=0
_shtab_kas_cleanall__h_nargs=0
_shtab_kas_cleanall___help_nargs=0
_shtab_kas_cleanall___dry_run_nargs=0
_shtab_kas_cleanall___isar_nargs=0
_shtab_kas_purge__h_nargs=0
_shtab_kas_purge___help_nargs=0
_shtab_kas_purge___dry_run_nargs=0
_shtab_kas_purge___isar_nargs=0
_shtab_kas_purge___preserve_repo_refs_nargs=0
_shtab_kas_diff__h_nargs=0
_shtab_kas_diff___help_nargs=0
_shtab_kas_diff___force_checkout_nargs=0
_shtab_kas_diff___update_nargs=0
_shtab_kas_diff___oneline_nargs=0
_shtab_kas_diff___no_color_nargs=0
_shtab_kas_diff___commit_only_nargs=0
_shtab_kas_diff___content_only_nargs=0
_shtab_kas_dump__h_nargs=0
_shtab_kas_dump___help_nargs=0
_shtab_kas_dump___force_checkout_nargs=0
_shtab_kas_dump___update_nargs=0
_shtab_kas_dump___sort_nargs=0
_shtab_kas_dump___resolve_refs_nargs=0
_shtab_kas_dump___resolve_local_nargs=0
_shtab_kas_dump___resolve_env_nargs=0
_shtab_kas_dump___lock_nargs=0
_shtab_kas_dump__i_nargs=0
_shtab_kas_dump___inplace_nargs=0
_shtab_kas_for_all_repos__h_nargs=0
_shtab_kas_for_all_repos___help_nargs=0
_shtab_kas_for_all_repos___force_checkout_nargs=0
_shtab_kas_for_all_repos___update_nargs=0
_shtab_kas_for_all_repos__E_nargs=0
_shtab_kas_for_all_repos___preserve_env_nargs=0
_shtab_kas_for_all_repos__k_nargs=0
_shtab_kas_for_all_repos___keep_config_unchanged_nargs=0
_shtab_kas_lock__h_nargs=0
_shtab_kas_lock___help_nargs=0
_shtab_kas_lock___force_checkout_nargs=0
_shtab_kas_lock___update_nargs=0
_shtab_kas_lock___sort_nargs=0
_shtab_kas_menu__h_nargs=0
_shtab_kas_menu___help_nargs=0
_shtab_kas_shell__h_nargs=0
_shtab_kas_shell___help_nargs=0
_shtab_kas_shell___force_checkout_nargs=0
_shtab_kas_shell___update_nargs=0
_shtab_kas_shell__E_nargs=0
_shtab_kas_shell___preserve_env_nargs=0
_shtab_kas_shell__k_nargs=0
_shtab_kas_shell___keep_config_unchanged_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_kas() {
  local completing_word="${COMP_WORDS[COMP_CWORD]}"
  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_kas
  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}") )
  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_kas kas
