aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGautham Goli2017-05-24 21:07:50 +0530
committerGautham Goli2017-07-13 12:41:43 +0530
commitb8adc1a8aa59dffd063e70cb1ba78988c9745d8e (patch)
tree271e811a07c3bda2d433231345ec8c82f62ecf10
parentf1fa475c4fc6f82312368114bdd604d5752e743b (diff)
downloadbrew-b8adc1a8aa59dffd063e70cb1ba78988c9745d8e.tar.bz2
audit: Port audit_options non-strict rules to rubocop and add tests
-rw-r--r--Library/.rubocop.yml3
-rw-r--r--Library/Homebrew/dev-cmd/audit.rb4
-rw-r--r--Library/Homebrew/rubocops.rb1
-rw-r--r--Library/Homebrew/rubocops/extend/formula_cop.rb19
-rw-r--r--Library/Homebrew/rubocops/options_cop.rb20
-rw-r--r--Library/Homebrew/test/rubocops/options_cop_spec.rb31
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