class RuboCop::Cop::Performance::BlockGivenWithExplicitBlock


end
# …
warn “Using default …” unless block_given?
block ||= -> { do_something }
def method(&block)
# good - block is reassigned
end
do_something if block
def method(&block)
# good
end
do_something if block_given?
def method(&block)
# bad
@example
block is being passed to the method and as such should not be enabled.
NOTE: This cop produces code with significantly worse performance when a
of block argument would suffice.
Identifies unnecessary use of a ‘block_given?` where explicit check

def self.autocorrect_incompatible_with

def self.autocorrect_incompatible_with
  [Lint::UnusedMethodArgument]
end

def on_send(node)

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