diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 0fa277417d..c8696f8cf4 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -753,34 +753,32 @@ class Tap end end - # Check whether the file has a Ruby extension. - sig { params(file: Pathname).returns(T::Boolean) } - def ruby_file?(file) - file.extname == ".rb" + sig { returns(Regexp) } + def formula_file_regex + @formula_file_regex ||= case formula_dir.basename.to_s + when "Formula" + %r{^Formula(/[^/]+)+\.rb$} + when "HomebrewFormula" + %r{^HomebrewFormula(/[^/]+)+\.rb$} + else + %r{^[^/]+\.rb$} + end end - private :ruby_file? + private :formula_file_regex - # Check whether the given path would present a {Formula} file in this {Tap}. - # Accepts either an absolute path or a path relative to this {Tap}'s path. - sig { params(file: T.any(String, Pathname)).returns(T::Boolean) } + # accepts the relative path of a file from {Tap}'s path + sig { params(file: String).returns(T::Boolean) } def formula_file?(file) - file = Pathname.new(file) unless file.is_a? Pathname - file = file.expand_path(path) - return false unless ruby_file?(file) - return false if cask_file?(file) - - file.to_s.start_with?("#{formula_dir}/") + file.match?(formula_file_regex) end - # Check whether the given path would present a {Cask} file in this {Tap}. - # Accepts either an absolute path or a path relative to this {Tap}'s path. - sig { params(file: T.any(String, Pathname)).returns(T::Boolean) } - def cask_file?(file) - file = Pathname.new(file) unless file.is_a? Pathname - file = file.expand_path(path) - return false unless ruby_file?(file) + CASK_FILE_REGEX = %r{^Casks(/[^/]+)+\.rb$} + private_constant :CASK_FILE_REGEX - file.to_s.start_with?("#{cask_dir}/") + # accepts the relative path of a file from {Tap}'s path + sig { params(file: String).returns(T::Boolean) } + def cask_file?(file) + file.match?(CASK_FILE_REGEX) end # An array of all {Formula} names of this {Tap}. diff --git a/Library/Homebrew/test/tap_spec.rb b/Library/Homebrew/test/tap_spec.rb index 25932e6eb7..adb60d9c38 100644 --- a/Library/Homebrew/test/tap_spec.rb +++ b/Library/Homebrew/test/tap_spec.rb @@ -201,7 +201,6 @@ RSpec.describe Tap do expect(homebrew_foo_tap.tap_migrations).to eq("removed-formula" => "homebrew/foo") expect(homebrew_foo_tap.command_files).to eq([cmd_file]) expect(homebrew_foo_tap.to_hash).to be_a(Hash) - expect(homebrew_foo_tap).to have_formula_file(formula_file) expect(homebrew_foo_tap).to have_formula_file("Formula/foo.rb") expect(homebrew_foo_tap).not_to have_formula_file("bar.rb") expect(homebrew_foo_tap).not_to have_formula_file("Formula/baz.sh")