
This PR adds a `--format=bash` option to `spack commands` to auto-generate the Bash programmable tab completion script. It can be extended to work for other shells. Progress: - [x] Fix bug in superclass initialization in `ArgparseWriter` - [x] Refactor `ArgparseWriter` (see below) - [x] Ensure that output of old `--format` options remains the same - [x] Add `ArgparseCompletionWriter` and `BashCompletionWriter` - [x] Add `--aliases` option to add command aliases - [x] Standardize positional argument names - [x] Tests for `spack commands --format=bash` coverage - [x] Tests to make sure `spack-completion.bash` stays up-to-date - [x] Tests for `spack-completion.bash` coverage - [x] Speed up `spack-completion.bash` by caching subroutine calls This PR also necessitates a significant refactoring of `ArgparseWriter`. Previously, `ArgparseWriter` was mostly a single `_write` method which handled everything from extracting the information we care about from the parser to formatting the output. Now, `_write` only handles recursion, while the information extraction is split into a separate `parse` method, and the formatting is handled by `format`. This allows subclasses to completely redefine how the format will appear without overriding all of `_write`. Co-Authored-by: Todd Gamblin <tgamblin@llnl.gov>
24 lines
603 B
Bash
Executable File
24 lines
603 B
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Copyright 2013-2020 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)
|
|
|
|
# Updates Spack's shell tab completion scripts
|
|
|
|
# Switch to parent directory
|
|
QA_DIR="$(dirname "${BASH_SOURCE[0]}")"
|
|
cd "$QA_DIR/.."
|
|
|
|
# Update each shell
|
|
for shell in bash # zsh fish
|
|
do
|
|
header=$shell/spack-completion.in
|
|
script=spack-completion.$shell
|
|
|
|
rm -f $script
|
|
spack commands --aliases --format=$shell --header=$header --update=$script
|
|
chmod +x $script
|
|
done
|