# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) # NOTE: spack-completion.bash is auto-generated by: # # $ spack commands --aliases --format=bash # --header=bash/spack-completion.bash --update=spack-completion.bash # # Please do not manually modify this file. # The following global variables are set by Bash programmable completion: # # COMP_CWORD: An index into ${COMP_WORDS} of the word containing the # current cursor position # COMP_KEY: The key (or final key of a key sequence) used to invoke # the current completion function # COMP_LINE: The current command line # COMP_POINT: The index of the current cursor position relative to the # beginning of the current command # COMP_TYPE: Set to an integer value corresponding to the type of # completion attempted that caused a completion function # to be called # COMP_WORDBREAKS: The set of characters that the readline library treats # as word separators when performing word completion # COMP_WORDS: An array variable consisting of the individual words in # the current command line # # The following global variable is used by Bash programmable completion: # # COMPREPLY: An array variable from which bash reads the possible # completions generated by a shell function invoked by the # programmable completion facility # # See `man bash` for more details. if test -n "${ZSH_VERSION:-}" ; then if [[ "$(emulate)" = zsh ]] ; then if ! typeset -f compdef >& /dev/null ; then # ensure base completion support is enabled, ignore insecure directories autoload -U +X compinit && compinit -i fi if ! typeset -f complete >& /dev/null ; then # ensure bash compatible completion support is enabled autoload -U +X bashcompinit && bashcompinit fi emulate sh -c "source '$0:A'" return # stop interpreting file fi fi # compgen -W doesn't work in some versions of zsh, so use this instead. # see https://www.zsh.org/mla/workers/2011/msg00582.html _compgen_w() { if test -n "${ZSH_VERSION:-}" ; then typeset -a words words=( ${~=1} ) local find="$2" results=(${(M)words[@]:#$find*}) echo "${results[@]}" else compgen -W "$1" -- "$2" fi } # Bash programmable completion for Spack _bash_completion_spack() { # In all following examples, let the cursor be denoted by brackets, i.e. [] # For our purposes, flags should not affect tab completion. For instance, # `spack install []` and `spack -d install --jobs 8 []` should both give the same # possible completions. Therefore, we need to ignore any flags in COMP_WORDS. local -a COMP_WORDS_NO_FLAGS local index=0 while [[ "$index" -lt "$COMP_CWORD" ]] do if [[ "${COMP_WORDS[$index]}" == [a-z]* ]] then COMP_WORDS_NO_FLAGS+=("${COMP_WORDS[$index]}") fi let index++ done # Options will be listed by a subfunction named after non-flag arguments. # For example, `spack -d install []` will call _spack_install # and `spack compiler add []` will call _spack_compiler_add local subfunction=$(IFS='_'; echo "_${COMP_WORDS_NO_FLAGS[*]}") # Translate dashes to underscores, as dashes are not permitted in # compatibility mode. See https://github.com/spack/spack/pull/4079 subfunction=${subfunction//-/_} # However, the word containing the current cursor position needs to be # added regardless of whether or not it is a flag. This allows us to # complete something like `spack install --keep-st[]` COMP_WORDS_NO_FLAGS+=("${COMP_WORDS[$COMP_CWORD]}") # Since we have removed all words after COMP_CWORD, we can safely assume # that COMP_CWORD_NO_FLAGS is simply the index of the last element local COMP_CWORD_NO_FLAGS=$((${#COMP_WORDS_NO_FLAGS[@]} - 1)) # There is no guarantee that the cursor is at the end of the command line # when tab completion is envoked. For example, in the following situation: # `spack -d [] install` # if the user presses the TAB key, a list of valid flags should be listed. # Note that we cannot simply ignore everything after the cursor. In the # previous scenario, the user should expect to see a list of flags, but # not of other subcommands. Obviously, `spack -d list install` would be # invalid syntax. To accomplish this, we use the variable list_options # which is true if the current word starts with '-' or if the cursor is # not at the end of the line. local list_options=false if [[ "${COMP_WORDS[$COMP_CWORD]}" == -* || "$COMP_POINT" -ne "${#COMP_LINE}" ]] then list_options=true fi # In general, when envoking tab completion, the user is not expecting to # see optional flags mixed in with subcommands or package names. Tab # completion is used by those who are either lazy or just bad at spelling. # If someone doesn't remember what flag to use, seeing single letter flags # in their results won't help them, and they should instead consult the # documentation. However, if the user explicitly declares that they are # looking for a flag, we can certainly help them out. # `spack install -[]` # and # `spack install --[]` # should list all flags and long flags, respectively. Furthermore, if a # subcommand has no non-flag completions, such as `spack arch []`, it # should list flag completions. local cur=${COMP_WORDS_NO_FLAGS[$COMP_CWORD_NO_FLAGS]} # If the cursor is in the middle of the line, like: # `spack -d [] install` # COMP_WORDS will not contain the empty character, so we have to add it. if [[ "${COMP_LINE:$COMP_POINT-1:1}" == " " ]] then cur="" fi # Uncomment this line to enable logging #_test_vars >> temp # Make sure function exists before calling it local rgx #this dance is necessary to cover bash and zsh regex rgx="$subfunction.*function.* " if [[ "$(LC_ALL=C type $subfunction 2>&1)" =~ $rgx ]] then $subfunction COMPREPLY=($(_compgen_w "$SPACK_COMPREPLY" "$cur")) fi # if every completion is an alias for the same thing, just return that thing. _spack_compress_aliases } # Helper functions for subcommands # Results of each query are cached via environment variables _subcommands() { if [[ -z "${SPACK_SUBCOMMANDS:-}" ]] then SPACK_SUBCOMMANDS="$(spack commands)" fi SPACK_COMPREPLY="$SPACK_SUBCOMMANDS" } _all_packages() { if [[ -z "${SPACK_ALL_PACKAGES:-}" ]] then SPACK_ALL_PACKAGES="$(spack list)" fi SPACK_COMPREPLY="$SPACK_ALL_PACKAGES" } _all_resource_hashes() { if [[ -z "${SPACK_ALL_RESOURCES_HASHES:-}" ]] then SPACK_ALL_RESOURCE_HASHES="$(spack resource list --only-hashes)" fi SPACK_COMPREPLY="$SPACK_ALL_RESOURCE_HASHES" } _installed_packages() { if [[ -z "${SPACK_INSTALLED_PACKAGES:-}" ]] then SPACK_INSTALLED_PACKAGES="$(spack --color=never find --no-groups)" fi SPACK_COMPREPLY="$SPACK_INSTALLED_PACKAGES" } _installed_compilers() { if [[ -z "${SPACK_INSTALLED_COMPILERS:-}" ]] then SPACK_INSTALLED_COMPILERS="$(spack compilers | egrep -v "^(-|=)")" fi SPACK_COMPREPLY="$SPACK_INSTALLED_COMPILERS" } _providers() { if [[ -z "${SPACK_PROVIDERS:-}" ]] then SPACK_PROVIDERS="$(spack providers)" fi SPACK_COMPREPLY="$SPACK_PROVIDERS" } _mirrors() { if [[ -z "${SPACK_MIRRORS:-}" ]] then SPACK_MIRRORS="$(spack mirror list | awk '{print $1}')" fi SPACK_COMPREPLY="$SPACK_MIRRORS" } _repos() { if [[ -z "${SPACK_REPOS:-}" ]] then SPACK_REPOS="$(spack repo list | awk '{print $1}')" fi SPACK_COMPREPLY="$SPACK_REPOS" } _unit_tests() { if [[ -z "${SPACK_TESTS:-}" ]] then SPACK_TESTS="$(spack unit-test -l)" fi SPACK_COMPREPLY="$SPACK_TESTS" } _environments() { if [[ -z "${SPACK_ENVIRONMENTS:-}" ]] then SPACK_ENVIRONMENTS="$(spack env list)" fi SPACK_COMPREPLY="$SPACK_ENVIRONMENTS" } _keys() { if [[ -z "${SPACK_KEYS:-}" ]] then SPACK_KEYS="$(spack gpg list)" fi SPACK_COMPREPLY="$SPACK_KEYS" } _config_sections() { if [[ -z "${SPACK_CONFIG_SECTIONS:-}" ]] then SPACK_CONFIG_SECTIONS="$(spack config list)" fi SPACK_COMPREPLY="$SPACK_CONFIG_SECTIONS" } _extensions() { if [[ -z "${SPACK_EXTENSIONS:-}" ]] then SPACK_EXTENSIONS="$(spack extensions)" fi SPACK_COMPREPLY="$SPACK_EXTENSIONS" } # Testing functions # Function for unit testing tab completion # Syntax: _spack_completions spack install py- _spack_completions() { local COMP_CWORD COMP_KEY COMP_LINE COMP_POINT COMP_TYPE COMP_WORDS COMPREPLY # Set each variable the way bash would COMP_LINE="$*" COMP_POINT=${#COMP_LINE} COMP_WORDS=("$@") if [[ ${COMP_LINE: -1} == ' ' ]] then COMP_WORDS+=('') fi COMP_CWORD=$((${#COMP_WORDS[@]} - 1)) COMP_KEY=9 # ASCII 09: Horizontal Tab COMP_TYPE=64 # ASCII 64: '@', to list completions if the word is not unmodified # Run Spack's tab completion function _bash_completion_spack # Return the result echo "${COMPREPLY[@]:-}" } # Log the environment variables used # Syntax: _test_vars >> temp _test_vars() { echo "-----------------------------------------------------" echo "Variables set by bash:" echo echo "COMP_LINE: '$COMP_LINE'" echo "# COMP_LINE: '${#COMP_LINE}'" echo "COMP_WORDS: $(_pretty_print COMP_WORDS[@])" echo "# COMP_WORDS: '${#COMP_WORDS[@]}'" echo "COMP_CWORD: '$COMP_CWORD'" echo "COMP_KEY: '$COMP_KEY'" echo "COMP_POINT: '$COMP_POINT'" echo "COMP_TYPE: '$COMP_TYPE'" echo "COMP_WORDBREAKS: '$COMP_WORDBREAKS'" echo echo "Intermediate variables:" echo echo "COMP_WORDS_NO_FLAGS: $(_pretty_print COMP_WORDS_NO_FLAGS[@])" echo "# COMP_WORDS_NO_FLAGS: '${#COMP_WORDS_NO_FLAGS[@]}'" echo "COMP_CWORD_NO_FLAGS: '$COMP_CWORD_NO_FLAGS'" echo echo "Subfunction: '$subfunction'" if $list_options then echo "List options: 'True'" else echo "List options: 'False'" fi echo "Current word: '$cur'" } # Pretty-prints one or more arrays # Syntax: _pretty_print array1[@] ... _pretty_print() { for arg in $@ do local array=("${!arg}") printf "$arg: [" printf "'%s'" "${array[0]}" printf ", '%s'" "${array[@]:1}" echo "]" done } complete -o bashdefault -o default -F _bash_completion_spack spack # Completion for spacktivate complete -o bashdefault -o default -F _bash_completion_spack spacktivate _spacktivate() { _spack_env_activate } # Simple function to get the spack alias for a command _spack_get_alias() { local possible_alias="${1-}" local IFS=";" # spack aliases are a ;-separated list of :-separated pairs for item in $SPACK_ALIASES; do # maps a possible alias to its command eval "local real_command=\"\${item#*${possible_alias}:}\"" if [ "$real_command" != "$item" ]; then SPACK_ALIAS="$real_command" return fi done # no alias found -- just return $1 SPACK_ALIAS="$possible_alias" } # If all commands in COMPREPLY alias to the same thing, set COMPREPLY to # just the real command, not the aliases. _spack_compress_aliases() { # If there are zero or one completions, don't do anything # If this isn't the first argument, bail because aliases currently only apply # to top-level commands. if [ "${#COMPREPLY[@]}" -le "1" ] || [ "$COMP_CWORD_NO_FLAGS" != "1" ]; then return fi # get the alias of the first thing in the list of completions _spack_get_alias "${COMPREPLY[@]:0:1}" local first_alias="$SPACK_ALIAS" # if anything in the list would alias to something different, stop for comp in "${COMPREPLY[@]:1}"; do _spack_get_alias "$comp" if [ "$SPACK_ALIAS" != "$first_alias" ]; then return fi done # all commands alias to first alias; just return that COMPREPLY=("$first_alias") } # Spack commands # # Everything below here is auto-generated. SPACK_ALIASES="concretise:concretize;containerise:containerize;rm:remove" _spack() { if $list_options then SPACK_COMPREPLY="-h --help -H --all-help --color -c --config -C --config-scope -d --debug --timestamp --pdb -e --env -D --env-dir -E --no-env --use-env-repo -k --insecure -l --enable-locks -L --disable-locks -m --mock -b --bootstrap -p --profile --sorted-profile --lines -v --verbose --stacktrace --backtrace -V --version --print-shell-vars" else SPACK_COMPREPLY="add arch audit blame bootstrap build-env buildcache cd change checksum ci clean clone commands compiler compilers concretize concretise config containerize containerise create debug deconcretize dependencies dependents deprecate dev-build develop diff docs edit env extensions external fetch find gc gpg graph help info install license list load location log-parse maintainers make-installer mark mirror module patch pkg providers pydoc python reindex remove rm repo resource restage solve spec stage style tags test test-env tutorial undevelop uninstall unit-test unload url verify versions view" fi } _spack_add() { if $list_options then SPACK_COMPREPLY="-h --help -l --list-name" else _all_packages fi } _spack_arch() { SPACK_COMPREPLY="-h --help -g --generic-target --known-targets -p --platform -o --operating-system -t --target -f --frontend -b --backend" } _spack_audit() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="configs externals packages-https packages list" fi } _spack_audit_configs() { SPACK_COMPREPLY="-h --help" } _spack_audit_externals() { if $list_options then SPACK_COMPREPLY="-h --help --list" else SPACK_COMPREPLY="" fi } _spack_audit_packages_https() { if $list_options then SPACK_COMPREPLY="-h --help --all" else SPACK_COMPREPLY="" fi } _spack_audit_packages() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_audit_list() { SPACK_COMPREPLY="-h --help" } _spack_blame() { if $list_options then SPACK_COMPREPLY="-h --help -t --time -p --percent -g --git --json" else _all_packages fi } _spack_bootstrap() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="now status enable disable reset root list add remove mirror" fi } _spack_bootstrap_now() { SPACK_COMPREPLY="-h --help --dev" } _spack_bootstrap_status() { SPACK_COMPREPLY="-h --help --optional --dev" } _spack_bootstrap_enable() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else SPACK_COMPREPLY="" fi } _spack_bootstrap_disable() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else SPACK_COMPREPLY="" fi } _spack_bootstrap_reset() { SPACK_COMPREPLY="-h --help -y --yes-to-all" } _spack_bootstrap_root() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else SPACK_COMPREPLY="" fi } _spack_bootstrap_list() { SPACK_COMPREPLY="-h --help --scope" } _spack_bootstrap_add() { if $list_options then SPACK_COMPREPLY="-h --help --scope --trust" else SPACK_COMPREPLY="" fi } _spack_bootstrap_remove() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_bootstrap_mirror() { if $list_options then SPACK_COMPREPLY="-h --help --binary-packages --dev" else SPACK_COMPREPLY="" fi } _spack_build_env() { if $list_options then SPACK_COMPREPLY="-h --help --clean --dirty -U --fresh --reuse --reuse-deps --dump --pickle" else _all_packages fi } _spack_buildcache() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="push create install list keys preview check download get-buildcache-name save-specfile sync update-index rebuild-index" fi } _spack_buildcache_push() { if $list_options then SPACK_COMPREPLY="-h --help -f --force --allow-root -a --unsigned -u --signed --key -k --update-index --rebuild-index --spec-file --only --fail-fast --base-image --tag -t -j --jobs" else _mirrors fi } _spack_buildcache_create() { if $list_options then SPACK_COMPREPLY="-h --help -f --force --allow-root -a --unsigned -u --signed --key -k --update-index --rebuild-index --spec-file --only --fail-fast --base-image --tag -t -j --jobs" else _mirrors fi } _spack_buildcache_install() { if $list_options then SPACK_COMPREPLY="-h --help -f --force -m --multiple -u --unsigned -o --otherarch" else _all_packages fi } _spack_buildcache_list() { if $list_options then SPACK_COMPREPLY="-h --help -l --long -L --very-long -N --namespaces -v --variants -a --allarch" else _all_packages fi } _spack_buildcache_keys() { SPACK_COMPREPLY="-h --help -i --install -t --trust -f --force" } _spack_buildcache_preview() { if $list_options then SPACK_COMPREPLY="-h --help" else _installed_packages fi } _spack_buildcache_check() { if $list_options then SPACK_COMPREPLY="-h --help -m --mirror-url -o --output-file --scope -s --spec --spec-file" else _all_packages fi } _spack_buildcache_download() { SPACK_COMPREPLY="-h --help -s --spec --spec-file -p --path" } _spack_buildcache_get_buildcache_name() { SPACK_COMPREPLY="-h --help -s --spec --spec-file" } _spack_buildcache_save_specfile() { SPACK_COMPREPLY="-h --help --root-spec --root-specfile -s --specs --specfile-dir" } _spack_buildcache_sync() { if $list_options then SPACK_COMPREPLY="-h --help --manifest-glob" else SPACK_COMPREPLY="" fi } _spack_buildcache_update_index() { if $list_options then SPACK_COMPREPLY="-h --help -k --keys" else _mirrors fi } _spack_buildcache_rebuild_index() { if $list_options then SPACK_COMPREPLY="-h --help -k --keys" else _mirrors fi } _spack_cd() { if $list_options then SPACK_COMPREPLY="-h --help -m --module-dir -r --spack-root -i --install-dir -p --package-dir -P --packages -s --stage-dir -S --stages --source-dir -b --build-dir -e --env --first" else _all_packages fi } _spack_change() { if $list_options then SPACK_COMPREPLY="-h --help -l --list-name --match-spec -a --all" else _all_packages fi } _spack_checksum() { if $list_options then SPACK_COMPREPLY="-h --help --keep-stage --batch -b --latest -l --preferred -p --add-to-package -a --verify -j --jobs" else _all_packages fi } _spack_ci() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="generate rebuild-index rebuild reproduce-build" fi } _spack_ci_generate() { SPACK_COMPREPLY="-h --help --output-file --copy-to --optimize --dependencies --buildcache-destination --prune-dag --no-prune-dag --check-index-only --artifacts-root" } _spack_ci_rebuild_index() { SPACK_COMPREPLY="-h --help" } _spack_ci_rebuild() { SPACK_COMPREPLY="-h --help -t --tests --fail-fast" } _spack_ci_reproduce_build() { if $list_options then SPACK_COMPREPLY="-h --help --runtime --working-dir -s --autostart --gpg-file --gpg-url" else SPACK_COMPREPLY="" fi } _spack_clean() { if $list_options then SPACK_COMPREPLY="-h --help -s --stage -d --downloads -f --failures -m --misc-cache -p --python-cache -b --bootstrap -a --all" else _all_packages fi } _spack_clone() { if $list_options then SPACK_COMPREPLY="-h --help -r --remote" else SPACK_COMPREPLY="" fi } _spack_commands() { if $list_options then SPACK_COMPREPLY="-h --help --update-completion -a --aliases --format --header --update" else SPACK_COMPREPLY="" fi } _spack_compiler() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="find add remove rm list info" fi } _spack_compiler_find() { if $list_options then SPACK_COMPREPLY="-h --help --mixed-toolchain --no-mixed-toolchain --scope" else SPACK_COMPREPLY="" fi } _spack_compiler_add() { if $list_options then SPACK_COMPREPLY="-h --help --mixed-toolchain --no-mixed-toolchain --scope" else SPACK_COMPREPLY="" fi } _spack_compiler_remove() { if $list_options then SPACK_COMPREPLY="-h --help -a --all --scope" else _installed_compilers fi } _spack_compiler_rm() { if $list_options then SPACK_COMPREPLY="-h --help -a --all --scope" else _installed_compilers fi } _spack_compiler_list() { SPACK_COMPREPLY="-h --help --scope" } _spack_compiler_info() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else _installed_compilers fi } _spack_compilers() { SPACK_COMPREPLY="-h --help --scope" } _spack_concretize() { SPACK_COMPREPLY="-h --help -f --force --test -q --quiet -U --fresh --reuse --reuse-deps -j --jobs" } _spack_concretise() { SPACK_COMPREPLY="-h --help -f --force --test -q --quiet -U --fresh --reuse --reuse-deps -j --jobs" } _spack_config() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else SPACK_COMPREPLY="get blame edit list add prefer-upstream remove rm update revert" fi } _spack_config_get() { if $list_options then SPACK_COMPREPLY="-h --help" else _config_sections fi } _spack_config_blame() { if $list_options then SPACK_COMPREPLY="-h --help" else _config_sections fi } _spack_config_edit() { if $list_options then SPACK_COMPREPLY="-h --help --print-file" else _config_sections fi } _spack_config_list() { SPACK_COMPREPLY="-h --help" } _spack_config_add() { if $list_options then SPACK_COMPREPLY="-h --help -f --file" else SPACK_COMPREPLY="" fi } _spack_config_prefer_upstream() { SPACK_COMPREPLY="-h --help --local" } _spack_config_remove() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_config_rm() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_config_update() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else _config_sections fi } _spack_config_revert() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else _config_sections fi } _spack_containerize() { SPACK_COMPREPLY="-h --help --list-os --last-stage" } _spack_containerise() { SPACK_COMPREPLY="-h --help --list-os --last-stage" } _spack_create() { if $list_options then SPACK_COMPREPLY="-h --help --keep-stage -n --name -t --template -r --repo -N --namespace -f --force --skip-editor -b --batch" else SPACK_COMPREPLY="" fi } _spack_debug() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="create-db-tarball report" fi } _spack_debug_create_db_tarball() { SPACK_COMPREPLY="-h --help" } _spack_debug_report() { SPACK_COMPREPLY="-h --help" } _spack_deconcretize() { if $list_options then SPACK_COMPREPLY="-h --help --root -y --yes-to-all -a --all" else _all_packages fi } _spack_dependencies() { if $list_options then SPACK_COMPREPLY="-h --help -i --installed -t --transitive --deptype -V --no-expand-virtuals" else _all_packages fi } _spack_dependents() { if $list_options then SPACK_COMPREPLY="-h --help -i --installed -t --transitive" else _all_packages fi } _spack_deprecate() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all -d --dependencies -D --no-dependencies -i --install-deprecator -I --no-install-deprecator -l --link-type" else _all_packages fi } _spack_dev_build() { if $list_options then SPACK_COMPREPLY="-h --help -j --jobs -d --source-path -i --ignore-dependencies -n --no-checksum --deprecated --keep-prefix --skip-patch -q --quiet --drop-in --test -b --before -u --until --clean --dirty -U --fresh --reuse --reuse-deps" else _all_packages fi } _spack_develop() { if $list_options then SPACK_COMPREPLY="-h --help -p --path --no-clone --clone -f --force" else _all_packages fi } _spack_diff() { if $list_options then SPACK_COMPREPLY="-h --help --json --first -a --attribute --ignore" else _all_packages fi } _spack_docs() { SPACK_COMPREPLY="-h --help" } _spack_edit() { if $list_options then SPACK_COMPREPLY="-h --help -b --build-system -c --command -d --docs -t --test -m --module -r --repo -N --namespace" else _all_packages fi } _spack_env() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="activate deactivate create remove rm list ls status st loads view update revert depfile" fi } _spack_env_activate() { if $list_options then SPACK_COMPREPLY="-h --help --sh --csh --fish --bat --pwsh --with-view -v --without-view -V -p --prompt --temp -d --dir" else _environments fi } _spack_env_deactivate() { SPACK_COMPREPLY="-h --help --sh --csh --fish --bat --pwsh" } _spack_env_create() { if $list_options then SPACK_COMPREPLY="-h --help -d --dir --keep-relative --without-view --with-view" else _environments fi } _spack_env_remove() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else _environments fi } _spack_env_rm() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else _environments fi } _spack_env_list() { SPACK_COMPREPLY="-h --help" } _spack_env_ls() { SPACK_COMPREPLY="-h --help" } _spack_env_status() { SPACK_COMPREPLY="-h --help" } _spack_env_st() { SPACK_COMPREPLY="-h --help" } _spack_env_loads() { SPACK_COMPREPLY="-h --help -n --module-set-name -m --module-type --input-only -p --prefix -x --exclude -r --dependencies" } _spack_env_view() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_env_update() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else _environments fi } _spack_env_revert() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else _environments fi } _spack_env_depfile() { if $list_options then SPACK_COMPREPLY="-h --help --make-prefix --make-target-prefix --make-disable-jobserver --use-buildcache -o --output -G --generator" else _all_packages fi } _spack_extensions() { if $list_options then SPACK_COMPREPLY="-h --help -l --long -L --very-long -d --deps -p --paths -s --show" else _extensions fi } _spack_external() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="find list read-cray-manifest" fi } _spack_external_find() { if $list_options then SPACK_COMPREPLY="-h --help --not-buildable --exclude -p --path --scope --all -t --tag -j --jobs" else _all_packages fi } _spack_external_list() { SPACK_COMPREPLY="-h --help" } _spack_external_read_cray_manifest() { SPACK_COMPREPLY="-h --help --file --directory --ignore-default-dir --dry-run --fail-on-error" } _spack_fetch() { if $list_options then SPACK_COMPREPLY="-h --help -n --no-checksum --deprecated -m --missing -D --dependencies" else _all_packages fi } _spack_find() { if $list_options then SPACK_COMPREPLY="-h --help --format -H --hashes --json -d --deps -p --paths --groups --no-groups -l --long -L --very-long -t --tag -N --namespaces -c --show-concretized -f --show-flags --show-full-compiler -x --explicit -X --implicit -u --unknown -m --missing -v --variants --loaded -M --only-missing --deprecated --only-deprecated --start-date --end-date" else _installed_packages fi } _spack_gc() { SPACK_COMPREPLY="-h --help -E --except-any-environment -e --except-environment -b --keep-build-dependencies -y --yes-to-all" } _spack_gpg() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="verify trust untrust sign create list init export publish" fi } _spack_gpg_verify() { if $list_options then SPACK_COMPREPLY="-h --help" else _installed_packages fi } _spack_gpg_trust() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_gpg_untrust() { if $list_options then SPACK_COMPREPLY="-h --help --signing" else _keys fi } _spack_gpg_sign() { if $list_options then SPACK_COMPREPLY="-h --help --output --key --clearsign" else _installed_packages fi } _spack_gpg_create() { if $list_options then SPACK_COMPREPLY="-h --help --comment --expires --export --export-secret" else SPACK_COMPREPLY="" fi } _spack_gpg_list() { SPACK_COMPREPLY="-h --help --trusted --signing" } _spack_gpg_init() { SPACK_COMPREPLY="-h --help --from" } _spack_gpg_export() { if $list_options then SPACK_COMPREPLY="-h --help --secret" else _keys fi } _spack_gpg_publish() { if $list_options then SPACK_COMPREPLY="-h --help -d --directory -m --mirror-name --mirror-url --rebuild-index" else _keys fi } _spack_graph() { if $list_options then SPACK_COMPREPLY="-h --help -a --ascii -d --dot -s --static -c --color -i --installed --deptype" else _all_packages fi } _spack_help() { if $list_options then SPACK_COMPREPLY="-h --help -a --all --spec" else _subcommands fi } _spack_info() { if $list_options then SPACK_COMPREPLY="-h --help -a --all --detectable --maintainers --no-dependencies --no-variants --no-versions --phases --tags --tests --virtuals --variants-by-name" else _all_packages fi } _spack_install() { if $list_options then SPACK_COMPREPLY="-h --help --only -u --until -j --jobs --overwrite --fail-fast --keep-prefix --keep-stage --dont-restage --use-cache --no-cache --cache-only --use-buildcache --include-build-deps --no-check-signature --show-log-on-error --source -n --no-checksum --deprecated -v --verbose --fake --only-concrete --add --no-add -f --file --clean --dirty --test --log-format --log-file --help-cdash --cdash-upload-url --cdash-build --cdash-site --cdash-track --cdash-buildstamp -y --yes-to-all -U --fresh --reuse --reuse-deps" else _all_packages fi } _spack_license() { if $list_options then SPACK_COMPREPLY="-h --help --root" else SPACK_COMPREPLY="list-files verify update-copyright-year" fi } _spack_license_list_files() { SPACK_COMPREPLY="-h --help" } _spack_license_verify() { SPACK_COMPREPLY="-h --help" } _spack_license_update_copyright_year() { SPACK_COMPREPLY="-h --help" } _spack_list() { if $list_options then SPACK_COMPREPLY="-h --help -d --search-description --format -v --virtuals -t --tag --count --update" else _all_packages fi } _spack_load() { if $list_options then SPACK_COMPREPLY="-h --help --sh --csh --fish --bat --pwsh --first --only --list" else _installed_packages fi } _spack_location() { if $list_options then SPACK_COMPREPLY="-h --help -m --module-dir -r --spack-root -i --install-dir -p --package-dir -P --packages -s --stage-dir -S --stages --source-dir -b --build-dir -e --env --first" else _all_packages fi } _spack_log_parse() { if $list_options then SPACK_COMPREPLY="-h --help --show -c --context -p --profile -w --width -j --jobs" else SPACK_COMPREPLY="" fi } _spack_maintainers() { if $list_options then SPACK_COMPREPLY="-h --help --maintained --unmaintained -a --all --by-user" else _all_packages fi } _spack_make_installer() { if $list_options then SPACK_COMPREPLY="-h --help -v --spack-version -s --spack-source -g --git-installer-verbosity" else SPACK_COMPREPLY="" fi } _spack_mark() { if $list_options then SPACK_COMPREPLY="-h --help -a --all -e --explicit -i --implicit" else _installed_packages fi } _spack_mirror() { if $list_options then SPACK_COMPREPLY="-h --help -n --no-checksum --deprecated" else SPACK_COMPREPLY="create destroy add remove rm set-url set list" fi } _spack_mirror_create() { if $list_options then SPACK_COMPREPLY="-h --help -d --directory -a --all -f --file --exclude-file --exclude-specs --skip-unstable-versions -D --dependencies -n --versions-per-spec" else _all_packages fi } _spack_mirror_destroy() { SPACK_COMPREPLY="-h --help -m --mirror-name --mirror-url" } _spack_mirror_add() { if $list_options then SPACK_COMPREPLY="-h --help --scope --type --unsigned --signed --s3-access-key-id --s3-access-key-secret --s3-access-token --s3-profile --s3-endpoint-url --oci-username --oci-password" else _mirrors fi } _spack_mirror_remove() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else _mirrors fi } _spack_mirror_rm() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else _mirrors fi } _spack_mirror_set_url() { if $list_options then SPACK_COMPREPLY="-h --help --push --fetch --scope --s3-access-key-id --s3-access-key-secret --s3-access-token --s3-profile --s3-endpoint-url --oci-username --oci-password" else _mirrors fi } _spack_mirror_set() { if $list_options then SPACK_COMPREPLY="-h --help --push --fetch --type --url --unsigned --signed --scope --s3-access-key-id --s3-access-key-secret --s3-access-token --s3-profile --s3-endpoint-url --oci-username --oci-password" else _mirrors fi } _spack_mirror_list() { SPACK_COMPREPLY="-h --help --scope" } _spack_module() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="lmod tcl" fi } _spack_module_lmod() { if $list_options then SPACK_COMPREPLY="-h --help -n --name" else SPACK_COMPREPLY="refresh find rm loads setdefault" fi } _spack_module_lmod_refresh() { if $list_options then SPACK_COMPREPLY="-h --help --delete-tree --upstream-modules -y --yes-to-all" else _installed_packages fi } _spack_module_lmod_find() { if $list_options then SPACK_COMPREPLY="-h --help --full-path -r --dependencies" else _installed_packages fi } _spack_module_lmod_rm() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else _installed_packages fi } _spack_module_lmod_loads() { if $list_options then SPACK_COMPREPLY="-h --help --input-only -p --prefix -x --exclude -r --dependencies" else _installed_packages fi } _spack_module_lmod_setdefault() { if $list_options then SPACK_COMPREPLY="-h --help" else _installed_packages fi } _spack_module_tcl() { if $list_options then SPACK_COMPREPLY="-h --help -n --name" else SPACK_COMPREPLY="refresh find rm loads setdefault" fi } _spack_module_tcl_refresh() { if $list_options then SPACK_COMPREPLY="-h --help --delete-tree --upstream-modules -y --yes-to-all" else _installed_packages fi } _spack_module_tcl_find() { if $list_options then SPACK_COMPREPLY="-h --help --full-path -r --dependencies" else _installed_packages fi } _spack_module_tcl_rm() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else _installed_packages fi } _spack_module_tcl_loads() { if $list_options then SPACK_COMPREPLY="-h --help --input-only -p --prefix -x --exclude -r --dependencies" else _installed_packages fi } _spack_module_tcl_setdefault() { if $list_options then SPACK_COMPREPLY="-h --help" else _installed_packages fi } _spack_patch() { if $list_options then SPACK_COMPREPLY="-h --help -n --no-checksum --deprecated -U --fresh --reuse --reuse-deps" else _all_packages fi } _spack_pkg() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="add list diff added changed removed grep source hash" fi } _spack_pkg_add() { if $list_options then SPACK_COMPREPLY="-h --help" else _all_packages fi } _spack_pkg_list() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_pkg_diff() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_pkg_added() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_pkg_changed() { if $list_options then SPACK_COMPREPLY="-h --help -t --type" else SPACK_COMPREPLY="" fi } _spack_pkg_removed() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_pkg_grep() { if $list_options then SPACK_COMPREPLY="--help" else SPACK_COMPREPLY="" fi } _spack_pkg_source() { if $list_options then SPACK_COMPREPLY="-h --help -c --canonical" else _all_packages fi } _spack_pkg_hash() { if $list_options then SPACK_COMPREPLY="-h --help" else _all_packages fi } _spack_providers() { if $list_options then SPACK_COMPREPLY="-h --help" else _providers fi } _spack_pydoc() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_python() { if $list_options then SPACK_COMPREPLY="-h --help -V --version -c -u -i -m --path" else SPACK_COMPREPLY="" fi } _spack_reindex() { SPACK_COMPREPLY="-h --help" } _spack_remove() { if $list_options then SPACK_COMPREPLY="-h --help -a --all -l --list-name -f --force" else _all_packages fi } _spack_rm() { if $list_options then SPACK_COMPREPLY="-h --help -a --all -l --list-name -f --force" else _all_packages fi } _spack_repo() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="create list add remove rm" fi } _spack_repo_create() { if $list_options then SPACK_COMPREPLY="-h --help -d --subdirectory" else _repos fi } _spack_repo_list() { SPACK_COMPREPLY="-h --help --scope" } _spack_repo_add() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else SPACK_COMPREPLY="" fi } _spack_repo_remove() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else _repos fi } _spack_repo_rm() { if $list_options then SPACK_COMPREPLY="-h --help --scope" else _repos fi } _spack_resource() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="list show" fi } _spack_resource_list() { SPACK_COMPREPLY="-h --help --only-hashes" } _spack_resource_show() { if $list_options then SPACK_COMPREPLY="-h --help" else _all_resource_hashes fi } _spack_restage() { if $list_options then SPACK_COMPREPLY="-h --help" else _all_packages fi } _spack_solve() { if $list_options then SPACK_COMPREPLY="-h --help --show -l --long -L --very-long -N --namespaces -I --install-status --no-install-status -y --yaml -j --json -c --cover -t --types --timers --stats -U --fresh --reuse --reuse-deps" else _all_packages fi } _spack_spec() { if $list_options then SPACK_COMPREPLY="-h --help -l --long -L --very-long -N --namespaces -I --install-status --no-install-status -y --yaml -j --json --format -c --cover -t --types -U --fresh --reuse --reuse-deps" else _all_packages fi } _spack_stage() { if $list_options then SPACK_COMPREPLY="-h --help -n --no-checksum --deprecated -p --path -U --fresh --reuse --reuse-deps" else _all_packages fi } _spack_style() { if $list_options then SPACK_COMPREPLY="-h --help -b --base -a --all -r --root-relative -U --no-untracked -f --fix --root -t --tool -s --skip" else SPACK_COMPREPLY="" fi } _spack_tags() { if $list_options then SPACK_COMPREPLY="-h --help -i --installed -a --all" else SPACK_COMPREPLY="" fi } _spack_test() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="run list find status results remove" fi } _spack_test_run() { if $list_options then SPACK_COMPREPLY="-h --help --alias --fail-fast --fail-first --externals -x --explicit --keep-stage --log-format --log-file --cdash-upload-url --cdash-build --cdash-site --cdash-track --cdash-buildstamp --help-cdash --clean --dirty" else _installed_packages fi } _spack_test_list() { if $list_options then SPACK_COMPREPLY="-h --help -a --all" else SPACK_COMPREPLY="" fi } _spack_test_find() { if $list_options then SPACK_COMPREPLY="-h --help" else _all_packages fi } _spack_test_status() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="" fi } _spack_test_results() { if $list_options then SPACK_COMPREPLY="-h --help -l --logs -f --failed" else SPACK_COMPREPLY="" fi } _spack_test_remove() { if $list_options then SPACK_COMPREPLY="-h --help -y --yes-to-all" else SPACK_COMPREPLY="" fi } _spack_test_env() { if $list_options then SPACK_COMPREPLY="-h --help --clean --dirty -U --fresh --reuse --reuse-deps --dump --pickle" else _all_packages fi } _spack_tutorial() { SPACK_COMPREPLY="-h --help -y --yes-to-all" } _spack_undevelop() { if $list_options then SPACK_COMPREPLY="-h --help -a --all" else _all_packages fi } _spack_uninstall() { if $list_options then SPACK_COMPREPLY="-h --help -f --force --remove -R --dependents -y --yes-to-all -a --all --origin" else _installed_packages fi } _spack_unit_test() { if $list_options then SPACK_COMPREPLY="-h --help -H --pytest-help -l --list -L --list-long -N --list-names --extension -s -k --showlocals" else _unit_tests fi } _spack_unload() { if $list_options then SPACK_COMPREPLY="-h --help --sh --csh --fish --bat --pwsh -a --all" else _installed_packages fi } _spack_url() { if $list_options then SPACK_COMPREPLY="-h --help" else SPACK_COMPREPLY="parse list summary stats" fi } _spack_url_parse() { if $list_options then SPACK_COMPREPLY="-h --help -s --spider" else SPACK_COMPREPLY="" fi } _spack_url_list() { SPACK_COMPREPLY="-h --help -c --color -e --extrapolation -n --incorrect-name -N --correct-name -v --incorrect-version -V --correct-version" } _spack_url_summary() { SPACK_COMPREPLY="-h --help" } _spack_url_stats() { SPACK_COMPREPLY="-h --help --show-issues" } _spack_verify() { if $list_options then SPACK_COMPREPLY="-h --help -l --local -j --json -a --all -s --specs -f --files" else _all_packages fi } _spack_versions() { if $list_options then SPACK_COMPREPLY="-h --help -s --safe --safe-only -r --remote -n --new -j --jobs" else _all_packages fi } _spack_view() { if $list_options then SPACK_COMPREPLY="-h --help -v --verbose -e --exclude -d --dependencies" else SPACK_COMPREPLY="symlink add soft hardlink hard copy relocate remove rm statlink status check" fi } _spack_view_symlink() { if $list_options then SPACK_COMPREPLY="-h --help --projection-file -i --ignore-conflicts" else _all_packages fi } _spack_view_add() { if $list_options then SPACK_COMPREPLY="-h --help --projection-file -i --ignore-conflicts" else _all_packages fi } _spack_view_soft() { if $list_options then SPACK_COMPREPLY="-h --help --projection-file -i --ignore-conflicts" else _all_packages fi } _spack_view_hardlink() { if $list_options then SPACK_COMPREPLY="-h --help --projection-file -i --ignore-conflicts" else _all_packages fi } _spack_view_hard() { if $list_options then SPACK_COMPREPLY="-h --help --projection-file -i --ignore-conflicts" else _all_packages fi } _spack_view_copy() { if $list_options then SPACK_COMPREPLY="-h --help --projection-file -i --ignore-conflicts" else _all_packages fi } _spack_view_relocate() { if $list_options then SPACK_COMPREPLY="-h --help --projection-file -i --ignore-conflicts" else _all_packages fi } _spack_view_remove() { if $list_options then SPACK_COMPREPLY="-h --help --no-remove-dependents -a --all" else _all_packages fi } _spack_view_rm() { if $list_options then SPACK_COMPREPLY="-h --help --no-remove-dependents -a --all" else _all_packages fi } _spack_view_statlink() { if $list_options then SPACK_COMPREPLY="-h --help" else _all_packages fi } _spack_view_status() { if $list_options then SPACK_COMPREPLY="-h --help" else _all_packages fi } _spack_view_check() { if $list_options then SPACK_COMPREPLY="-h --help" else _all_packages fi }