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: :depends_on, type: :method_call }],
|
||||||
[{ name: :uses_from_macos, type: :method_call }],
|
[{ name: :uses_from_macos, type: :method_call }],
|
||||||
[{ name: :on_macos, type: :block_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_linux, type: :block_call }],
|
||||||
[{ name: :on_arm, type: :block_call }],
|
[{ name: :on_arm, type: :block_call }],
|
||||||
[{ name: :on_intel, type: :block_call }],
|
[{ name: :on_intel, type: :block_call }],
|
||||||
|
|||||||
@ -15,7 +15,7 @@ module RuboCop
|
|||||||
extend AutoCorrector
|
extend AutoCorrector
|
||||||
|
|
||||||
def on_system_methods
|
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}"
|
:"on_#{m}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -116,6 +116,15 @@ module RuboCop
|
|||||||
end
|
end
|
||||||
|
|
||||||
def check_on_system_block_content(component_precedence_list, on_system_block)
|
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[
|
on_system_allowed_methods = %w[
|
||||||
depends_on
|
depends_on
|
||||||
patch
|
patch
|
||||||
|
|||||||
@ -679,6 +679,130 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do
|
|||||||
RUBY
|
RUBY
|
||||||
end
|
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
|
context "when in a resource block" do
|
||||||
it "reports no offenses for a valid `on_macos` and `on_linux` block" do
|
it "reports no offenses for a valid `on_macos` and `on_linux` block" do
|
||||||
expect_no_offenses(<<~RUBY)
|
expect_no_offenses(<<~RUBY)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user