Merge pull request #16413 from cho-m/rubocop-remove-stable-head-block
rubocops/components_redundancy: stable/head block removal
This commit is contained in:
commit
594ed2a91a
@ -8,16 +8,19 @@ module RuboCop
|
|||||||
module FormulaAudit
|
module FormulaAudit
|
||||||
# This cop checks if redundant components are present and for other component errors.
|
# This cop checks if redundant components are present and for other component errors.
|
||||||
#
|
#
|
||||||
# - `url|checksum|mirror` should be inside `stable` block
|
# - `url|checksum|mirror|version` should be inside `stable` block
|
||||||
# - `head` and `head do` should not be simultaneously present
|
# - `head` and `head do` should not be simultaneously present
|
||||||
# - `bottle :unneeded`/`:disable` and `bottle do` should not be simultaneously present
|
# - `bottle :unneeded`/`:disable` and `bottle do` should not be simultaneously present
|
||||||
# - `stable do` should not be present without a `head` spec
|
# - `stable do` should not be present without a `head` spec
|
||||||
|
# - `stable do` should not be present with only `url|checksum|mirror|version`
|
||||||
|
# - `head do` should not be present with only `url`
|
||||||
#
|
#
|
||||||
# @api private
|
# @api private
|
||||||
class ComponentsRedundancy < FormulaCop
|
class ComponentsRedundancy < FormulaCop
|
||||||
HEAD_MSG = "`head` and `head do` should not be simultaneously present"
|
HEAD_MSG = "`head` and `head do` should not be simultaneously present"
|
||||||
BOTTLE_MSG = "`bottle :modifier` and `bottle do` should not be simultaneously present"
|
BOTTLE_MSG = "`bottle :modifier` and `bottle do` should not be simultaneously present"
|
||||||
STABLE_MSG = "`stable do` should not be present without a `head` spec"
|
STABLE_MSG = "`stable do` should not be present without a `head` spec"
|
||||||
|
STABLE_BLOCK_METHODS = [:url, :sha256, :mirror, :version].freeze
|
||||||
|
|
||||||
def audit_formula(_node, _class_node, _parent_class_node, body_node)
|
def audit_formula(_node, _class_node, _parent_class_node, body_node)
|
||||||
return if body_node.nil?
|
return if body_node.nil?
|
||||||
@ -37,9 +40,24 @@ module RuboCop
|
|||||||
|
|
||||||
stable_block = find_block(body_node, :stable)
|
stable_block = find_block(body_node, :stable)
|
||||||
if stable_block
|
if stable_block
|
||||||
[:url, :sha256, :mirror].each do |method_name|
|
STABLE_BLOCK_METHODS.each do |method_name|
|
||||||
problem "`#{method_name}` should be put inside `stable` block" if method_called?(body_node, method_name)
|
problem "`#{method_name}` should be put inside `stable` block" if method_called?(body_node, method_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unless stable_block.body.nil?
|
||||||
|
child_nodes = stable_block.body.begin_type? ? stable_block.body.child_nodes : [stable_block.body]
|
||||||
|
if child_nodes.all? { |n| n.send_type? && STABLE_BLOCK_METHODS.include?(n.method_name) }
|
||||||
|
problem "`stable do` should not be present with only #{STABLE_BLOCK_METHODS.join("/")}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
head_block = find_block(body_node, :head)
|
||||||
|
if head_block && !head_block.body.nil?
|
||||||
|
child_nodes = head_block.body.begin_type? ? head_block.body.child_nodes : [head_block.body]
|
||||||
|
if child_nodes.all? { |n| n.send_type? && n.method_name == :url }
|
||||||
|
problem "`head do` should not be present with only `url`"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
problem HEAD_MSG if method_called?(body_node, :head) &&
|
problem HEAD_MSG if method_called?(body_node, :head) &&
|
||||||
|
|||||||
@ -72,5 +72,47 @@ describe RuboCop::Cop::FormulaAudit::ComponentsRedundancy do
|
|||||||
end
|
end
|
||||||
RUBY
|
RUBY
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "reports an offense if `stable do` or `head do` is present with only `url`" do
|
||||||
|
expect_offense(<<~RUBY)
|
||||||
|
class Foo < Formula
|
||||||
|
stable do
|
||||||
|
^^^^^^^^^ FormulaAudit/ComponentsRedundancy: `stable do` should not be present with only url/sha256/mirror/version
|
||||||
|
url "https://brew.sh/foo-1.0.tgz"
|
||||||
|
end
|
||||||
|
|
||||||
|
head do
|
||||||
|
^^^^^^^ FormulaAudit/ComponentsRedundancy: `head do` should not be present with only `url`
|
||||||
|
url "https://brew.sh/foo.git"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
RUBY
|
||||||
|
end
|
||||||
|
|
||||||
|
it "reports no offenses if `stable do` is present with `url` and `depends_on`" do
|
||||||
|
expect_no_offenses(<<~RUBY)
|
||||||
|
class Foo < Formula
|
||||||
|
head "https://brew.sh/foo.git"
|
||||||
|
|
||||||
|
stable do
|
||||||
|
url "https://brew.sh/foo-1.0.tgz"
|
||||||
|
depends_on "bar"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
RUBY
|
||||||
|
end
|
||||||
|
|
||||||
|
it "reports no offenses if `head do` is present with `url` and `depends_on`" do
|
||||||
|
expect_no_offenses(<<~RUBY)
|
||||||
|
class Foo < Formula
|
||||||
|
url "https://brew.sh/foo-1.0.tgz"
|
||||||
|
|
||||||
|
head do
|
||||||
|
url "https://brew.sh/foo.git"
|
||||||
|
depends_on "bar"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
RUBY
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user