diff options
| author | Gautham Goli | 2017-05-24 21:07:50 +0530 | 
|---|---|---|
| committer | Gautham Goli | 2017-07-13 12:41:43 +0530 | 
| commit | b8adc1a8aa59dffd063e70cb1ba78988c9745d8e (patch) | |
| tree | 271e811a07c3bda2d433231345ec8c82f62ecf10 | |
| parent | f1fa475c4fc6f82312368114bdd604d5752e743b (diff) | |
| download | brew-b8adc1a8aa59dffd063e70cb1ba78988c9745d8e.tar.bz2 | |
audit: Port audit_options non-strict rules to rubocop and add tests
| -rw-r--r-- | Library/.rubocop.yml | 3 | ||||
| -rw-r--r-- | Library/Homebrew/dev-cmd/audit.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/rubocops.rb | 1 | ||||
| -rw-r--r-- | Library/Homebrew/rubocops/extend/formula_cop.rb | 19 | ||||
| -rw-r--r-- | Library/Homebrew/rubocops/options_cop.rb | 20 | ||||
| -rw-r--r-- | Library/Homebrew/test/rubocops/options_cop_spec.rb | 31 | 
6 files changed, 65 insertions, 13 deletions
| diff --git a/Library/.rubocop.yml b/Library/.rubocop.yml index 6bfb669fd..db7a05d87 100644 --- a/Library/.rubocop.yml +++ b/Library/.rubocop.yml @@ -21,6 +21,9 @@ FormulaAudit/ChecksumCase:  FormulaAudit/Conflicts:    Enabled: true +FormulaAudit/Options: +  Enabled: true +  FormulaAuditStrict/BottleBlock:    Enabled: true diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 3bbfa461a..6a7292ea7 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -555,10 +555,6 @@ class FormulaAuditor    def audit_options      formula.options.each do |o| -      if o.name == "32-bit" -        problem "macOS has been 64-bit only since 10.6 so 32-bit options are deprecated." -      end -        next unless @strict        if o.name == "universal" diff --git a/Library/Homebrew/rubocops.rb b/Library/Homebrew/rubocops.rb index 81ea2fcf2..f673720a6 100644 --- a/Library/Homebrew/rubocops.rb +++ b/Library/Homebrew/rubocops.rb @@ -8,3 +8,4 @@ require_relative "./rubocops/caveats_cop"  require_relative "./rubocops/checksum_cop"  require_relative "./rubocops/legacy_patches_cop"  require_relative "./rubocops/conflicts_cop" +require_relative "./rubocops/options_cop" diff --git a/Library/Homebrew/rubocops/extend/formula_cop.rb b/Library/Homebrew/rubocops/extend/formula_cop.rb index ddfb507d2..7165ee354 100644 --- a/Library/Homebrew/rubocops/extend/formula_cop.rb +++ b/Library/Homebrew/rubocops/extend/formula_cop.rb @@ -102,14 +102,11 @@ module RuboCop        # Returns nil if does not depend on dependency_name        # args: node - dependency_name - dependency's name -      def depends_on?(dependency_name) +      def depends_on?(dependency_name, *types) +        types = [:required, :build, :optional, :recommended, :run] if types.empty?          dependency_nodes = find_every_method_call_by_name(@body, :depends_on)          idx = dependency_nodes.index do |n| -          depends_on_name_type?(n, dependency_name, :required) || -            depends_on_name_type?(n, dependency_name, :build) || -            depends_on_name_type?(n, dependency_name, :optional) || -            depends_on_name_type?(n, dependency_name, :recommended) || -            depends_on_name_type?(n, dependency_name, :run) +          types.any? { |type| depends_on_name_type?(n, dependency_name, type) }          end          return if idx.nil?          @offense_source_range = dependency_nodes[idx].source_range @@ -138,6 +135,8 @@ module RuboCop            if type_match && !name_match              name_match = node_equals?(node.method_args.first.keys.first.children.first, name)            end +        else +          type_match = false          end          if type_match || name_match @@ -334,11 +333,13 @@ module RuboCop        def string_content(node)          case node.type          when :str -          return node.str_content if node.type == :str +          node.str_content          when :dstr -          return node.each_child_node(:str).map(&:str_content).join("") if node.type == :dstr +          node.each_child_node(:str).map(&:str_content).join("")          when :const -          return node.const_name if node.type == :const +          node.const_name +        when :sym +          node.children.first.to_s          else            ""          end diff --git a/Library/Homebrew/rubocops/options_cop.rb b/Library/Homebrew/rubocops/options_cop.rb new file mode 100644 index 000000000..83d853f10 --- /dev/null +++ b/Library/Homebrew/rubocops/options_cop.rb @@ -0,0 +1,20 @@ +require_relative "./extend/formula_cop" + +module RuboCop +  module Cop +    module FormulaAudit +      # This cop audits `options` in Formulae +      class Options < FormulaCop +        DEPRECATION_MSG = "macOS has been 64-bit only since 10.6 so 32-bit options are deprecated.".freeze + +        def audit_formula(_node, _class_node, _parent_class_node, body_node) +          option_call_nodes = find_every_method_call_by_name(body_node, :option) +          option_call_nodes.each do |option_call| +            option = parameters(option_call).first +            problem DEPRECATION_MSG if regex_match_group(option, /32-bit/) +          end +        end +      end +    end +  end +end diff --git a/Library/Homebrew/test/rubocops/options_cop_spec.rb b/Library/Homebrew/test/rubocops/options_cop_spec.rb new file mode 100644 index 000000000..0ed3a9741 --- /dev/null +++ b/Library/Homebrew/test/rubocops/options_cop_spec.rb @@ -0,0 +1,31 @@ +require "rubocop" +require "rubocop/rspec/support" +require_relative "../../extend/string" +require_relative "../../rubocops/options_cop" + +describe RuboCop::Cop::FormulaAudit::Options do +  subject(:cop) { described_class.new } + +  context "When auditing options" do +    it "32-bit" do +      source = <<-EOS.undent +        class Foo < Formula +          url 'http://example.com/foo-1.0.tgz' +          option "32-bit", "with 32-bit" +        end +      EOS + +      expected_offenses = [{  message: described_class::DEPRECATION_MSG, +                              severity: :convention, +                              line: 3, +                              column: 10, +                              source: source }] + +      inspect_source(cop, source) + +      expected_offenses.zip(cop.offenses).each do |expected, actual| +        expect_offense(expected, actual) +      end +    end +  end +end | 
