From c4da30230344247a8f61655c48ee5df2ba8801d7 Mon Sep 17 00:00:00 2001 From: Seeker Date: Wed, 9 Dec 2020 08:55:51 -0800 Subject: [PATCH] on_macos/on_linux block: improve rubocop message Co-authored-by: Markus Reiter --- Library/Homebrew/rubocops.rb | 2 ++ Library/Homebrew/rubocops/components_order.rb | 17 ++++++++--------- .../test/rubocops/components_order_spec.rb | 4 ++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Library/Homebrew/rubocops.rb b/Library/Homebrew/rubocops.rb index 85a8b7ae15..5c12c88151 100644 --- a/Library/Homebrew/rubocops.rb +++ b/Library/Homebrew/rubocops.rb @@ -3,6 +3,8 @@ require_relative "load_path" +require "active_support/core_ext/array/conversions" + require "utils/sorbet" require "rubocop-performance" diff --git a/Library/Homebrew/rubocops/components_order.rb b/Library/Homebrew/rubocops/components_order.rb index e23a2dfa2b..11b7bc7a4f 100644 --- a/Library/Homebrew/rubocops/components_order.rb +++ b/Library/Homebrew/rubocops/components_order.rb @@ -135,6 +135,7 @@ module RuboCop end def check_on_os_block_content(component_precedence_list, on_os_block) + on_os_allowed_methods = %w[depends_on patch resource deprecate! disable!] _, offensive_node = check_order(component_precedence_list, on_os_block.body) component_problem(*offensive_node) if offensive_node child_nodes = on_os_block.body.begin_type? ? on_os_block.body.child_nodes : [on_os_block.body] @@ -145,16 +146,14 @@ module RuboCop method_type = child.send_type? || child.block_type? next unless method_type - valid_node ||= child.method_name.to_s == "patch" - valid_node ||= child.method_name.to_s == "resource" - valid_node ||= child.method_name.to_s == "deprecate!" - valid_node ||= child.method_name.to_s == "disable!" + valid_node ||= on_os_allowed_methods.include? child.method_name.to_s - @offensive_node = on_os_block - @offense_source_range = on_os_block.source_range - unless valid_node - problem "`#{on_os_block.method_name}` can only include `depends_on`, `patch` and `resource` nodes." - end + @offensive_node = child + @offense_source_range = child.source_range + next if valid_node + + problem "`#{on_os_block.method_name}` cannot include `#{child.method_name}`. " \ + "Only #{on_os_allowed_methods.map { |m| "`#{m}`" }.to_sentence} are allowed." end end diff --git a/Library/Homebrew/test/rubocops/components_order_spec.rb b/Library/Homebrew/test/rubocops/components_order_spec.rb index a6ae5c73c0..0798d09c4d 100644 --- a/Library/Homebrew/test/rubocops/components_order_spec.rb +++ b/Library/Homebrew/test/rubocops/components_order_spec.rb @@ -390,9 +390,9 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do class Foo < Formula url "https://brew.sh/foo-1.0.tgz" on_macos do - ^^^^^^^^^^^ `on_macos` can only include `depends_on`, `patch` and `resource` nodes. depends_on "readline" uses_from_macos "ncurses" + ^^^^^^^^^^^^^^^^^^^^^^^^^ `on_macos` cannot include `uses_from_macos`. [...] end end RUBY @@ -403,9 +403,9 @@ describe RuboCop::Cop::FormulaAudit::ComponentsOrder do class Foo < Formula url "https://brew.sh/foo-1.0.tgz" on_linux do - ^^^^^^^^^^^ `on_linux` can only include `depends_on`, `patch` and `resource` nodes. depends_on "readline" uses_from_macos "ncurses" + ^^^^^^^^^^^^^^^^^^^^^^^^^ `on_linux` cannot include `uses_from_macos`. [...] end end RUBY