Merge pull request #7839 from EricFromCanada/list-command-options

cmd/options: add flag to list a command's options
This commit is contained in:
Mike McQuaid 2020-06-29 08:49:36 +01:00 committed by GitHub
commit d5306b87b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 1 deletions

View File

@ -3,6 +3,7 @@
require "formula" require "formula"
require "options" require "options"
require "cli/parser" require "cli/parser"
require "commands"
module Homebrew module Homebrew
module_function module_function
@ -20,8 +21,10 @@ module Homebrew
description: "Show options for formulae that are currently installed." description: "Show options for formulae that are currently installed."
switch "--all", switch "--all",
description: "Show options for all available formulae." description: "Show options for all available formulae."
flag "--command=",
description: "Show options for the specified <command>."
switch :debug switch :debug
conflicts "--installed", "--all" conflicts "--installed", "--all", "--command"
end end
end end
@ -32,6 +35,22 @@ module Homebrew
puts_options Formula.to_a.sort puts_options Formula.to_a.sort
elsif args.installed? elsif args.installed?
puts_options Formula.installed.sort puts_options Formula.installed.sort
elsif !args.command.nil?
path = Commands.path(args.command)
odie "Unknown command: #{args.command}" unless path
cmd_options = if cmd_parser = CLI::Parser.from_cmd_path(path)
cmd_parser.processed_options.map do |short, long, _, desc|
[long || short, desc]
end
else
cmd_comment_options(path)
end
if args.compact?
puts cmd_options.sort.map(&:first) * " "
else
cmd_options.sort.each { |option, desc| puts "#{option}\n\t#{desc}" }
puts
end
elsif args.no_named? elsif args.no_named?
raise FormulaUnspecifiedError raise FormulaUnspecifiedError
else else
@ -39,6 +58,20 @@ module Homebrew
end end
end end
def cmd_comment_options(cmd_path)
options = []
comment_lines = cmd_path.read.lines.grep(/^#:/)
return options if comment_lines.empty?
# skip the comment's initial usage summary lines
comment_lines.slice(2..-1).each do |line|
if / (?<option>-[-\w]+) +(?<desc>.*)$/ =~ line
options << [option, desc]
end
end
options
end
def puts_options(formulae) def puts_options(formulae)
formulae.each do |f| formulae.each do |f|
next if f.options.empty? next if f.options.empty?

View File

@ -340,6 +340,8 @@ Show install options specific to *`formula`*.
Show options for formulae that are currently installed. Show options for formulae that are currently installed.
* `--all`: * `--all`:
Show options for all available formulae. Show options for all available formulae.
* `--command`:
Show options for the specified *`command`*.
### `outdated` [*`options`*] [*`formula`*] ### `outdated` [*`options`*] [*`formula`*]

View File

@ -456,6 +456,10 @@ Show options for formulae that are currently installed\.
\fB\-\-all\fR \fB\-\-all\fR
Show options for all available formulae\. Show options for all available formulae\.
. .
.TP
\fB\-\-command\fR
Show options for the specified \fIcommand\fR\.
.
.SS "\fBoutdated\fR [\fIoptions\fR] [\fIformula\fR]" .SS "\fBoutdated\fR [\fIoptions\fR] [\fIformula\fR]"
List installed formulae that have an updated version available\. By default, version information is displayed in interactive shells, and suppressed otherwise\. List installed formulae that have an updated version available\. By default, version information is displayed in interactive shells, and suppressed otherwise\.
. .