Create individually namespace args for each command #17123
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
brew style
with your changes locally?brew typecheck
with your changes locally?brew tests
with your changes locally?As a follow-up to #16814 this PR makes the args for each command individually namespace. The advantages include a browsable API (have a look at https://rubydoc.brew.sh/Homebrew/CLI/Args.html before this goes in 😬), better type annotations (some commands define the same arg under different conditions), better type-checking (referencing an arg from another command will result in an error).
To do this, an
Args
class under the commands namespace is dynamically created whencmd_args
is evaluated. This lets us implement this change without breaking the command API, though it does introduce a fair amount of Ruby magic.(The first commit does the heavy lifting, the second applies it with
brew tc --update
.)(Opening in draft mode for initial feedback.)