Fix namespacing

This commit is contained in:
Douglas Eichelberger 2024-09-13 12:22:52 -07:00
parent 7cd329c116
commit bb80f063dc
22 changed files with 278 additions and 208 deletions

View File

@ -60,7 +60,7 @@ module Homebrew
return false if Homebrew::EnvConfig.no_verify_attestations? return false if Homebrew::EnvConfig.no_verify_attestations?
return true if Homebrew::EnvConfig.verify_attestations? return true if Homebrew::EnvConfig.verify_attestations?
return false if ENV.fetch("CI", false) return false if ENV.fetch("CI", false)
return false if OS.unsupported_configuration? return false if ::OS.unsupported_configuration?
# Always check credentials last to avoid unnecessary credential extraction. # Always check credentials last to avoid unnecessary credential extraction.
(Homebrew::EnvConfig.developer? || Homebrew::EnvConfig.devcmdrun?) && GitHub::API.credentials.present? (Homebrew::EnvConfig.developer? || Homebrew::EnvConfig.devcmdrun?) && GitHub::API.credentials.present?

View File

@ -394,10 +394,10 @@ module Homebrew
# On Linux, GCC installation can be moved so long as the whole directory tree is moved together: # On Linux, GCC installation can be moved so long as the whole directory tree is moved together:
# https://gcc-help.gcc.gnu.narkive.com/GnwuCA7l/moving-gcc-from-the-installation-path-is-it-allowed. # https://gcc-help.gcc.gnu.narkive.com/GnwuCA7l/moving-gcc-from-the-installation-path-is-it-allowed.
when Version.formula_optionally_versioned_regex(:gcc) when Version.formula_optionally_versioned_regex(:gcc)
Regexp.union(%r{#{cellar_regex}/gcc}, %r{#{prefix_regex}/opt/gcc}) if OS.linux? Regexp.union(%r{#{cellar_regex}/gcc}, %r{#{prefix_regex}/opt/gcc}) if ::OS.linux?
# binutils is relocatable for the same reason: https://github.com/Homebrew/brew/pull/11899#issuecomment-906804451. # binutils is relocatable for the same reason: https://github.com/Homebrew/brew/pull/11899#issuecomment-906804451.
when Version.formula_optionally_versioned_regex(:binutils) when Version.formula_optionally_versioned_regex(:binutils)
%r{#{cellar_regex}/binutils} if OS.linux? %r{#{cellar_regex}/binutils} if ::OS.linux?
end end
# rubocop:enable Homebrew/MoveToExtendOS # rubocop:enable Homebrew/MoveToExtendOS

View File

@ -116,12 +116,12 @@ module Homebrew
# TODO: Refactor and move to extend/os # TODO: Refactor and move to extend/os
# rubocop:disable Homebrew/MoveToExtendOS # rubocop:disable Homebrew/MoveToExtendOS
unless OS.mac? unless ::OS.mac?
bundle_args << "--tag" << "~needs_macos" << "--tag" << "~cask" bundle_args << "--tag" << "~needs_macos" << "--tag" << "~cask"
files = files.grep_v(%r{^test/(os/mac|cask)(/.*|_spec\.rb)$}) files = files.grep_v(%r{^test/(os/mac|cask)(/.*|_spec\.rb)$})
end end
unless OS.linux? unless ::OS.linux?
bundle_args << "--tag" << "~needs_linux" bundle_args << "--tag" << "~needs_linux"
files = files.grep_v(%r{^test/os/linux(/.*|_spec\.rb)$}) files = files.grep_v(%r{^test/os/linux(/.*|_spec\.rb)$})
end end

View File

@ -2,26 +2,30 @@
# frozen_string_literal: true # frozen_string_literal: true
module Homebrew module Homebrew
module CleanupLinux module OS
extend T::Helpers module Linux
module Cleanup
extend T::Helpers
requires_ancestor { Cleanup } requires_ancestor { Homebrew::Cleanup }
sig { returns(T::Boolean) } sig { returns(T::Boolean) }
def use_system_ruby? def use_system_ruby?
return false if Homebrew::EnvConfig.force_vendor_ruby? return false if Homebrew::EnvConfig.force_vendor_ruby?
rubies = [which("ruby"), which("ruby", ORIGINAL_PATHS)].compact rubies = [which("ruby"), which("ruby", ORIGINAL_PATHS)].compact
system_ruby = Pathname.new("/usr/bin/ruby") system_ruby = Pathname.new("/usr/bin/ruby")
rubies << system_ruby if system_ruby.exist? rubies << system_ruby if system_ruby.exist?
check_ruby_version = HOMEBREW_LIBRARY_PATH/"utils/ruby_check_version_script.rb" check_ruby_version = HOMEBREW_LIBRARY_PATH/"utils/ruby_check_version_script.rb"
rubies.uniq.any? do |ruby| rubies.uniq.any? do |ruby|
quiet_system ruby, "--enable-frozen-string-literal", "--disable=gems,did_you_mean,rubyopt", quiet_system ruby, "--enable-frozen-string-literal", "--disable=gems,did_you_mean,rubyopt",
check_ruby_version, RUBY_VERSION check_ruby_version, RUBY_VERSION
end
end
end end
end end
end end
end end
Homebrew::Cleanup.prepend(Homebrew::CleanupLinux) Homebrew::Cleanup.prepend(Homebrew::OS::Linux::Cleanup)

View File

@ -0,0 +1,33 @@
# typed: strict
# frozen_string_literal: true
module Homebrew
module OS
module Linux
module CLI
module Parser
extend T::Helpers
requires_ancestor { Homebrew::CLI::Parser }
sig { void }
def set_default_options
args["formula?"] = true if args.respond_to?(:formula?)
end
sig { void }
def validate_options
return unless args.respond_to?(:cask?)
return unless args.cask?
# NOTE: We don't raise an error here because we don't want
# to print the help page or a stack trace.
odie "Invalid `--cask` usage: Casks do not work on Linux"
end
end
end
end
end
end
Homebrew::CLI::Parser.prepend(Homebrew::OS::Linux::CLI::Parser)

View File

@ -95,11 +95,11 @@ module Homebrew
end end
def check_glibc_minimum_version def check_glibc_minimum_version
return unless OS::Linux::Glibc.below_minimum_version? return unless ::OS::Linux::Glibc.below_minimum_version?
<<~EOS <<~EOS
Your system glibc #{OS::Linux::Glibc.system_version} is too old. Your system glibc #{::OS::Linux::Glibc.system_version} is too old.
We only support glibc #{OS::Linux::Glibc.minimum_version} or later. We only support glibc #{::OS::Linux::Glibc.minimum_version} or later.
#{please_create_pull_requests} #{please_create_pull_requests}
We recommend updating to a newer version via your distribution's We recommend updating to a newer version via your distribution's
package manager, upgrading your distribution to the latest version, package manager, upgrading your distribution to the latest version,
@ -108,11 +108,11 @@ module Homebrew
end end
def check_kernel_minimum_version def check_kernel_minimum_version
return unless OS::Linux::Kernel.below_minimum_version? return unless ::OS::Linux::Kernel.below_minimum_version?
<<~EOS <<~EOS
Your Linux kernel #{OS.kernel_version} is too old. Your Linux kernel #{::OS.kernel_version} is too old.
We only support kernel #{OS::Linux::Kernel.minimum_version} or later. We only support kernel #{::OS::Linux::Kernel.minimum_version} or later.
You will be unable to use binary packages (bottles). You will be unable to use binary packages (bottles).
#{please_create_pull_requests} #{please_create_pull_requests}
We recommend updating to a newer version via your distribution's We recommend updating to a newer version via your distribution's

View File

@ -1,52 +1,58 @@
# typed: true # rubocop:disable Sorbet/StrictSigil # typed: true # rubocop:disable Sorbet/StrictSigil
# frozen_string_literal: true # frozen_string_literal: true
module FormulaLinux module Homebrew
extend T::Helpers module OS
module Linux
module Formula
extend T::Helpers
requires_ancestor { Formula } requires_ancestor { ::Formula }
sig { params(name: String, version: T.nilable(T.any(String, Integer))).returns(String) } sig { params(name: String, version: T.nilable(T.any(String, Integer))).returns(String) }
def shared_library(name, version = nil) def shared_library(name, version = nil)
suffix = if version == "*" || (name == "*" && version.blank?) suffix = if version == "*" || (name == "*" && version.blank?)
"{,.*}" "{,.*}"
elsif version.present? elsif version.present?
".#{version}" ".#{version}"
end
"#{name}.so#{suffix}"
end
sig { returns(String) }
def loader_path
"$ORIGIN"
end
sig { params(targets: T.nilable(T.any(Pathname, String))).void }
def deuniversalize_machos(*targets); end
sig { params(spec: SoftwareSpec).void }
def add_global_deps_to_spec(spec)
return unless DevelopmentTools.needs_build_formulae?
@global_deps ||= begin
dependency_collector = spec.dependency_collector
related_formula_names = Set.new([
name,
*aliases,
*versioned_formulae_names,
])
[
dependency_collector.gcc_dep_if_needed(related_formula_names),
dependency_collector.glibc_dep_if_needed(related_formula_names),
].compact.freeze
end
@global_deps.each { |dep| spec.dependency_collector.add(dep) }
end
sig { returns(T::Boolean) }
def valid_platform?
requirements.none?(MacOSRequirement)
end
end
end end
"#{name}.so#{suffix}"
end
sig { returns(String) }
def loader_path
"$ORIGIN"
end
sig { params(targets: T.nilable(T.any(Pathname, String))).void }
def deuniversalize_machos(*targets); end
sig { params(spec: SoftwareSpec).void }
def add_global_deps_to_spec(spec)
return unless DevelopmentTools.needs_build_formulae?
@global_deps ||= begin
dependency_collector = spec.dependency_collector
related_formula_names = Set.new([
name,
*aliases,
*versioned_formulae_names,
])
[
dependency_collector.gcc_dep_if_needed(related_formula_names),
dependency_collector.glibc_dep_if_needed(related_formula_names),
].compact.freeze
end
@global_deps.each { |dep| spec.dependency_collector.add(dep) }
end
sig { returns(T::Boolean) }
def valid_platform?
requirements.none?(MacOSRequirement)
end end
end end
Formula.prepend(FormulaLinux) Formula.prepend(Homebrew::OS::Linux::Formula)

View File

@ -78,7 +78,7 @@ module Homebrew
private_class_method :symlink_ld_so private_class_method :symlink_ld_so
def self.setup_preferred_gcc_libs def self.setup_preferred_gcc_libs
gcc_opt_prefix = HOMEBREW_PREFIX/"opt/#{OS::LINUX_PREFERRED_GCC_RUNTIME_FORMULA}" gcc_opt_prefix = HOMEBREW_PREFIX/"opt/#{::OS::LINUX_PREFERRED_GCC_RUNTIME_FORMULA}"
glibc_installed = (HOMEBREW_PREFIX/"opt/glibc/bin/ld.so").readable? glibc_installed = (HOMEBREW_PREFIX/"opt/glibc/bin/ld.so").readable?
return unless gcc_opt_prefix.readable? return unless gcc_opt_prefix.readable?

View File

@ -1,29 +0,0 @@
# typed: strict
# frozen_string_literal: true
module Homebrew
module CLI
module ParserLinux
extend T::Helpers
requires_ancestor { Homebrew::CLI::Parser }
sig { void }
def set_default_options
args["formula?"] = true if args.respond_to?(:formula?)
end
sig { void }
def validate_options
return unless args.respond_to?(:cask?)
return unless args.cask?
# NOTE: We don't raise an error here because we don't want
# to print the help page or a stack trace.
odie "Invalid `--cask` usage: Casks do not work on Linux"
end
end
end
end
Homebrew::CLI::Parser.prepend(Homebrew::CLI::ParserLinux)

View File

@ -1,13 +1,19 @@
# typed: strict # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
module CleanerMac module Homebrew
private module OS
module MacOS
module Cleaner
private
sig { params(path: Pathname).returns(T::Boolean) } sig { params(path: Pathname).returns(T::Boolean) }
def executable_path?(path) def executable_path?(path)
path.mach_o_executable? || path.text_executable? path.mach_o_executable? || path.text_executable?
end
end
end
end end
end end
Cleaner.prepend(CleanerMac) Cleaner.prepend(Homebrew::OS::MacOS::Cleaner)

View File

@ -2,14 +2,18 @@
# frozen_string_literal: true # frozen_string_literal: true
module Homebrew module Homebrew
module CleanupMac module OS
sig { returns(T::Boolean) } module MacOS
def use_system_ruby? module Cleanup
return false if Homebrew::EnvConfig.force_vendor_ruby? sig { returns(T::Boolean) }
def use_system_ruby?
return false if Homebrew::EnvConfig.force_vendor_ruby?
Homebrew::EnvConfig.developer? && ENV["HOMEBREW_USE_RUBY_FROM_PATH"].present? Homebrew::EnvConfig.developer? && ENV["HOMEBREW_USE_RUBY_FROM_PATH"].present?
end
end
end end
end end
end end
Homebrew::Cleanup.prepend(Homebrew::CleanupMac) Homebrew::Cleanup.prepend(Homebrew::OS::MacOS::Cleanup)

View File

@ -2,23 +2,27 @@
# frozen_string_literal: true # frozen_string_literal: true
module Homebrew module Homebrew
module DevCmd module OS
module BottleMac module MacOS
sig { returns(T::Array[String]) } module DevCmd
def tar_args module Bottle
if MacOS.version >= :catalina sig { returns(T::Array[String]) }
["--no-mac-metadata", "--no-acls", "--no-xattrs"].freeze def tar_args
else if ::MacOS.version >= :catalina
[].freeze ["--no-mac-metadata", "--no-acls", "--no-xattrs"].freeze
end else
end [].freeze
end
end
sig { params(gnu_tar_formula: Formula).returns(String) } sig { params(gnu_tar_formula: Formula).returns(String) }
def gnu_tar(gnu_tar_formula) def gnu_tar(gnu_tar_formula)
"#{gnu_tar_formula.opt_bin}/gtar" "#{gnu_tar_formula.opt_bin}/gtar"
end
end
end end
end end
end end
end end
Homebrew::DevCmd::Bottle.prepend(Homebrew::DevCmd::BottleMac) Homebrew::DevCmd::Bottle.prepend(Homebrew::OS::MacOS::DevCmd::Bottle)

View File

@ -110,9 +110,9 @@ module Homebrew
return if ENV["HOMEBREW_INTEGRATION_TEST"] return if ENV["HOMEBREW_INTEGRATION_TEST"]
who = +"We" who = +"We"
what = if OS::Mac.version.prerelease? what = if ::OS::Mac.version.prerelease?
"pre-release version" "pre-release version"
elsif OS::Mac.version.outdated_release? elsif ::OS::Mac.version.outdated_release?
who << " (and Apple)" who << " (and Apple)"
"old version" "old version"
end end
@ -149,7 +149,7 @@ module Homebrew
#{MacOS::Xcode.update_instructions} #{MacOS::Xcode.update_instructions}
EOS EOS
if OS::Mac.version.prerelease? if ::OS::Mac.version.prerelease?
current_path = Utils.popen_read("/usr/bin/xcode-select", "-p") current_path = Utils.popen_read("/usr/bin/xcode-select", "-p")
message += <<~EOS message += <<~EOS
If #{MacOS::Xcode.latest_version} is installed, you may need to: If #{MacOS::Xcode.latest_version} is installed, you may need to:

View File

@ -1,36 +1,41 @@
# typed: strict # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
module FormulaMac module Homebrew
extend T::Helpers module OS
module MacOS
module Formula
extend T::Helpers
requires_ancestor { Formula } requires_ancestor { ::Formula }
sig { returns(T::Boolean) } sig { returns(T::Boolean) }
def valid_platform? def valid_platform?
requirements.none?(LinuxRequirement) requirements.none?(LinuxRequirement)
end end
sig { sig {
params( params(
install_prefix: T.any(String, Pathname), install_prefix: T.any(String, Pathname),
install_libdir: T.any(String, Pathname), install_libdir: T.any(String, Pathname),
find_framework: String, find_framework: String,
).returns(T::Array[String]) ).returns(T::Array[String])
} }
def std_cmake_args(install_prefix: prefix, install_libdir: "lib", find_framework: "LAST") def std_cmake_args(install_prefix: prefix, install_libdir: "lib", find_framework: "LAST")
args = generic_std_cmake_args(install_prefix:, install_libdir:, args = generic_std_cmake_args(install_prefix:, install_libdir:, find_framework:)
find_framework:)
# Avoid false positives for clock_gettime support on 10.11. # Avoid false positives for clock_gettime support on 10.11.
# CMake cache entries for other weak symbols may be added here as needed. # CMake cache entries for other weak symbols may be added here as needed.
args << "-DHAVE_CLOCK_GETTIME:INTERNAL=0" if MacOS.version == "10.11" && MacOS::Xcode.version >= "8.0" args << "-DHAVE_CLOCK_GETTIME:INTERNAL=0" if ::MacOS.version == "10.11" && ::MacOS::Xcode.version >= "8.0"
# Ensure CMake is using the same SDK we are using. # Ensure CMake is using the same SDK we are using.
args << "-DCMAKE_OSX_SYSROOT=#{MacOS.sdk_for_formula(self).path}" if MacOS.sdk_root_needed? args << "-DCMAKE_OSX_SYSROOT=#{::MacOS.sdk_for_formula(self).path}" if ::MacOS.sdk_root_needed?
args args
end
end
end
end end
end end
Formula.prepend(FormulaMac) Formula.prepend(Homebrew::OS::MacOS::Formula)

View File

@ -1,16 +1,22 @@
# typed: strict # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
module FormulaInstallerMac module Homebrew
extend T::Helpers module OS
module MacOS
module FormulaInstaller
extend T::Helpers
requires_ancestor { FormulaInstaller } requires_ancestor { ::FormulaInstaller }
sig { params(formula: Formula).returns(T.nilable(T::Boolean)) } sig { params(formula: Formula).returns(T.nilable(T::Boolean)) }
def fresh_install?(formula) def fresh_install?(formula)
!Homebrew::EnvConfig.developer? && !OS::Mac.version.outdated_release? && !Homebrew::EnvConfig.developer? && !::OS::Mac.version.outdated_release? &&
(!installed_as_dependency? || !formula.any_version_installed?) (!installed_as_dependency? || !formula.any_version_installed?)
end
end
end
end end
end end
FormulaInstaller.prepend(FormulaInstallerMac) FormulaInstaller.prepend(Homebrew::OS::MacOS::FormulaInstaller)

View File

@ -1,14 +1,20 @@
# typed: strict # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
module LinkageCheckerMac module Homebrew
private module OS
module MacOS
module LinkageChecker
private
sig { returns(T::Boolean) } sig { returns(T::Boolean) }
def system_libraries_exist_in_cache? def system_libraries_exist_in_cache?
# In macOS Big Sur and later, system libraries do not exist on-disk and instead exist in a cache. # In macOS Big Sur and later, system libraries do not exist on-disk and instead exist in a cache.
MacOS.version >= :big_sur ::MacOS.version >= :big_sur
end
end
end
end end
end end
LinkageChecker.prepend(LinkageCheckerMac) LinkageChecker.prepend(Homebrew::OS::MacOS::LinkageChecker)

View File

@ -1,42 +1,48 @@
# typed: strict # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
module ReadallMac module Homebrew
extend T::Helpers module OS
module MacOS
module Readall
extend T::Helpers
requires_ancestor { Kernel } requires_ancestor { Kernel }
sig { params(tap: Tap, os_name: T.nilable(Symbol), arch: T.nilable(Symbol)).returns(T::Boolean) } sig { params(tap: Tap, os_name: T.nilable(Symbol), arch: T.nilable(Symbol)).returns(T::Boolean) }
def valid_casks?(tap, os_name: nil, arch: Hardware::CPU.type) def valid_casks?(tap, os_name: nil, arch: Hardware::CPU.type)
return true if os_name == :linux return true if os_name == :linux
current_macos_version = if os_name.is_a?(Symbol) current_macos_version = if os_name.is_a?(Symbol)
MacOSVersion.from_symbol(os_name) MacOSVersion.from_symbol(os_name)
else else
MacOS.version ::MacOS.version
end end
success = T.let(true, T::Boolean) success = T.let(true, T::Boolean)
tap.cask_files.each do |file| tap.cask_files.each do |file|
cask = Cask::CaskLoader.load(file) cask = Cask::CaskLoader.load(file)
# Fine to have missing URLs for unsupported macOS # Fine to have missing URLs for unsupported macOS
macos_req = cask.depends_on.macos macos_req = cask.depends_on.macos
next if macos_req&.version && Array(macos_req.version).none? do |macos_version| next if macos_req&.version && Array(macos_req.version).none? do |macos_version|
current_macos_version.compare(macos_req.comparator, macos_version) current_macos_version.compare(macos_req.comparator, macos_version)
end
raise "Missing URL" if cask.url.nil?
rescue Interrupt
raise
rescue Exception => e # rubocop:disable Lint/RescueException
os_and_arch = "macOS #{current_macos_version} on #{arch}"
onoe "Invalid cask (#{os_and_arch}): #{file}"
$stderr.puts e
success = false
end
success
end
end end
raise "Missing URL" if cask.url.nil?
rescue Interrupt
raise
rescue Exception => e # rubocop:disable Lint/RescueException
os_and_arch = "macOS #{current_macos_version} on #{arch}"
onoe "Invalid cask (#{os_and_arch}): #{file}"
$stderr.puts e
success = false
end end
success
end end
end end
Readall.singleton_class.prepend(ReadallMac) Readall.singleton_class.prepend(Homebrew::OS::MacOS::Readall)

View File

@ -2,17 +2,22 @@
# frozen_string_literal: true # frozen_string_literal: true
module Homebrew module Homebrew
module SimulateSystemMac module OS
sig { returns(T::Boolean) } module MacOS
def simulating_or_running_on_macos? module SimulateSystem
SimulateSystem.os.blank? || [:macos, *MacOSVersion::SYMBOLS.keys].include?(SimulateSystem.os) sig { returns(T::Boolean) }
end def simulating_or_running_on_macos?
Homebrew::SimulateSystem.os.blank? || [:macos,
*MacOSVersion::SYMBOLS.keys].include?(Homebrew::SimulateSystem.os)
end
sig { returns(Symbol) } sig { returns(Symbol) }
def current_os def current_os
SimulateSystem.os || MacOS.version.to_sym Homebrew::SimulateSystem.os || ::MacOS.version.to_sym
end
end
end end
end end
end end
Homebrew::SimulateSystem.singleton_class.prepend(Homebrew::SimulateSystemMac) Homebrew::SimulateSystem.singleton_class.prepend(Homebrew::OS::MacOS::SimulateSystem)

View File

@ -1,4 +1,4 @@
# typed: strict # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
require "extend/os/linux/parser" if OS.linux? require "extend/os/linux/cli/parser" if OS.linux?

View File

@ -504,9 +504,9 @@ module Homebrew
return unless @core_tap return unless @core_tap
return if formula.name != "glibc" return if formula.name != "glibc"
# Also allow LINUX_GLIBC_NEXT_CI_VERSION for when we're upgrading. # Also allow LINUX_GLIBC_NEXT_CI_VERSION for when we're upgrading.
return if [OS::LINUX_GLIBC_CI_VERSION, OS::LINUX_GLIBC_NEXT_CI_VERSION].include?(formula.version.to_s) return if [::OS::LINUX_GLIBC_CI_VERSION, ::OS::LINUX_GLIBC_NEXT_CI_VERSION].include?(formula.version.to_s)
problem "The glibc version must be #{OS::LINUX_GLIBC_CI_VERSION}, as needed by our CI on Linux. " \ problem "The glibc version must be #{::OS::LINUX_GLIBC_CI_VERSION}, as needed by our CI on Linux. " \
"The glibc formula is for users who have a system glibc with a lower version, " \ "The glibc formula is for users who have a system glibc with a lower version, " \
"which allows them to use our Linux bottles, which were compiled against system glibc on CI." "which allows them to use our Linux bottles, which were compiled against system glibc on CI."
end end

View File

@ -9,7 +9,7 @@ module RuboCop
MSG = "Move `OS.linux?` and `OS.mac?` calls to `extend/os`." MSG = "Move `OS.linux?` and `OS.mac?` calls to `extend/os`."
def_node_matcher :os_check?, <<~PATTERN def_node_matcher :os_check?, <<~PATTERN
(send (const nil? :OS) {:mac? | :linux?}) (send (const {nil? cbase} :OS) {:mac? | :linux?})
PATTERN PATTERN
def on_send(node) def on_send(node)

View File

@ -18,4 +18,18 @@ RSpec.describe RuboCop::Cop::Homebrew::MoveToExtendOS do
^^^^^^^ Homebrew/MoveToExtendOS: Move `OS.linux?` and `OS.mac?` calls to `extend/os`. ^^^^^^^ Homebrew/MoveToExtendOS: Move `OS.linux?` and `OS.mac?` calls to `extend/os`.
RUBY RUBY
end end
it "registers an offense when using `::OS.linux?`" do
expect_offense(<<~RUBY)
::OS.linux?
^^^^^^^^^^^ Homebrew/MoveToExtendOS: Move `OS.linux?` and `OS.mac?` calls to `extend/os`.
RUBY
end
it "registers an offense when using `::OS.mac?`" do
expect_offense(<<~RUBY)
::OS.mac?
^^^^^^^^^ Homebrew/MoveToExtendOS: Move `OS.linux?` and `OS.mac?` calls to `extend/os`.
RUBY
end
end end