diff --git a/Library/Homebrew/cask/cmd/abstract_command.rb b/Library/Homebrew/cask/cmd/abstract_command.rb index 6690ae55a3..23e972087c 100644 --- a/Library/Homebrew/cask/cmd/abstract_command.rb +++ b/Library/Homebrew/cask/cmd/abstract_command.rb @@ -12,8 +12,6 @@ module Cask extend T::Sig extend T::Helpers - include Homebrew::Search - OPTIONS = [ [:switch, "--[no-]binaries", { description: "Disable/enable linking of helper executables (default: enabled).", @@ -87,7 +85,7 @@ module Cask end def suggestion_message(cask_token) - matches = search_casks(cask_token) + matches = Homebrew::Search.search_casks(cask_token) if matches.one? "Did you mean '#{matches.first}'?" diff --git a/Library/Homebrew/cmd/desc.rb b/Library/Homebrew/cmd/desc.rb index a303a8d09b..b38a8ae11f 100644 --- a/Library/Homebrew/cmd/desc.rb +++ b/Library/Homebrew/cmd/desc.rb @@ -11,8 +11,6 @@ module Homebrew module_function - extend Search - sig { returns(CLI::Parser) } def desc_args Homebrew::CLI::Parser.new do @@ -71,8 +69,8 @@ module Homebrew Descriptions.new(desc).print else query = args.named.join(" ") - string_or_regex = query_regexp(query) - search_descriptions(string_or_regex, args, search_type: search_type) + string_or_regex = Search.query_regexp(query) + Search.search_descriptions(string_or_regex, args, search_type: search_type) end end end diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 8dc6251c46..8a67db1249 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -8,7 +8,6 @@ require "missing_formula" require "formula_installer" require "development_tools" require "install" -require "search" require "cleanup" require "cli/parser" require "upgrade" @@ -16,8 +15,6 @@ require "upgrade" module Homebrew extend T::Sig - extend Search - module_function sig { returns(CLI::Parser) } @@ -299,11 +296,12 @@ module Homebrew # so we might as well return early. return if name.include?("/") + require "search" ohai "Searching for similarly named formulae and casks..." # Don't treat formula/cask name as a regex query = string_or_regex = name - all_formulae, all_casks = search_names(query, string_or_regex, args) + all_formulae, all_casks = Search.search_names(query, string_or_regex, args) if all_formulae.any? ohai "Formulae", Formatter.columns(all_formulae) diff --git a/Library/Homebrew/cmd/search.rb b/Library/Homebrew/cmd/search.rb index bc0e6d01b1..ba56e35d74 100644 --- a/Library/Homebrew/cmd/search.rb +++ b/Library/Homebrew/cmd/search.rb @@ -12,8 +12,6 @@ module Homebrew module_function - extend Search - PACKAGE_MANAGERS = { repology: ->(query) { "https://repology.org/projects/?search=#{query}" }, macports: ->(query) { "https://ports.macports.org/search/?q=#{query}" }, @@ -76,17 +74,17 @@ module Homebrew return if search_package_manager(args) query = args.named.join(" ") - string_or_regex = query_regexp(query) + string_or_regex = Search.query_regexp(query) if args.desc? if !args.eval_all? && !Homebrew::EnvConfig.eval_all? odeprecated "brew search --desc", "brew search --desc --eval-all or HOMEBREW_EVAL_ALL" end - search_descriptions(string_or_regex, args) + Search.search_descriptions(string_or_regex, args) elsif args.pull_request? search_pull_requests(query, args) else - formulae, casks = search_names(query, string_or_regex, args) + formulae, casks = Search.search_names(query, string_or_regex, args) print_results(formulae, casks, query) end diff --git a/Library/Homebrew/descriptions.rb b/Library/Homebrew/descriptions.rb index 9382bc2107..ff252b5798 100644 --- a/Library/Homebrew/descriptions.rb +++ b/Library/Homebrew/descriptions.rb @@ -3,15 +3,12 @@ require "formula" require "formula_versions" -require "search" require "searchable" # Helper class for printing and searching descriptions. # # @api private class Descriptions - extend Homebrew::Search - # Given a regex, find all formulae whose specified fields contain a match. def self.search(string_or_regex, field, cache_store, eval_all = Homebrew::EnvConfig.eval_all?) cache_store.populate_if_empty!(eval_all: eval_all) diff --git a/Library/Homebrew/search.rb b/Library/Homebrew/search.rb index c2ec5419f5..4b265f88d7 100644 --- a/Library/Homebrew/search.rb +++ b/Library/Homebrew/search.rb @@ -9,7 +9,7 @@ module Homebrew # # @api private module Search - def query_regexp(query) + def self.query_regexp(query) if (m = query.match(%r{^/(.*)/$})) Regexp.new(m[1]) else @@ -19,7 +19,7 @@ module Homebrew raise "#{query} is not a valid regex." end - def search_descriptions(string_or_regex, args, search_type: :desc) + def self.search_descriptions(string_or_regex, args, search_type: :desc) both = !args.formula? && !args.cask? eval_all = args.eval_all? || Homebrew::EnvConfig.eval_all? @@ -41,7 +41,7 @@ module Homebrew end end - def search_taps(query, silent: false) + def self.search_taps(query, silent: false) if query.match?(Regexp.union(HOMEBREW_TAP_FORMULA_REGEX, HOMEBREW_TAP_CASK_REGEX)) _, _, query = query.split("/", 3) end @@ -86,7 +86,7 @@ module Homebrew results end - def search_formulae(string_or_regex) + def self.search_formulae(string_or_regex) if string_or_regex.is_a?(String) && string_or_regex.match?(HOMEBREW_TAP_FORMULA_REGEX) return begin [Formulary.factory(string_or_regex).name] @@ -122,7 +122,7 @@ module Homebrew end.compact end - def search_casks(string_or_regex) + def self.search_casks(string_or_regex) if string_or_regex.is_a?(String) && string_or_regex.match?(HOMEBREW_TAP_CASK_REGEX) return begin [Cask::CaskLoader.load(string_or_regex).token] @@ -151,7 +151,7 @@ module Homebrew end.uniq end - def search_names(query, string_or_regex, args) + def self.search_names(query, string_or_regex, args) both = !args.formula? && !args.cask? remote_results = search_taps(query, silent: true) diff --git a/Library/Homebrew/test/search_spec.rb b/Library/Homebrew/test/search_spec.rb index 56949f2340..ef3f383919 100644 --- a/Library/Homebrew/test/search_spec.rb +++ b/Library/Homebrew/test/search_spec.rb @@ -4,12 +4,6 @@ require "search" describe Homebrew::Search do - subject(:mod) { Object.new } - - before do - mod.extend(described_class) - end - describe "#search_taps" do before do ENV.delete("HOMEBREW_NO_GITHUB_API") @@ -17,13 +11,13 @@ describe Homebrew::Search do it "does not raise if `HOMEBREW_NO_GITHUB_API` is set" do ENV["HOMEBREW_NO_GITHUB_API"] = "1" - expect(mod.search_taps("some-formula")).to match(formulae: [], casks: []) + expect(described_class.search_taps("some-formula")).to match(formulae: [], casks: []) end it "does not raise if the network fails" do allow(GitHub::API).to receive(:open_rest).and_raise(GitHub::API::Error) - expect(mod.search_taps("some-formula")) + expect(described_class.search_taps("some-formula")) .to match(formulae: [], casks: []) end @@ -47,22 +41,22 @@ describe Homebrew::Search do allow(GitHub::API).to receive(:open_rest).and_yield(json_response) - expect(mod.search_taps("some-formula")) + expect(described_class.search_taps("some-formula")) .to match(formulae: ["homebrew/foo/some-formula"], casks: ["homebrew/bar/some-cask"]) end end describe "#query_regexp" do it "correctly parses a regex query" do - expect(mod.query_regexp("/^query$/")).to eq(/^query$/) + expect(described_class.query_regexp("/^query$/")).to eq(/^query$/) end it "returns the original string if it is not a regex query" do - expect(mod.query_regexp("query")).to eq("query") + expect(described_class.query_regexp("query")).to eq("query") end it "raises an error if the query is an invalid regex" do - expect { mod.query_regexp("/+/") }.to raise_error(/not a valid regex/) + expect { described_class.query_regexp("/+/") }.to raise_error(/not a valid regex/) end end end