diff --git a/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb b/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb index 5b1c788f3cb..f7a32568a9f 100644 --- a/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +++ b/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb @@ -33,7 +33,13 @@ class UselessRestrictOnSend < Base MSG = 'Useless `RESTRICT_ON_SEND` is defined.' # @!method defined_send_callback?(node) - def_node_search :defined_send_callback?, '(def {:on_send :after_send} ...)' + def_node_search :defined_send_callback?, <<~PATTERN + { + (def {:on_send :after_send} ...) + (alias (sym {:on_send :after_send}) _source ...) + (send nil? :alias_method {(sym {:on_send :after_send}) (str {"on_send" "after_send"})} _source ...) + } + PATTERN def on_casgn(node) return if !restrict_on_send?(node) || defined_send_callback?(node.parent) diff --git a/lib/rubocop/cop/style/top_level_method_definition.rb b/lib/rubocop/cop/style/top_level_method_definition.rb index 00dc6823109..4b94428b2ae 100644 --- a/lib/rubocop/cop/style/top_level_method_definition.rb +++ b/lib/rubocop/cop/style/top_level_method_definition.rb @@ -47,6 +47,8 @@ module Style class TopLevelMethodDefinition < Base MSG = 'Do not define methods at the top-level.' + RESTRICT_ON_SEND = %i[define_method].freeze + def on_def(node) return unless top_level_method_definition?(node) diff --git a/spec/rubocop/cop/internal_affairs/useless_restrict_on_send_spec.rb b/spec/rubocop/cop/internal_affairs/useless_restrict_on_send_spec.rb index 27dd7420244..5c90beb46a4 100644 --- a/spec/rubocop/cop/internal_affairs/useless_restrict_on_send_spec.rb +++ b/spec/rubocop/cop/internal_affairs/useless_restrict_on_send_spec.rb @@ -27,6 +27,30 @@ def on_send(node) RUBY end + it 'does not register an offense when using `RESTRICT_ON_SEND` and defines `on_send` with alias' do + expect_no_offenses(<<~RUBY) + class FooCop + RESTRICT_ON_SEND = %i[bad_method].freeze + def on_def(node) + # ... + end + alias on_send on_def + end + RUBY + end + + it 'does not register an offense when using `RESTRICT_ON_SEND` and defines `on_send` with alias_method' do + expect_no_offenses(<<~RUBY) + class FooCop + RESTRICT_ON_SEND = %i[bad_method].freeze + def on_def(node) + # ... + end + alias_method :on_send, :on_def + end + RUBY + end + it 'does not register an offense when using `RESTRICT_ON_SEND` and defines `after_send`' do expect_no_offenses(<<~RUBY) class FooCop @@ -37,4 +61,28 @@ def after_send(node) end RUBY end + + it 'does not register an offense when using `RESTRICT_ON_SEND` and defines `after_send` with alias' do + expect_no_offenses(<<~RUBY) + class FooCop + RESTRICT_ON_SEND = %i[bad_method].freeze + def after_send(node) + # ... + end + alias after_send any + end + RUBY + end + + it 'does not register an offense when using `RESTRICT_ON_SEND` and defines `after_send` with alias_method' do + expect_no_offenses(<<~RUBY) + class FooCop + RESTRICT_ON_SEND = %i[bad_method].freeze + def after_send(node) + # ... + end + self.alias_method "after_send", "any" + end + RUBY + end end diff --git a/spec/rubocop/cop/style/top_level_method_definition_spec.rb b/spec/rubocop/cop/style/top_level_method_definition_spec.rb index e310f943964..d1d5ccb9090 100644 --- a/spec/rubocop/cop/style/top_level_method_definition_spec.rb +++ b/spec/rubocop/cop/style/top_level_method_definition_spec.rb @@ -97,4 +97,10 @@ class Foo end RUBY end + + it 'does not register an offense when just called method on top-level' do + expect_no_offenses(<<~RUBY) + require_relative 'foo' + RUBY + end end