# Copyright Spack Project Developers. See COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) # NOTE: spack-completion.fish is auto-generated by: # # $ spack commands --aliases --format=fish # --header=fish/spack-completion.fish --update=spack-completion.fish # # Please do not manually modify this file. # Check fish version before proceeding set -l fish_version (string split '.' $FISH_VERSION) if test $fish_version[1] -lt 3 if test $fish_version[1] -eq 3 and test $fish_version[2] -lt 2 echo 'Fish version is older than 3.2.0. Some completion features may not work' set -g __fish_spack_force_files else echo 'This script requires fish version 3.0 or later' exit 1 end else set -g __fish_spack_force_files -F end # The following global variables are used as a cache of `__fish_spack_argparse` # Cached command line set -g __fish_spack_argparse_cache_line # Parsed command set -g __fish_spack_argparse_command # Remaining arguments set -g __fish_spack_argparse_argv # Return value set -g __fish_spack_argparse_return # Spack command generates an optspec variable $__fish_spack_optspecs_. # We check if this command exists, and echo the optspec variable name. function __fish_spack_get_optspecs -d 'Get optspecs of spack command' # Convert arguments to replace ' ' and '-' by '_' set -l cmd_var (string replace -ra -- '[ -]' '_' $argv | string join '_') # Set optspec variable name set -l optspecs_var __fish_spack_optspecs_$cmd_var # Query if variable $$optspecs_var exists set -q $optspecs_var; or return 1 # If it exists, echo all optspecs line by line. # String join returns 1 if no join was performed, so we return 0 in such case. string join \n $$optspecs_var; or return 0 end # Parse command-line arguments, save results to global variables, # and add found flags to __fish_spack_flag_. # Returns 1 if help flag is found. function __fish_spack_argparse # Figure out if the current invocation already has a command. set -l args $argv set -l commands # Return cached result if arguments haven't changed if test "$__fish_spack_argparse_cache_line" = "$args" return $__fish_spack_argparse_return end # Clear all flags found in last run set -g | string replace -rf -- '^(__fish_spack_flag_\w+)(.*?)$' 'set -ge $1' | source # Set default return value to 0, indicating success set -g __fish_spack_argparse_return 0 # Set command line to current arguments set -g __fish_spack_argparse_cache_line $argv # Recursively check arguments for commands while set -q args[1] # Get optspecs of current command set -l optspecs (__fish_spack_get_optspecs $commands $args[1]) or break # If command exists, shift arguments set -a commands $args[1] set -e args[1] # If command has no arguments, continue set -q optspecs[1]; or continue # Parse arguments. Set variable _flag_ if flag is found. # We find all these variables and set them to the global variable __fish_spack_flag_. argparse -i -s $optspecs -- $args 2>/dev/null; or break set -l | string replace -rf -- '^(_flag_.*)$' 'set -g __fish_spack$1' | source # Set args to not parsed arguments set args $argv # If command has help flag, we don't need to parse more so short circuit if set -q _flag_help set -g __fish_spack_argparse_return 1 break end end # Set cached variables set -g __fish_spack_argparse_command $commands set -g __fish_spack_argparse_argv $args return $__fish_spack_argparse_return end # Check if current commandline's command is "spack $argv" function __fish_spack_using_command set -l line (commandline -opc) __fish_spack_argparse $line; or return 1 set -p argv spack test "$__fish_spack_argparse_command" = "$argv" end # Check if current commandline's command is "spack $argv[2..-1]", # and cursor is at $argv[1]-th positional argument function __fish_spack_using_command_pos __fish_spack_using_command $argv[2..-1] or return test (count $__fish_spack_argparse_argv) -eq $argv[1] end function __fish_spack_using_command_pos_remainder __fish_spack_using_command $argv[2..-1] or return test (count $__fish_spack_argparse_argv) -ge $argv[1] end # Helper functions for subcommands function __fish_spack_bootstrap_names if set -q __fish_spack_flag_scope spack bootstrap list --scope $__fish_spack_flag_scope | string replace -rf -- '^Name: (\w+).*?$' '$1' else spack bootstrap list | string replace -rf -- '^Name: (\w+).*?$' '$1' end end # Reference: sudo's fish completion function __fish_spack_build_env_spec set token (commandline -opt) set -l index (contains -- -- $__fish_spack_argparse_argv) if set -q index[1] __fish_complete_subcommand --commandline $__fish_spack_argparse_argv[(math $index + 1)..-1] else if set -q __fish_spack_argparse_argv[1] __fish_complete_subcommand --commandline "$__fish_spack_argparse_argv[2..-1] $token" else __fish_spack_specs end end function __fish_spack_commands spack commands end function __fish_spack_colon_path set token (string split -rm1 ':' (commandline -opt)) if test (count $token) -lt 2 __fish_complete_path $token[1] else __fish_complete_path $token[2] | string replace -r -- '^' "$token[1]:" end end function __fish_spack_config_sections if set -q __fish_spack_flag_scope spack config --scope $__fish_spack_flag_scope list | string split ' ' else spack config list | string split ' ' end end function __fish_spack_environments string trim (spack env list) end function __fish_spack_extensions # Skip optional flags, or it will be really slow string match -q -- '-*' (commandline -opt) and return comm -1 -2 (spack extensions | string trim | psub) (__fish_spack_installed_packages | sort | psub) end function __fish_spack_gpg_keys spack gpg list end function __fish_spack_installed_compilers spack compilers | grep -v '^[=-]\|^$' end function __fish_spack_installed_packages spack find --no-groups --format '{name}' | uniq end function __fish_spack_installed_specs # Try match local hash first __fish_spack_installed_specs_id and return spack find --no-groups --format '{name}@{version}' end function __fish_spack_installed_specs_id set -l token (commandline -opt) string match -q -- '/*' $token or return 1 spack find --format '/{hash:7}'\t'{name}{@version}' end function __fish_spack_git_rev type -q __fish_git_ranges and __fish_git_ranges end function __fish_spack_mirrors spack mirror list | awk {'printf ("%s\t%s", $1, $2)'} end function __fish_spack_package_versions string trim (spack versions $argv) end function __fish_spack_packages spack list end function __fish_spack_pkg_packages spack pkg list end function __fish_spack_providers string trim (spack providers | grep -v '^$') end function __fish_spack_repos spack repo list | awk {'printf ("%s\t%s", $1, $2)'} end function __fish_spack_scopes # TODO: how to list all scopes? set -l scope system site user defaults set -l platform cray darwin linux test string join \n $scope end function __fish_spack_specs set -l token (commandline -opt) # Complete compilers if string match -rq -- '^(?
.*%)[\w-]*(@[\w\.+~-]*)?$' $token
        __fish_spack_installed_compilers | string replace -r -- '^' "$pre"
        return
    end

    # Try to complete spec version
    # Currently we can only match '@' after a package name
    set -l package

    # Match ^ following package name
    if string match -rq -- '^(?
