Merge pull request #2964 from GauthamGoli/audit_line_rubocop_part_1
audit: Port dependency rules from line_problems to rubocop and add tests
This commit is contained in:
		
						commit
						c3c3575b70
					
				@ -909,16 +909,6 @@ class FormulaAuditor
 | 
			
		||||
      problem "\"#{Regexp.last_match(1)}\" should be \"\#{#{Regexp.last_match(2)}}\""
 | 
			
		||||
    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*)/
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
@ -10,3 +10,4 @@ require_relative "./rubocops/legacy_patches_cop"
 | 
			
		||||
require_relative "./rubocops/conflicts_cop"
 | 
			
		||||
require_relative "./rubocops/options_cop"
 | 
			
		||||
require_relative "./rubocops/urls_cop"
 | 
			
		||||
require_relative "./rubocops/lines_cop"
 | 
			
		||||
 | 
			
		||||
@ -124,7 +124,8 @@ module RuboCop
 | 
			
		||||
 | 
			
		||||
        case type
 | 
			
		||||
        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
 | 
			
		||||
            name_match = node_equals?(node.method_args.first, name)
 | 
			
		||||
          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