rubocops: Detect unordered stanzas in non-on_* blocks in formulae
- Previously this components order cop only checked for correct stanza order inside `on_*` blocks. This commit extends this cop to also check for correct stanza order inside `head` and `resource` blocks. This is a positive change since it standardizes the order of stanzas in all of the places, making formulae more readable. - Fixes issue 14017.
This commit is contained in:
parent
d43ba7c306
commit
2d781d23e0
@ -27,6 +27,11 @@ module RuboCop
|
||||
[{ name: :patch, type: :method_call }, { name: :patch, type: :block_call }],
|
||||
]
|
||||
|
||||
head_blocks = find_blocks(body_node, :head)
|
||||
head_blocks.each do |head_block|
|
||||
check_block_component_order(FORMULA_COMPONENT_PRECEDENCE_LIST, head_block)
|
||||
end
|
||||
|
||||
on_system_methods.each do |on_method|
|
||||
on_method_blocks = find_blocks(body_node, on_method)
|
||||
next if on_method_blocks.empty?
|
||||
@ -41,6 +46,8 @@ module RuboCop
|
||||
|
||||
resource_blocks = find_blocks(body_node, :resource)
|
||||
resource_blocks.each do |resource_block|
|
||||
check_block_component_order(FORMULA_COMPONENT_PRECEDENCE_LIST, resource_block)
|
||||
|
||||
on_system_blocks = {}
|
||||
|
||||
on_system_methods.each do |on_method|
|
||||
@ -111,6 +118,11 @@ module RuboCop
|
||||
end
|
||||
end
|
||||
|
||||
def check_block_component_order(component_precedence_list, block)
|
||||
@present_components, offensive_node = check_order(component_precedence_list, block.body)
|
||||
component_problem(*offensive_node) if offensive_node
|
||||
end
|
||||
|
||||
def check_on_system_block_content(component_precedence_list, on_system_block)
|
||||
if on_system_block.body.block_type? && !on_system_methods.include?(on_system_block.body.method_name) # rubocop:disable Style/InverseMethods (false positive)
|
||||
offending_node(on_system_block)
|
||||
|
||||
@ -803,7 +803,37 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do
|
||||
RUBY
|
||||
end
|
||||
|
||||
context "when in a head block" do
|
||||
it "reports an offense if stanzas inside `head` blocks are out of order" do
|
||||
expect_offense(<<~RUBY)
|
||||
class Foo < Formula
|
||||
homepage "https://brew.sh"
|
||||
|
||||
head do
|
||||
depends_on "bar"
|
||||
url "https://github.com/foo/foo.git", branch: "main"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `url` (line 6) should be put before `depends_on` (line 5)
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
end
|
||||
|
||||
context "when in a resource block" do
|
||||
it "reports an offense if stanzas inside `resource` blocks are out of order" do
|
||||
expect_offense(<<~RUBY)
|
||||
class Foo < Formula
|
||||
homepage "https://brew.sh"
|
||||
|
||||
resource do
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
url "https://brew.sh/resource1.tar.gz"
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `url` (line 6) should be put before `sha256` (line 5)
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
it "reports no offenses for a valid `on_macos` and `on_linux` block" do
|
||||
expect_no_offenses(<<~RUBY)
|
||||
class Foo < Formula
|
||||
@ -1106,16 +1136,15 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
|
||||
resource do
|
||||
on_intel do
|
||||
url "https://brew.sh/resource2.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
|
||||
on_arm do
|
||||
^^^^^^^^^ `on_arm` blocks within `resource` blocks must contain at least `url` and `sha256` and at most `url`, `mirror`, `version` and `sha256` (in order).
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
url "https://brew.sh/resource2.tar.gz"
|
||||
end
|
||||
on_intel do
|
||||
url "https://brew.sh/resource2.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
@ -1127,11 +1156,6 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
|
||||
resource do
|
||||
on_intel do
|
||||
url "https://brew.sh/resource2.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
|
||||
on_arm do
|
||||
if foo == :bar
|
||||
url "https://brew.sh/resource2.tar.gz"
|
||||
@ -1141,6 +1165,10 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do
|
||||
sha256 "686372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
on_intel do
|
||||
url "https://brew.sh/resource2.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
@ -1152,11 +1180,6 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
|
||||
resource do
|
||||
on_intel do
|
||||
url "https://brew.sh/resource2.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
|
||||
on_arm do
|
||||
^^^^^^^^^ `on_arm` blocks within `resource` blocks must contain at least `url` and `sha256` and at most `url`, `mirror`, `version` and `sha256` (in order).
|
||||
if foo == :bar
|
||||
@ -1167,6 +1190,10 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do
|
||||
url "https://brew.sh/resource1.tar.gz"
|
||||
end
|
||||
end
|
||||
on_intel do
|
||||
url "https://brew.sh/resource2.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user