Sha256: ae2671ce584651b5df212b51c69b64a303e65895f0e90767ad60398af84a9db2

Contents?: true

Size: 1.26 KB

Versions: 4

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module Workit
      # Check for `RESTRICT_ON_SEND` is defined if `on_send` or `after_send` are defined.
      #
      # @example
      #   # bad
      #   class FooCop
      #     def on_send(node)
      #       # ...
      #     end
      #   end
      #
      #   # good
      #   class FooCop
      #     RESTRICT_ON_SEND = %i[bad_method].freeze
      #     def on_send(node)
      #       # ...
      #     end
      #   end
      #
      class RestrictOnSend < Base
        MSG = "Consider defined `RESTRICT_ON_SEND` for optimization."
        NEED_RESTRICT_ON_SEND = %i[on_send after_send].freeze

        # @!method defined_restrict_on_send?(node)
        def_node_search :defined_restrict_on_send?, "(casgn nil? :RESTRICT_ON_SEND ...)"

        def on_def(node)
          return unless NEED_RESTRICT_ON_SEND.include?(node.method_name)
          return unless (class_node = class_node(node))

          add_offense(class_node) unless defined_restrict_on_send?(class_node)
        end

        def class_node(node)
          return if node.parent.nil?

          if node.parent.class_type?
            node.parent
          else
            class_node(node.parent)
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
workitcop-0.5.0 lib/rubocop/cop/workit/restrict_on_send.rb
workitcop-0.4.2 lib/rubocop/cop/workit/restrict_on_send.rb
workitcop-0.4.0 lib/rubocop/cop/workit/restrict_on_send.rb
workitcop-0.3.0 lib/rubocop/cop/workit/restrict_on_send.rb