Skip to content
  • Adam J. Stewart's avatar
    Use `spack commands --format=bash` to generate shell completion (#14393) · 11f2b612
    Adam J. Stewart authored
    
    
    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: default avatarTodd Gamblin <tgamblin@llnl.gov>
    11f2b612