set -l subcmds \ show \ update \ default \ toolchain \ target \ component \ override \ run \ which \ doc \ man \ self \ set \ # "completions" \ help set -l rustup_show \ active-toolchain \ home \ profile \ help # rustup does not really expose a mechanism of retrieving a list of all valid components without the archs appended function __rustup_components rustup component list | string match -r "^\S+" | string replace -f -- -x86_64-unknown-linux-gnu "" end # function __rustup_installable_components # set -l not_installed (comm -2 -3 (printf "%s\n" $__rustup_components | psub -F) (rustup component list --installed | psub -F) 2>/dev/null) # __rustup_strip_common_suffix_strict $not_installed # end # All *valid* target triples, retrieved from source function __rustup_triples # The list below must be kept sorted alphabetically printf "%s\n" \ aarch64-apple-ios \ aarch64-linux-android \ aarch64-pc-windows-msvc \ aarch64-unknown-cloudabi \ aarch64-unknown-fuchsia \ aarch64-unknown-linux-gnu \ aarch64-unknown-linux-musl \ aarch64-unknown-redox \ armebv7r-none-eabi \ armebv7r-none-eabihf \ arm-linux-androideabi \ arm-unknown-linux-gnueabi \ arm-unknown-linux-gnueabihf \ arm-unknown-linux-musleabi \ arm-unknown-linux-musleabihf \ armv5te-unknown-linux-gnueabi \ armv5te-unknown-linux-musleabi \ armv7-apple-ios \ armv7-linux-androideabi \ armv7r-none-eabi \ armv7r-none-eabihf \ armv7s-apple-ios \ armv7-unknown-cloudabi-eabihf \ armv7-unknown-linux-gnueabi \ armv7-unknown-linux-gnueabihf \ armv7-unknown-linux-musleabi \ armv7-unknown-linux-musleabihf \ asmjs-unknown-emscripten \ i386-apple-ios \ i586-pc-windows-msvc \ i586-unknown-linux-gnu \ i586-unknown-linux-musl \ i686-apple-darwin \ i686-linux-android \ i686-pc-windows-gnu \ i686-pc-windows-msvc \ i686-unknown-cloudabi \ i686-unknown-freebsd \ i686-unknown-haiku \ i686-unknown-linux-gnu \ i686-unknown-linux-musl \ i686-unknown-netbsd \ le32-unknown-nacl \ mips64el-unknown-linux-gnuabi64 \ mips64-unknown-linux-gnuabi64 \ mipsel-unknown-linux-gnu \ mipsel-unknown-linux-musl \ mipsel-unknown-linux-uclibc \ mipsisa32r6el-unknown-linux-gnu \ mipsisa32r6-unknown-linux-gnu \ mipsisa64r6el-unknown-linux-gnuabi64 \ mipsisa64r6-unknown-linux-gnuabi64 \ mips-unknown-linux-gnu \ mips-unknown-linux-musl \ mips-unknown-linux-uclibc \ msp430-none-elf \ nvptx64-nvidia-cuda \ powerpc64le-unknown-linux-gnu \ powerpc64-unknown-linux-gnu \ powerpc-unknown-linux-gnu \ powerpc-unknown-linux-gnuspe \ riscv32imac-unknown-none-elf \ riscv32imc-unknown-none-elf \ riscv32i-unknown-none-elf \ riscv64gc-unknown-none-elf \ riscv64imac-unknown-none-elf \ s390x-unknown-linux-gnu \ sparc64-unknown-linux-gnu \ sparc64-unknown-netbsd \ sparc-unknown-linux-gnu \ sparcv9-sun-solaris \ thumbv6m-none-eabi \ thumbv7em-none-eabi \ thumbv7em-none-eabihf \ thumbv7m-none-eabi \ thumbv7neon-linux-androideabi \ thumbv7neon-unknown-linux-gnueabihf \ "thumbv8m.base-none-eabi" \ "thumbv8m.main-none-eabi" \ "thumbv8m.main-none-eabihf" \ wasm32-unknown-emscripten \ wasm32-unknown-unknown \ x86_64-apple-darwin \ x86_64-apple-ios \ x86_64-fortanix-unknown-sgx \ x86_64-linux-android \ x86_64-pc-solaris \ x86_64-pc-windows-gnu \ x86_64-pc-windows-msvc \ x86_64-rumprun-netbsd \ x86_64-sun-solaris \ x86_64-unknown-bitrig \ x86_64-unknown-cloudabi \ x86_64-unknown-dragonfly \ x86_64-unknown-freebsd \ x86_64-unknown-fuchsia \ x86_64-unknown-haiku \ x86_64-unknown-linux-gnu \ x86_64-unknown-linux-gnux32 \ x86_64-unknown-linux-musl \ x86_64-unknown-netbsd \ x86_64-unknown-openbsd \ x86_64-unknown-redox end # Given n arguments, return the longest suffix common to all function __rustup_common_suffix if test (count $argv) -le 1 return end set -l index -1 set -l min_length 65335 for arg in $argv if test (string length "$arg") -lt $min_length set min_length (string length "$arg") end end set -l length 1 set -l suffix set -l done 0 while test $done -eq 0 -a $length -le $min_length set -l match (string match -r -- ".{$length}\$" "$argv[1]") for arg in $argv[2..-1] set -l value (string match -r -- ".{$length}\$" "$arg") if test "$value" = "$match" continue else if string match -qr -- . "$suffix" set done 1 break else # No common suffix return 1 end end set suffix "$match" set length (math $length + 1) end printf "%s\n" "$suffix" end # Strip result of __rustup_common_suffix function __rustup_strip_common_suffix set -l suffix (__rustup_common_suffix $argv) printf "%s\n" $argv | string replace -r -- (string escape --style=regex -- "$suffix")\$ "" end # Strip result of __rustup_common_suffix, but require suffix to begin at a literal - function __rustup_strip_common_suffix_strict set -l suffix (__rustup_common_suffix $argv | string match -r -- "-.*") printf "%s\n" $argv | string replace -r -- (string escape --style=regex -- "$suffix")\$ "" end function __rustup_all_toolchains set -l __rustup_channels beta stable nightly printf "%s\n" $__rustup_channels printf "%s\n" $__rustup_channels-(__rustup_triples) end # All valid toolchains excluding installed function __rustup_installable_toolchains comm -2 -3 (__rustup_all_toolchains | psub -F) (printf "%s\n" $__rustup_toolchains | psub -F) \ # Ignore warnings about lists not being in sorted order, as we are aware of their contents 2>/dev/null end function __rustup_installed_components # If the user has supplied `--toolchain foo`, use it to filter the list set -l toolchain (commandline -j | string replace -rf ".*\s--toolchain\s+(\S+)\s.*" '$1') set -l toolchain_filter if string match -qr . -- $toolchain set toolchain_filter "--toolchain $toolchain" end set -l installed (rustup component list --installed $toolchain_filter) __rustup_strip_common_suffix_strict $installed end # Trim trailing attributes, e.g. "rust-whatever (default)" -> "rust-whatever" set -l __rustup_toolchains (rustup toolchain list | string replace -r "\s+.*" '') # By default, the long name of a toolchain is used (e.g. nightly-x86_64-unknown-linux-gnu), # but a shorter version can be used if it is unambiguous. set -l __rustup_toolchains_short (__rustup_strip_common_suffix_strict $__rustup_toolchains) set -l rustup_profiles minimal default complete complete -c rustup -n __fish_should_complete_switches -s v -l verbose complete -c rustup -n __fish_should_complete_switches -s h -l help complete -c rustup -n __fish_should_complete_switches -s V -l version complete -c rustup -n "__fish_is_nth_token 1" -xa "$subcmds" complete -c rustup -n "__fish_prev_arg_in default" -xa "$__rustup_toolchains_short $__rustup_toolchains" complete -c rustup -n "__fish_prev_arg_in toolchain" -xa "add install list remove uninstall link help" complete -c rustup -n "__fish_prev_arg_in target" -xa "list add install remove uninstall help" complete -c rustup -n "__fish_prev_arg_in component" -xa "list add install remove uninstall help" complete -c rustup -n "__fish_prev_arg_in override" -xa "list set unset help" complete -c rustup -n "__fish_prev_arg_in run" -xa "$__rustup_toolchains_short $__rustup_toolchains" complete -c rustup -n "__fish_prev_arg_in self" -xa "update remove uninstall upgrade-data help" complete -c rustup -n "__fish_prev_arg_in set" -xa "default-host profile help" complete -c rustup -n "__fish_seen_subcommand_from toolchain; and __fish_prev_arg_in remove uninstall" \ -xa "$__rustup_toolchains $__rustup_toolchains_short" complete -c rustup -n "__fish_seen_subcommand_from toolchain; and __fish_prev_arg_in add install" \ -xa "(__rustup_installable_toolchains)" complete -c rustup -n "__fish_seen_subcommand_from component; and __fish_prev_arg_in remove uninstall" \ -xa "(__rustup_installed_components)" complete -c rustup -n "__fish_seen_subcommand_from component; and __fish_prev_arg_in add install" \ -xa "(__rustup_components)" complete -c rustup -n "__fish_seen_subcommand_from show;" -xa "$rustup_show" complete -c rustup -n "__fish_seen_subcommand_from set; and __fish_prev_arg_in default-host" \ -xa "(__rustup_triples)" complete -c rustup -n "__fish_seen_subcommand_from set; and __fish_prev_arg_in profile" \ -xa "$rustup_profiles" # Global argument completions where valid complete -c rustup -n "__fish_prev_arg_in --toolchain" -xa "$__rustup_toolchains_short $__rustup_toolchains" complete -f -c rustup -n '__fish_seen_subcommand_from doc' -a '(__fish_rustup_docs_primitives)' complete -f -c rustup -n '__fish_seen_subcommand_from doc' -a '(__fish_rustup_docs_keywords)' complete -f -c rustup -n '__fish_seen_subcommand_from doc' -a '(__fish_rustup_docs_macros)' complete -f -c rustup -n '__fish_seen_subcommand_from doc' -a '(__fish_rustup_docs_modules)' function __fish_rustup_docs_modules set -l doc_path (__rustup_doc_path) command find "$doc_path"/{std,core,alloc} -name index.html \ | string replace --regex "$doc_path/(.+)/index\.html" '$1\tModule' \ | string replace --all / :: end function __fish_rustup_docs_keywords set -l doc_path (__rustup_doc_path) string replace --regex "$doc_path/std/keyword\.(.+)\.html" '$1\tKeyword' "$doc_path"/std/keyword.*.html end function __fish_rustup_docs_primitives set -l doc_path (__rustup_doc_path) string replace --regex "$doc_path/std/primitive\.(.+)\.html" '$1\tPrimitive' "$doc_path"/std/primitive.*.html end function __fish_rustup_docs_macros set -l doc_path (__rustup_doc_path) string replace --regex "$doc_path/" '' "$doc_path"/{std,core,alloc}/macro.*.html \ | string replace --regex 'macro\.(.+)\.html' '$1\tMacro' \ | string replace --all / :: end function __rustup_doc_path rustup doc --path | string replace --regex '/[^/]*$' '' end