.*?\^)[\w\.+~-]*$' $token
        # Package name is the nearest, assuming first character is always a letter or digit
        set packages (string match -ar -- '^[\w-]+' $__fish_spack_argparse_argv $token)
        set package $packages[-1]

        if test -n "$package"
            spack dependencies $package | string replace -r -- '^' "$pre"
            return
        end
    end

    # Match @ following package name
    if string match -rq -- '^(?
.*?\^?(?[\w\.+~-]*)@)[\w\.]*$' $token
        set package $packages[-1]

        # Matched @ starting at next token
        if test -z "$package"
            string match -arq -- '(^|\^)(?[\w\.+~-]*)$' $__fish_spack_argparse_argv[-1]
            if test -n "$inners[1]"
                set package $inners[-1]
            end
        end
    end

    # Complete version if package found
    if test -n "$package"
        # Only list safe versions for speed
        string trim (spack versions --safe $package) | string replace -r -- '^' "$pre"
        return
    end

    # Else complete package name
    __fish_spack_installed_packages | string replace -r -- '$' \t"installed"
    spack list
end

function __fish_spack_specs_or_id
    # Try to match local hash first
    __fish_spack_installed_specs_id
    and return

    __fish_spack_specs
end

function __fish_spack_tags
    string trim (spack tags)
end

function __fish_spack_tests
    spack test list | grep -v '^[=-]'
end

function __fish_spack_unit_tests
    # Skip optional flags, or it will be really slow
    string match -q -- '-*' (commandline -opt)
    and return

    spack unit-test -l
end

function __fish_spack_yamls
    # Trim flag from current token
    string match -rq -- '(?
-.)?(?.*)' (commandline -opt)

    if test -n "$token"
        find $token* -type f '(' -iname '*.yaml' -or -iname '*.yml' ')'
    else
        find -maxdepth 2 -type f '(' -iname '*.yaml' -or -iname '*.yml' ')' | cut -c 3-
    end
end

# Reset existing completions
complete -c spack --erase

# Spack commands
#
# Everything below here is auto-generated.