Merge pull request #13539 from Rylan12/on-system-components-order
Add `on_system` to and reorder component order cop
This commit is contained in:
commit
32fd237705
@ -29,6 +29,10 @@ FORMULA_COMPONENT_PRECEDENCE_LIST = [
|
||||
[{ name: :depends_on, type: :method_call }],
|
||||
[{ name: :uses_from_macos, type: :method_call }],
|
||||
[{ name: :on_macos, type: :block_call }],
|
||||
*MacOSVersions::SYMBOLS.keys.map do |os_name|
|
||||
[{ name: :"on_#{os_name}", type: :block_call }]
|
||||
end,
|
||||
[{ name: :on_system, type: :block_call }],
|
||||
[{ name: :on_linux, type: :block_call }],
|
||||
[{ name: :on_arm, type: :block_call }],
|
||||
[{ name: :on_intel, type: :block_call }],
|
||||
|
||||
@ -15,7 +15,7 @@ module RuboCop
|
||||
extend AutoCorrector
|
||||
|
||||
def on_system_methods
|
||||
@on_system_methods ||= [:intel, :arm, :macos, :linux, *MacOSVersions::SYMBOLS.keys].map do |m|
|
||||
@on_system_methods ||= [:intel, :arm, :macos, :linux, :system, *MacOSVersions::SYMBOLS.keys].map do |m|
|
||||
:"on_#{m}"
|
||||
end
|
||||
end
|
||||
@ -116,6 +116,15 @@ module RuboCop
|
||||
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)
|
||||
offending_node(on_system_block)
|
||||
problem "Nest `#{on_system_block.method_name}` blocks inside `#{on_system_block.body.method_name}` " \
|
||||
"blocks when there is only one inner block." do |corrector|
|
||||
original_source = on_system_block.source.split("\n")
|
||||
new_source = [original_source.second, original_source.first, *original_source.drop(2)]
|
||||
corrector.replace(on_system_block.source_range, new_source.join("\n"))
|
||||
end
|
||||
end
|
||||
on_system_allowed_methods = %w[
|
||||
depends_on
|
||||
patch
|
||||
|
||||
@ -679,6 +679,130 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do
|
||||
RUBY
|
||||
end
|
||||
|
||||
it "reports an offense when a single `patch` block is inside the `on_arm` block" do
|
||||
expect_offense(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
on_arm do
|
||||
^^^^^^^^^ Nest `on_arm` blocks inside `patch` blocks when there is only one inner block.
|
||||
patch do
|
||||
url "https://brew.sh/patch1.tar.gz"
|
||||
sha256 "2c39089f64d9d4c3e632f120894b36b68dcc8ae8c6f5130c0c2e6f5bb7aebf2f"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
expect_correction(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
patch do
|
||||
on_arm do
|
||||
url "https://brew.sh/patch1.tar.gz"
|
||||
sha256 "2c39089f64d9d4c3e632f120894b36b68dcc8ae8c6f5130c0c2e6f5bb7aebf2f"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
it "reports an offense when a single `resource` block is inside the `on_linux` block" do
|
||||
expect_offense(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
on_linux do
|
||||
^^^^^^^^^^^ Nest `on_linux` blocks inside `resource` blocks when there is only one inner block.
|
||||
resource do
|
||||
url "https://brew.sh/resource1.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
expect_correction(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
resource do
|
||||
on_linux do
|
||||
url "https://brew.sh/resource1.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
it "reports an offense when a single `patch` block is inside the `on_monterey :or_newer` block" do
|
||||
expect_offense(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
on_monterey :or_newer do
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^ Nest `on_monterey` blocks inside `patch` blocks when there is only one inner block.
|
||||
patch do
|
||||
url "https://brew.sh/patch1.tar.gz"
|
||||
sha256 "2c39089f64d9d4c3e632f120894b36b68dcc8ae8c6f5130c0c2e6f5bb7aebf2f"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
expect_correction(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
patch do
|
||||
on_monterey :or_newer do
|
||||
url "https://brew.sh/patch1.tar.gz"
|
||||
sha256 "2c39089f64d9d4c3e632f120894b36b68dcc8ae8c6f5130c0c2e6f5bb7aebf2f"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
it "reports an offense when a single `resource` block is inside the `on_system` block" do
|
||||
expect_offense(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
on_system :linux, macos: :monterey_or_older do
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Nest `on_system` blocks inside `resource` blocks when there is only one inner block.
|
||||
resource do
|
||||
url "https://brew.sh/resource1.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
expect_correction(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
resource do
|
||||
on_system :linux, macos: :monterey_or_older do
|
||||
url "https://brew.sh/resource1.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
it "reports no offenses when a single `on_arm` block is inside the `on_macos` block" do
|
||||
expect_no_offenses(<<~RUBY)
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
on_macos do
|
||||
on_arm do
|
||||
resource do
|
||||
url "https://brew.sh/resource1.tar.gz"
|
||||
sha256 "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
end
|
||||
|
||||
context "when in a resource block" do
|
||||
it "reports no offenses for a valid `on_macos` and `on_linux` block" do
|
||||
expect_no_offenses(<<~RUBY)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user