diff --git a/Library/Homebrew/rubocops/extend/formula_cop.rb b/Library/Homebrew/rubocops/extend/formula_cop.rb index 1e7160bbd4ed9..9d16db36d5a0e 100644 --- a/Library/Homebrew/rubocops/extend/formula_cop.rb +++ b/Library/Homebrew/rubocops/extend/formula_cop.rb @@ -127,6 +127,22 @@ def find_instance_method_call(node, instance, method_name) end end + # Matches receiver part of method, + # EX: to match `ARGV.()` + # call `find_instance_call(node, "ARGV")` + # yields to a block with parent node of receiver + def find_instance_call(node, name) + node.each_descendant(:send) do |method_node| + next if method_node.receiver.nil? + next if method_node.receiver.const_name != name && + method_node.receiver.method_name != name + @offense_source_range = method_node.receiver.source_range + @offensive_node = method_node.receiver + return true unless block_given? + yield method_node + end + end + # Returns nil if does not depend on dependency_name # args: node - dependency_name - dependency's name def depends_on?(dependency_name, *types) diff --git a/Library/Homebrew/rubocops/lines_cop.rb b/Library/Homebrew/rubocops/lines_cop.rb index d9e40c2de5c30..fdc31078f3ffd 100644 --- a/Library/Homebrew/rubocops/lines_cop.rb +++ b/Library/Homebrew/rubocops/lines_cop.rb @@ -162,10 +162,9 @@ def audit_formula(_node, _class_node, _parent_class_node, body_node) end end - [:debug?, :verbose?, :value].each do |method_name| - find_instance_method_call(body_node, "ARGV", method_name) do - problem "Use build instead of ARGV to check options" - end + find_instance_call(body_node, "ARGV") do |method_node| + next if [:debug?, :verbose?, :value].index(method_node.method_name) + problem "Use build instead of ARGV to check options" end find_instance_method_call(body_node, :man, :+) do |method| diff --git a/Library/Homebrew/test/rubocops/lines_cop_spec.rb b/Library/Homebrew/test/rubocops/lines_cop_spec.rb index de79fd7de8276..0d2146339cc8b 100644 --- a/Library/Homebrew/test/rubocops/lines_cop_spec.rb +++ b/Library/Homebrew/test/rubocops/lines_cop_spec.rb @@ -541,13 +541,12 @@ class Foo < Formula end it "Using ARGV to check options" do - expect_offense(<<~RUBY) + expect_no_offenses(<<~RUBY) class Foo < Formula desc "foo" url 'http://example.com/foo-1.0.tgz' def install verbose = ARGV.verbose? - ^^^^^^^^^^^^^ Use build instead of ARGV to check options end end RUBY @@ -739,6 +738,7 @@ class Foo < Formula test do head = ARGV.include? "--HEAD" ^^^^^^ Use "if build.head?" instead + ^^^^ Use build instead of ARGV to check options end end RUBY