From b03efb4356e40c866c46037b799c8babaa49cfa5 Mon Sep 17 00:00:00 2001 From: Mike McQuaid <mike@mikemcquaid.com> Date: Sat, 1 Feb 2020 19:05:03 +0100 Subject: [PATCH] Move shared man/help logic to cli/parser. --- Library/Homebrew/brew.rb | 4 ++-- Library/Homebrew/cli/parser.rb | 16 ++++++++++++++++ Library/Homebrew/dev-cmd/man.rb | 18 +++--------------- Library/Homebrew/help.rb | 18 ++++-------------- 4 files changed, 25 insertions(+), 31 deletions(-) diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index 89b8e906e2..c1638fee8e 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -94,8 +94,8 @@ begin # - if cmd is Cask, let Cask handle the help command instead if (empty_argv || help_flag) && cmd != "cask" require "help" - Homebrew::Help.help cmd, empty_argv: empty_argv, internal_cmd: internal_cmd - # `Homebrew.help` never returns, except for external/unknown commands. + Homebrew::Help.help cmd, empty_argv: empty_argv + # `Homebrew.help` never returns, except for unknown commands. end if internal_cmd diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index 6303be8e2b..b5579276e0 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -16,6 +16,22 @@ module Homebrew new(args, &block).parse(args) end + def self.from_cmd_path(cmd_path) + cmd_method_prefix = cmd_path.basename(cmd_path.extname) + .to_s + .sub(/^brew-/, "") + .tr("-", "_") + cmd_args_method_name = "#{cmd_method_prefix}_args".to_sym + + begin + Homebrew.send(cmd_args_method_name) if require?(cmd_path) + rescue NoMethodError => e + raise if e.name != cmd_args_method_name + + nil + end + end + def self.global_options { quiet: [["-q", "--quiet"], :quiet, "Suppress any warnings."], diff --git a/Library/Homebrew/dev-cmd/man.rb b/Library/Homebrew/dev-cmd/man.rb index a536aa326f..9be0d45917 100644 --- a/Library/Homebrew/dev-cmd/man.rb +++ b/Library/Homebrew/dev-cmd/man.rb @@ -4,8 +4,6 @@ require "formula" require "erb" require "ostruct" require "cli/parser" -# Require all commands -Dir.glob("#{HOMEBREW_LIBRARY_PATH}/{dev-,}cmd/*.rb").sort.each { |cmd| require cmd } module Homebrew module_function @@ -151,19 +149,13 @@ module Homebrew # preserve existing manpage order cmd_paths.sort_by(&method(:sort_key_for_path)) .each do |cmd_path| - cmd_args_method_name = cmd_arg_parser(cmd_path) - - cmd_man_page_lines = begin - cmd_parser = Homebrew.send(cmd_args_method_name) + cmd_man_page_lines = if cmd_parser = CLI::Parser.from_cmd_path(cmd_path) next if cmd_parser.hide_from_man_page cmd_parser_manpage_lines(cmd_parser).join - rescue NoMethodError => e - raise if e.name != cmd_args_method_name - - nil + else + cmd_comment_manpage_lines(cmd_path) end - cmd_man_page_lines ||= cmd_comment_manpage_lines(cmd_path) man_page_lines << cmd_man_page_lines end @@ -171,10 +163,6 @@ module Homebrew man_page_lines.compact.join("\n") end - def cmd_arg_parser(cmd_path) - "#{cmd_path.basename.to_s.gsub(".rb", "").tr("-", "_")}_args".to_sym - end - def cmd_parser_manpage_lines(cmd_parser) lines = [format_usage_banner(cmd_parser.usage_banner_text)] lines += cmd_parser.processed_options.map do |short, long, _, desc| diff --git a/Library/Homebrew/help.rb b/Library/Homebrew/help.rb index f9bd03eb71..d1ed09408b 100644 --- a/Library/Homebrew/help.rb +++ b/Library/Homebrew/help.rb @@ -72,25 +72,15 @@ module Homebrew # Resume execution in `brew.rb` for unknown commands. return if path.nil? - # Resume execution in `brew.rb` for external commands using "cli/parser". - return if !flags[:internal_cmd] && path.read.match?("require .cli/parser.") - - # Display help for internal command (or generic help if undocumented). + # Display help for commands (or generic help if undocumented). puts command_help(path) exit 0 end def command_help(path) - # Let OptionParser generate help text for commands which have a parser defined - cmd = path.basename(path.extname) - cmd_args_method_name = "#{cmd.to_s.tr("-", "_")}_args".to_sym - begin - return Homebrew.send(cmd_args_method_name) - .generate_help_text - rescue NoMethodError => e - raise if e.name != cmd_args_method_name - - nil + # Let OptionParser generate help text for commands which have a parser + if cmd_parser = CLI::Parser.from_cmd_path(path) + return cmd_parser.generate_help_text end # Otherwise read #: lines from the file. -- GitLab