Merge pull request #4044 from GauthamGoli/urls_cop_bug

urls_cop: Search for func calls to match `url` and `mirror` calls
This commit is contained in:
Mike McQuaid 2018-04-09 15:28:07 -07:00 committed by GitHub
commit 64ae942bab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 4 deletions

View File

@ -99,6 +99,17 @@ module RuboCop
end
end
# Returns array of function call nodes matching func_name in every descendant of node
# Ex. function call: foo(*args, **kwargs)
# Does not match method calls: foo.bar(*args, **kwargs)
# Returns every function calls if no func_name is passed
def find_every_func_call_by_name(node, func_name = nil)
return if node.nil?
node.each_descendant(:send).select do |func_node|
func_node.receiver.nil? && (func_name.nil? || func_name == func_node.method_name)
end
end
# Given a method_name and arguments, yields to a block with
# matching method passed as a parameter to the block
def find_method_with_args(node, method_name, *args)

View File

@ -6,8 +6,8 @@ module RuboCop
# This cop audits urls and mirrors in Formulae
class Urls < FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
urls = find_every_method_call_by_name(body_node, :url)
mirrors = find_every_method_call_by_name(body_node, :mirror)
urls = find_every_func_call_by_name(body_node, :url)
mirrors = find_every_func_call_by_name(body_node, :mirror)
# GNU urls; doesn't apply to mirrors
gnu_pattern = %r{^(?:https?|ftp)://ftpmirror.gnu.org/(.*)}
@ -195,8 +195,8 @@ module RuboCop
module FormulaAuditStrict
class PyPiUrls < FormulaCop
def audit_formula(_node, _class_node, _parent_class_node, body_node)
urls = find_every_method_call_by_name(body_node, :url)
mirrors = find_every_method_call_by_name(body_node, :mirror)
urls = find_every_func_call_by_name(body_node, :url)
mirrors = find_every_func_call_by_name(body_node, :mirror)
urls += mirrors
# Check pypi urls