class RuboCop::Cop::Style::ObjectThen


obj.yield_self { |x| x.do_something }
# good
obj.then { |x| x.do_something }
# bad
@example EnforcedStyle: yield_self
obj.then { |x| x.do_something }
# good
obj.yield_self { |x| x.do_something }
# bad
@example EnforcedStyle: then (default)
‘Object#yield_self` or `Object#then`.
Enforces the use of consistent method names

def check_method_node(node)

def check_method_node(node)
  return unless preferred_method(node)
  message = message(node)
  add_offense(node.loc.selector, message: message) do |corrector|
    corrector.replace(node.loc.selector, style.to_s)
  end
end

def message(node)

def message(node)
  format(MSG, prefer: style.to_s, current: node.method_name)
end

def on_block(node)

def on_block(node)
  check_method_node(node.send_node)
end

def on_send(node)

def on_send(node)
  return unless node.arguments.one? && node.first_argument.block_pass_type?
  check_method_node(node)
end

def preferred_method(node)

def preferred_method(node)
  case style
  when :then
    node.method?(:yield_self)
  when :yield_self
    node.method?(:then)
  else
    false
  end
end