Skip to content

Commit

Permalink
bugfix: only complete aliases for potential aliases (spack#39887)
Browse files Browse the repository at this point in the history
Smart alias completion introduced in spack#39499 wasn't as smart as it needed to be, and
would complete any invalid command prefix and some env names with alias names.

- [x] don't complete aliases if there are no potential completions
      e.g., don't convert `spack isnotacommand` -> `spack concretize`

- [x] don't complete with an aliases if we're not looking at a top-level subcommand.
  • Loading branch information
tgamblin authored Sep 8, 2023
1 parent 8250a08 commit 45d149c
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 4 deletions.
6 changes: 4 additions & 2 deletions share/spack/bash/spack-completion.bash
Original file line number Diff line number Diff line change
Expand Up @@ -367,8 +367,10 @@ _spack_get_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's only one thing, don't bother compressing aliases; complete the alias
if [ "${#COMPREPLY[@]}" == "1" ]; then
# 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" != "1" ]; then
return
fi

Expand Down
3 changes: 3 additions & 0 deletions share/spack/qa/completion-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ contains 'concretise' _spack_completions spack c
contains 'concretize' _spack_completions spack conc
does_not_contain 'concretise' _spack_completions spack conc

does_not_contain 'concretize' _spack_completions spack isnotacommand
does_not_contain 'concretize' _spack_completions spack env isnotacommand

# XFAIL: Fails for Python 2.6 because pkg_resources not found?
#contains 'compilers.py' _spack_completions spack unit-test ''

Expand Down
6 changes: 4 additions & 2 deletions share/spack/spack-completion.bash
Original file line number Diff line number Diff line change
Expand Up @@ -367,8 +367,10 @@ _spack_get_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's only one thing, don't bother compressing aliases; complete the alias
if [ "${#COMPREPLY[@]}" == "1" ]; then
# 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" != "1" ]; then
return
fi

Expand Down

0 comments on commit 45d149c

Please sign in to comment.