aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/rubocops/components_redundancy_cop.rb
diff options
context:
space:
mode:
authorGautham Goli2017-04-08 15:10:44 +0530
committerGautham Goli2017-04-22 21:53:16 +0530
commit413a7e5daebb93f75f8b4839dfd61e42d49b070e (patch)
treeaadfe978623102594682262ff27e5bffc286b057 /Library/Homebrew/rubocops/components_redundancy_cop.rb
parent044bd974e435dabfebf5385cb5649f8ddb34de94 (diff)
downloadbrew-413a7e5daebb93f75f8b4839dfd61e42d49b070e.tar.bz2
Port audit_components method to rubocops and add corresponding tests
Diffstat (limited to 'Library/Homebrew/rubocops/components_redundancy_cop.rb')
-rw-r--r--Library/Homebrew/rubocops/components_redundancy_cop.rb33
1 files changed, 33 insertions, 0 deletions
diff --git a/Library/Homebrew/rubocops/components_redundancy_cop.rb b/Library/Homebrew/rubocops/components_redundancy_cop.rb
new file mode 100644
index 000000000..3d95d6c05
--- /dev/null
+++ b/Library/Homebrew/rubocops/components_redundancy_cop.rb
@@ -0,0 +1,33 @@
+require_relative "./extend/formula_cop"
+
+module RuboCop
+ module Cop
+ module Homebrew
+ # This cop checks if redundant components are present and other component errors
+ #
+ # - `url|checksum|mirror` should be inside `stable` block
+ # - `head` and `head do` should not be simultaneously present
+ # - `bottle :unneeded/:disable` and `bottle do` should not be simultaneously present
+
+ class ComponentsRedundancy < FormulaCop
+ HEAD_MSG = "`head` and `head do` should not be simultaneously present".freeze
+ BOTTLE_MSG = "`bottle :modifier` and `bottle do` should not be simultaneously present".freeze
+
+ def audit_formula(_node, _class_node, _parent_class_node, formula_class_body_node)
+ stable_block = find_block(formula_class_body_node, :stable)
+ if stable_block
+ [:url, :sha256, :mirror].each do |method_name|
+ problem "`#{method_name}` should be put inside `stable` block" if method_called?(formula_class_body_node, method_name)
+ end
+ end
+
+ problem HEAD_MSG if method_called?(formula_class_body_node, :head) &&
+ find_block(formula_class_body_node, :head)
+
+ problem BOTTLE_MSG if method_called?(formula_class_body_node, :bottle) &&
+ find_block(formula_class_body_node, :bottle)
+ end
+ end
+ end
+ end
+end