From 2f3f017a6ee79dd7e0443f13951f4f54ae81e715 Mon Sep 17 00:00:00 2001 From: Michael Cho Date: Thu, 21 Dec 2023 14:05:29 -0500 Subject: [PATCH] rubocops/uses_from_macos: audit when `depends_on :linux` --- Library/Homebrew/rubocops/uses_from_macos.rb | 5 ++ .../test/rubocops/uses_from_macos_spec.rb | 49 +++++++++++++++---- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/Library/Homebrew/rubocops/uses_from_macos.rb b/Library/Homebrew/rubocops/uses_from_macos.rb index 33445382d4..d2efc9fe1e 100644 --- a/Library/Homebrew/rubocops/uses_from_macos.rb +++ b/Library/Homebrew/rubocops/uses_from_macos.rb @@ -98,7 +98,12 @@ module RuboCop def audit_formula(_node, _class_node, _parent_class_node, body_node) return if body_node.nil? + depends_on_linux = depends_on?(:linux) + find_method_with_args(body_node, :uses_from_macos, /^"(.+)"/).each do |method| + @offensive_node = method + problem "`uses_from_macos` should not be used when Linux is required." if depends_on_linux + dep = if parameters(method).first.instance_of?(RuboCop::AST::StrNode) parameters(method).first elsif parameters(method).first.instance_of?(RuboCop::AST::HashNode) diff --git a/Library/Homebrew/test/rubocops/uses_from_macos_spec.rb b/Library/Homebrew/test/rubocops/uses_from_macos_spec.rb index b4177bc781..626ff1e64c 100644 --- a/Library/Homebrew/test/rubocops/uses_from_macos_spec.rb +++ b/Library/Homebrew/test/rubocops/uses_from_macos_spec.rb @@ -5,16 +5,47 @@ require "rubocops/uses_from_macos" describe RuboCop::Cop::FormulaAudit::UsesFromMacos do subject(:cop) { described_class.new } - it "when auditing uses_from_macos dependencies" do - expect_offense(<<~RUBY) - class Foo < Formula - url "https://brew.sh/foo-1.0.tgz" - homepage "https://brew.sh" + context "when auditing `uses_from_macos` dependencies" do + it "reports an offense when used on non-macOS dependency" do + expect_offense(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + homepage "https://brew.sh" - uses_from_macos "postgresql" - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/UsesFromMacos: `uses_from_macos` should only be used for macOS dependencies, not postgresql. - end - RUBY + uses_from_macos "postgresql" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/UsesFromMacos: `uses_from_macos` should only be used for macOS dependencies, not postgresql. + end + RUBY + end + + it "reports offenses for multiple non-macOS dependencies and none for valid macOS dependencies" do + expect_offense(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + homepage "https://brew.sh" + + uses_from_macos "boost" + ^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/UsesFromMacos: `uses_from_macos` should only be used for macOS dependencies, not boost. + uses_from_macos "bzip2" + uses_from_macos "postgresql" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/UsesFromMacos: `uses_from_macos` should only be used for macOS dependencies, not postgresql. + uses_from_macos "zlib" + end + RUBY + end + + it "reports an offense when used in `depends_on :linux` formula" do + expect_offense(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + homepage "https://brew.sh" + + depends_on :linux + uses_from_macos "zlib" + ^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/UsesFromMacos: `uses_from_macos` should not be used when Linux is required. + end + RUBY + end end include_examples "formulae exist", described_class::ALLOWED_USES_FROM_MACOS_DEPS