aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorGautham Goli2017-07-31 14:30:37 +0530
committerGautham Goli2017-08-06 02:28:58 +0530
commit7614d2cc8be065c33f4e4e893ccd1f0995a05401 (patch)
tree8c18e57e87ac395a87eb2b4fa9c4c91f2aa7e606 /Library
parentaffd9055c2aaaf3535ed1cb778b65a4bee5ef0e2 (diff)
downloadbrew-7614d2cc8be065c33f4e4e893ccd1f0995a05401.tar.bz2
audit: Port FileUtils, inreplace audit rules in audit_lines to rubocop
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/dev-cmd/audit.rb11
-rw-r--r--Library/Homebrew/rubocops/extend/formula_cop.rb18
-rw-r--r--Library/Homebrew/rubocops/lines_cop.rb17
3 files changed, 31 insertions, 15 deletions
diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb
index 323b37170..cd5528cf5 100644
--- a/Library/Homebrew/dev-cmd/audit.rb
+++ b/Library/Homebrew/dev-cmd/audit.rb
@@ -809,17 +809,6 @@ class FormulaAuditor
end
def line_problems(line, _lineno)
- # FileUtils is included in Formula
- # encfs modifies a file with this name, so check for some leading characters
- if line =~ %r{[^'"/]FileUtils\.(\w+)}
- problem "Don't need 'FileUtils.' before #{Regexp.last_match(1)}."
- end
-
- # Check for long inreplace block vars
- if line =~ /inreplace .* do \|(.{2,})\|/
- problem "\"inreplace <filenames> do |s|\" is preferred over \"|#{Regexp.last_match(1)}|\"."
- end
-
# Check for string interpolation of single values.
if line =~ /(system|inreplace|gsub!|change_make_var!).*[ ,]"#\{([\w.]+)\}"/
problem "Don't need to interpolate \"#{Regexp.last_match(2)}\" with #{Regexp.last_match(1)}"
diff --git a/Library/Homebrew/rubocops/extend/formula_cop.rb b/Library/Homebrew/rubocops/extend/formula_cop.rb
index e7a23ecae..f8864538a 100644
--- a/Library/Homebrew/rubocops/extend/formula_cop.rb
+++ b/Library/Homebrew/rubocops/extend/formula_cop.rb
@@ -85,9 +85,13 @@ module RuboCop
end
# Returns an array of method call nodes matching method_name in every descendant of node
- def find_every_method_call_by_name(node, method_name)
+ # Returns every method call if no method_name is passed
+ def find_every_method_call_by_name(node, method_name = nil)
return if node.nil?
- node.each_descendant(:send).select { |method_node| method_name == method_node.method_name }
+ node.each_descendant(:send).select do |method_node|
+ method_name.nil? ||
+ method_name == method_node.method_name
+ end
end
# Given a method_name and arguments, yields to a block with
@@ -107,7 +111,7 @@ module RuboCop
def find_instance_method_call(node, instance, method_name)
methods = find_every_method_call_by_name(node, method_name)
methods.each do |method|
- next unless method.receiver.const_name == instance
+ next unless method.receiver && method.receiver.const_name == instance
@offense_source_range = method.source_range
@offensive_node = method
yield method
@@ -188,9 +192,15 @@ module RuboCop
end
# Returns an array of block nodes of any depth below node in AST
+ # If a block is given then yields matching block node to the block!
def find_all_blocks(node, block_name)
return if node.nil?
- node.each_descendant(:block).select { |block_node| block_name == block_node.method_name }
+ blocks = node.each_descendant(:block).select { |block_node| block_name == block_node.method_name }
+ return blocks unless block_given?
+ blocks.each do |block_node|
+ offending_node(block_node)
+ yield block_node
+ end
end
# Returns a method definition node with method_name
diff --git a/Library/Homebrew/rubocops/lines_cop.rb b/Library/Homebrew/rubocops/lines_cop.rb
index abd46162f..ed50ba49c 100644
--- a/Library/Homebrew/rubocops/lines_cop.rb
+++ b/Library/Homebrew/rubocops/lines_cop.rb
@@ -52,6 +52,23 @@ module RuboCop
end
end
end
+
+ class Miscellaneous < FormulaCop
+ def audit_formula(_node, _class_node, _parent_class_node, body_node)
+ # FileUtils is included in Formula
+ # encfs modifies a file with this name, so check for some leading characters
+ find_instance_method_call(body_node, "FileUtils", nil) do |method_node|
+ problem "Don't need 'FileUtils.' before #{method_node.method_name}"
+ end
+
+ # Check for long inreplace block vars
+ find_all_blocks(body_node, :inreplace) do |node|
+ block_arg = node.arguments.children.first
+ next unless block_arg.source.size>1
+ problem "\"inreplace <filenames> do |s|\" is preferred over \"|#{block_arg.source}|\"."
+ end
+ end
+ end
end
end
end