Sha256: 20fdc2ff461316070c127cde0a621072f86344286d68e80dc76cd6e490ce55df

Contents?: true

Size: 1.45 KB

Versions: 5

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module Performance
      # This cop identifies unnecessary use of a `block_given?` where explicit check
      # of block argument would suffice.
      #
      # @example
      #   # bad
      #   def method(&block)
      #     do_something if block_given?
      #   end
      #
      #   # good
      #   def method(&block)
      #     do_something if block
      #   end
      #
      #   # good - block is reassigned
      #   def method(&block)
      #     block ||= -> { do_something }
      #     warn "Using default ..." unless block_given?
      #     # ...
      #   end
      #
      class BlockGivenWithExplicitBlock < Base
        extend AutoCorrector

        RESTRICT_ON_SEND = %i[block_given?].freeze
        MSG = 'Check block argument explicitly instead of using `block_given?`.'

        def_node_matcher :reassigns_block_arg?, '`(lvasgn %1 ...)'

        def on_send(node)
          def_node = node.each_ancestor(:def, :defs).first
          return unless def_node

          block_arg = def_node.arguments.find(&:blockarg_type?)
          return unless block_arg
          return unless (block_arg_name = block_arg.loc.name)

          block_arg_name = block_arg_name.source.to_sym
          return if reassigns_block_arg?(def_node, block_arg_name)

          add_offense(node) do |corrector|
            corrector.replace(node, block_arg_name)
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 3 rubygems

Version Path
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/rubocop-performance-1.13.3/lib/rubocop/cop/performance/block_given_with_explicit_block.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/rubocop-performance-1.13.3/lib/rubocop/cop/performance/block_given_with_explicit_block.rb
op_connect-0.1.2 vendor/bundle/ruby/3.1.0/gems/rubocop-performance-1.13.3/lib/rubocop/cop/performance/block_given_with_explicit_block.rb
rubocop-performance-1.13.3 lib/rubocop/cop/performance/block_given_with_explicit_block.rb
rubocop-performance-1.13.2 lib/rubocop/cop/performance/block_given_with_explicit_block.rb