aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMike McQuaid2017-12-02 17:22:14 +0000
committerGitHub2017-12-02 17:22:14 +0000
commit780e86904beff771e9f7e90fa9e53dd9dc4aeeaf (patch)
tree0253e150dbe91572867104116fb222bce826bc91 /Library
parente3a8f815b358e031895dba5a376abe5d20fe28dc (diff)
parentfb85ed01bc170e389dd62a2a2872d962b7dad5a6 (diff)
downloadbrew-780e86904beff771e9f7e90fa9e53dd9dc4aeeaf.tar.bz2
Merge pull request #3518 from GauthamGoli/audit_bug_fix
lines_cop: Convert ARGV audit to negative look ahead
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/rubocops/extend/formula_cop.rb16
-rw-r--r--Library/Homebrew/rubocops/lines_cop.rb7
-rw-r--r--Library/Homebrew/test/rubocops/lines_cop_spec.rb4
3 files changed, 21 insertions, 6 deletions
diff --git a/Library/Homebrew/rubocops/extend/formula_cop.rb b/Library/Homebrew/rubocops/extend/formula_cop.rb
index 1e7160bbd..9d16db36d 100644
--- a/Library/Homebrew/rubocops/extend/formula_cop.rb
+++ b/Library/Homebrew/rubocops/extend/formula_cop.rb
@@ -127,6 +127,22 @@ module RuboCop
end
end
+ # Matches receiver part of method,
+ # EX: to match `ARGV.<whatever>()`
+ # 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 d9e40c2de..fdc31078f 100644
--- a/Library/Homebrew/rubocops/lines_cop.rb
+++ b/Library/Homebrew/rubocops/lines_cop.rb
@@ -162,10 +162,9 @@ module RuboCop
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 de79fd7de..0d2146339 100644
--- a/Library/Homebrew/test/rubocops/lines_cop_spec.rb
+++ b/Library/Homebrew/test/rubocops/lines_cop_spec.rb
@@ -541,13 +541,12 @@ describe RuboCop::Cop::FormulaAudit::Miscellaneous do
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 @@ describe RuboCop::Cop::FormulaAudit::Miscellaneous do
test do
head = ARGV.include? "--HEAD"
^^^^^^ Use "if build.head?" instead
+ ^^^^ Use build instead of ARGV to check options
end
end
RUBY