From ab97c30b148df2e87ef279c5a83af882196da2e3 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Fri, 25 Dec 2020 12:38:38 -0500 Subject: [PATCH 1/2] cli/parser: use - instead of _ in cask args --- Library/Homebrew/cli/parser.rb | 12 ++++++------ completions/bash/brew | 2 +- completions/zsh/_brew_cask | 12 ++++++------ docs/Manpage.md | 12 ++++++------ manpages/brew.1 | 12 ++++++------ 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index 0db260c0a4..3b635e7e5b 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -64,27 +64,27 @@ module Homebrew description: "Target location for Services " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:servicedir]}`).", }], - [:flag, "--input_methoddir=", { + [:flag, "--input-methoddir=", { description: "Target location for Input Methods " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:input_methoddir]}`).", }], - [:flag, "--internet_plugindir=", { + [:flag, "--internet-plugindir=", { description: "Target location for Internet Plugins " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:internet_plugindir]}`).", }], - [:flag, "--audio_unit_plugindir=", { + [:flag, "--audio-unit-plugindir=", { description: "Target location for Audio Unit Plugins " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:audio_unit_plugindir]}`).", }], - [:flag, "--vst_plugindir=", { + [:flag, "--vst-plugindir=", { description: "Target location for VST Plugins " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:vst_plugindir]}`).", }], - [:flag, "--vst3_plugindir=", { + [:flag, "--vst3-plugindir=", { description: "Target location for VST3 Plugins " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:vst3_plugindir]}`).", }], - [:flag, "--screen_saverdir=", { + [:flag, "--screen-saverdir=", { description: "Target location for Screen Savers " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:screen_saverdir]}`).", }], diff --git a/completions/bash/brew b/completions/bash/brew index 49eed71526..887acc5ddc 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -799,7 +799,7 @@ _brew_cask () done if [[ $i -eq $COMP_CWORD ]]; then - __brew_caskcomp "abv audit cat create doctor edit fetch home info install list ls outdated reinstall remove rm search style uninstall upgrade zap -S --force --verbose --appdir --colorpickerdir --prefpanedir --qlplugindir --fontdir --servicedir --input_methoddir --internet_plugindir --screen_saverdir --no-binaries --debug --version" + __brew_caskcomp "abv audit cat create doctor edit fetch home info install list ls outdated reinstall remove rm search style uninstall upgrade zap -S --force --verbose --appdir --colorpickerdir --prefpanedir --qlplugindir --fontdir --servicedir --input-methoddir --internet-plugindir --screen-saverdir --no-binaries --debug --version" return fi diff --git a/completions/zsh/_brew_cask b/completions/zsh/_brew_cask index 44f5cc869b..81c8a3fee4 100644 --- a/completions/zsh/_brew_cask +++ b/completions/zsh/_brew_cask @@ -179,12 +179,12 @@ _brew_cask() '--dictionarydir=-:Target location for Dictionaries. The default value is ~/Library/Dictionaries.' \ '--fontdir=-:Target location for Fonts. The default value is ~/Library/Fonts.' \ '--servicedir=-:Target location for Services. The default value is ~/Library/Services.' \ - '--input_methoddir=-:Target location for Input Methods. The default value is ~/Library/Input Methods.' \ - '--internet_plugindir=-:Target location for Internet Plugins. The default value is ~/Library/Internet Plug-Ins.' \ - '--audio_unit_plugindir=-:Target location for Audio Unit Plugins. The default value is ~/Library/Audio/Plug-Ins/Components.' \ - '--vst_plugindir=-:Target location for VST Plugins. The default value is ~/Library/Audio/Plug-Ins/VST.' \ - '--vst3_plugindir=-:Target location for VST3 Plugins. The default value is ~/Library/Audio/Plug-Ins/VST3.' \ - '--screen_saverdir=-:Target location for Screen Savers. The default value is ~/Library/Screen Savers.' \ + '--input-methoddir=-:Target location for Input Methods. The default value is ~/Library/Input Methods.' \ + '--internet-plugindir=-:Target location for Internet Plugins. The default value is ~/Library/Internet Plug-Ins.' \ + '--audio-unit-plugindir=-:Target location for Audio Unit Plugins. The default value is ~/Library/Audio/Plug-Ins/Components.' \ + '--vst-plugindir=-:Target location for VST Plugins. The default value is ~/Library/Audio/Plug-Ins/VST.' \ + '--vst3-plugindir=-:Target location for VST3 Plugins. The default value is ~/Library/Audio/Plug-Ins/VST3.' \ + '--screen-saverdir=-:Target location for Screen Savers. The default value is ~/Library/Screen Savers.' \ '--no-binaries:Do not link "helper" executables to /usr/local/bin.' \ '--debug:Output debugging information of use to Cask authors and developers.' \ ':command:->command' \ diff --git a/docs/Manpage.md b/docs/Manpage.md index 7bc638a186..f61e594776 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -1418,22 +1418,22 @@ These options are applicable to subcommands accepting a `--cask` flag and all `c * `--servicedir`: Target location for Services (default: `~/Library/Services`). -* `--input_methoddir`: +* `--input-methoddir`: Target location for Input Methods (default: `~/Library/Input Methods`). -* `--internet_plugindir`: +* `--internet-plugindir`: Target location for Internet Plugins (default: `~/Library/Internet Plug-Ins`). -* `--audio_unit_plugindir`: +* `--audio-unit-plugindir`: Target location for Audio Unit Plugins (default: `~/Library/Audio/Plug-Ins/Components`). -* `--vst_plugindir`: +* `--vst-plugindir`: Target location for VST Plugins (default: `~/Library/Audio/Plug-Ins/VST`). -* `--vst3_plugindir`: +* `--vst3-plugindir`: Target location for VST3 Plugins (default: `~/Library/Audio/Plug-Ins/VST3`). -* `--screen_saverdir`: +* `--screen-saverdir`: Target location for Screen Savers (default: `~/Library/Screen Savers`). * `--language`: diff --git a/manpages/brew.1 b/manpages/brew.1 index 5a8a4b8b13..8ec4d995b4 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -1972,27 +1972,27 @@ Target location for Fonts (default: \fB~/Library/Fonts\fR)\. Target location for Services (default: \fB~/Library/Services\fR)\. . .TP -\fB\-\-input_methoddir\fR +\fB\-\-input\-methoddir\fR Target location for Input Methods (default: \fB~/Library/Input Methods\fR)\. . .TP -\fB\-\-internet_plugindir\fR +\fB\-\-internet\-plugindir\fR Target location for Internet Plugins (default: \fB~/Library/Internet Plug\-Ins\fR)\. . .TP -\fB\-\-audio_unit_plugindir\fR +\fB\-\-audio\-unit\-plugindir\fR Target location for Audio Unit Plugins (default: \fB~/Library/Audio/Plug\-Ins/Components\fR)\. . .TP -\fB\-\-vst_plugindir\fR +\fB\-\-vst\-plugindir\fR Target location for VST Plugins (default: \fB~/Library/Audio/Plug\-Ins/VST\fR)\. . .TP -\fB\-\-vst3_plugindir\fR +\fB\-\-vst3\-plugindir\fR Target location for VST3 Plugins (default: \fB~/Library/Audio/Plug\-Ins/VST3\fR)\. . .TP -\fB\-\-screen_saverdir\fR +\fB\-\-screen\-saverdir\fR Target location for Screen Savers (default: \fB~/Library/Screen Savers\fR)\. . .TP From 3a6f34d27bc654d41c274c4ef469f89c2d93be70 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Fri, 25 Dec 2020 15:57:09 -0500 Subject: [PATCH 2/2] cli/parser: add tests for inferring option names --- Library/Homebrew/test/cli/parser_spec.rb | 36 ++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/Library/Homebrew/test/cli/parser_spec.rb b/Library/Homebrew/test/cli/parser_spec.rb index e5fae5af8e..f737b4b8ce 100644 --- a/Library/Homebrew/test/cli/parser_spec.rb +++ b/Library/Homebrew/test/cli/parser_spec.rb @@ -252,6 +252,42 @@ describe Homebrew::CLI::Parser do end end + describe "test inferrability of args" do + subject(:parser) { + described_class.new do + switch "--switch-a" + switch "--switch-b" + switch "--foo-switch" + flag "--flag-foo=" + comma_array "--comma-array-foo" + end + } + + it "parses a valid switch that uses `_` instead of `-`" do + args = parser.parse(["--switch_a"]) + expect(args).to be_switch_a + end + + it "parses a valid flag that uses `_` instead of `-`" do + args = parser.parse(["--flag_foo=foo.txt"]) + expect(args.flag_foo).to eq "foo.txt" + end + + it "parses a valid comma_array that uses `_` instead of `-`" do + args = parser.parse(["--comma_array_foo=foo.txt,bar.txt"]) + expect(args.comma_array_foo).to eq %w[foo.txt bar.txt] + end + + it "raises an error when option is ambiguous" do + expect { parser.parse(["--switch"]) }.to raise_error(RuntimeError, /ambiguous option: --switch/) + end + + it "inferrs the option from an abbreviated name" do + args = parser.parse(["--foo"]) + expect(args).to be_foo_switch + end + end + describe "test argv extensions" do subject(:parser) { described_class.new do