audit: Port dependency rules from line_problems to rubocop and add tests
This commit is contained in:
parent
a49d99a2d6
commit
e1cb0b43d7
@ -909,16 +909,6 @@ class FormulaAuditor
|
|||||||
problem "\"#{Regexp.last_match(1)}\" should be \"\#{#{Regexp.last_match(2)}}\""
|
problem "\"#{Regexp.last_match(1)}\" should be \"\#{#{Regexp.last_match(2)}}\""
|
||||||
end
|
end
|
||||||
|
|
||||||
if line =~ /depends_on :(automake|autoconf|libtool)/
|
|
||||||
problem ":#{Regexp.last_match(1)} is deprecated. Usage should be \"#{Regexp.last_match(1)}\""
|
|
||||||
end
|
|
||||||
|
|
||||||
if line =~ /depends_on :apr/
|
|
||||||
problem ":apr is deprecated. Usage should be \"apr-util\""
|
|
||||||
end
|
|
||||||
|
|
||||||
problem ":tex is deprecated" if line =~ /depends_on :tex/
|
|
||||||
|
|
||||||
if line =~ /depends_on\s+['"](.+)['"]\s+=>\s+:(lua|perl|python|ruby)(\d*)/
|
if line =~ /depends_on\s+['"](.+)['"]\s+=>\s+:(lua|perl|python|ruby)(\d*)/
|
||||||
problem "#{Regexp.last_match(2)} modules should be vendored rather than use deprecated `depends_on \"#{Regexp.last_match(1)}\" => :#{Regexp.last_match(2)}#{Regexp.last_match(3)}`"
|
problem "#{Regexp.last_match(2)} modules should be vendored rather than use deprecated `depends_on \"#{Regexp.last_match(1)}\" => :#{Regexp.last_match(2)}#{Regexp.last_match(3)}`"
|
||||||
end
|
end
|
||||||
|
|||||||
@ -10,3 +10,4 @@ require_relative "./rubocops/legacy_patches_cop"
|
|||||||
require_relative "./rubocops/conflicts_cop"
|
require_relative "./rubocops/conflicts_cop"
|
||||||
require_relative "./rubocops/options_cop"
|
require_relative "./rubocops/options_cop"
|
||||||
require_relative "./rubocops/urls_cop"
|
require_relative "./rubocops/urls_cop"
|
||||||
|
require_relative "./rubocops/lines_cop"
|
||||||
|
|||||||
@ -124,7 +124,8 @@ module RuboCop
|
|||||||
|
|
||||||
case type
|
case type
|
||||||
when :required
|
when :required
|
||||||
type_match = !node.method_args.nil? && node.method_args.first.str_type?
|
type_match = !node.method_args.nil? &&
|
||||||
|
(node.method_args.first.str_type? || node.method_args.first.sym_type?)
|
||||||
if type_match && !name_match
|
if type_match && !name_match
|
||||||
name_match = node_equals?(node.method_args.first, name)
|
name_match = node_equals?(node.method_args.first, name)
|
||||||
end
|
end
|
||||||
|
|||||||
20
Library/Homebrew/rubocops/lines_cop.rb
Normal file
20
Library/Homebrew/rubocops/lines_cop.rb
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
require_relative "./extend/formula_cop"
|
||||||
|
|
||||||
|
module RuboCop
|
||||||
|
module Cop
|
||||||
|
module FormulaAudit
|
||||||
|
# This cop checks for various miscellaneous Homebrew coding styles
|
||||||
|
class Lines < FormulaCop
|
||||||
|
def audit_formula(_node, _class_node, _parent_class_node, _body_node)
|
||||||
|
[:automake, :autoconf, :libtool].each do |dependency|
|
||||||
|
next unless depends_on?(dependency)
|
||||||
|
problem ":#{dependency} is deprecated. Usage should be \"#{dependency}\""
|
||||||
|
end
|
||||||
|
|
||||||
|
problem ':apr is deprecated. Usage should be "apr-util"' if depends_on?(:apr)
|
||||||
|
problem ":tex is deprecated" if depends_on?(:tex)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
53
Library/Homebrew/test/rubocops/lines_cop_spec.rb
Normal file
53
Library/Homebrew/test/rubocops/lines_cop_spec.rb
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
require "rubocop"
|
||||||
|
require "rubocop/rspec/support"
|
||||||
|
require_relative "../../extend/string"
|
||||||
|
require_relative "../../rubocops/lines_cop"
|
||||||
|
|
||||||
|
describe RuboCop::Cop::FormulaAudit::Lines do
|
||||||
|
subject(:cop) { described_class.new }
|
||||||
|
|
||||||
|
context "When auditing lines" do
|
||||||
|
it "with correctable deprecated dependencies" do
|
||||||
|
formulae = [{
|
||||||
|
"dependency" => :automake,
|
||||||
|
"correct" => "automake",
|
||||||
|
}, {
|
||||||
|
"dependency" => :autoconf,
|
||||||
|
"correct" => "autoconf",
|
||||||
|
}, {
|
||||||
|
"dependency" => :libtool,
|
||||||
|
"correct" => "libtool",
|
||||||
|
}, {
|
||||||
|
"dependency" => :apr,
|
||||||
|
"correct" => "apr-util",
|
||||||
|
}, {
|
||||||
|
"dependency" => :tex,
|
||||||
|
}]
|
||||||
|
|
||||||
|
formulae.each do |formula|
|
||||||
|
source = <<-EOS.undent
|
||||||
|
class Foo < Formula
|
||||||
|
url 'http://example.com/foo-1.0.tgz'
|
||||||
|
depends_on :#{formula["dependency"]}
|
||||||
|
end
|
||||||
|
EOS
|
||||||
|
if formula.key?("correct")
|
||||||
|
offense = ":#{formula["dependency"]} is deprecated. Usage should be \"#{formula["correct"]}\""
|
||||||
|
else
|
||||||
|
offense = ":#{formula["dependency"]} is deprecated"
|
||||||
|
end
|
||||||
|
expected_offenses = [{ message: offense,
|
||||||
|
severity: :convention,
|
||||||
|
line: 3,
|
||||||
|
column: 2,
|
||||||
|
source: source }]
|
||||||
|
|
||||||
|
inspect_source(cop, source)
|
||||||
|
|
||||||
|
expected_offenses.zip(cop.offenses.reverse).each do |expected, actual|
|
||||||
|
expect_offense(expected, actual)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
x
Reference in New Issue
Block a user