class RuboCop::Cop::Layout::EmptyLineAfterMultilineCondition


end
handle_error
BarError
rescue FooError,
do_something
begin
# good
end
handle_error
BarError
rescue FooError,
do_something
begin
# bad
end
do_something
bar
when foo,
case x
# good
end
do_something
bar
when foo,
case x
# bad
end
do_something
condition
if multiline &&
# good
end
do_something
condition
if multiline &&
# bad
@example
This cop enforces empty line after multiline condition.

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    range = range_by_whole_lines(node.source_range)
    corrector.insert_after(range, "\n")
  end
end

def check_condition(condition)

def check_condition(condition)
  return unless condition.multiline?
  return if next_line_empty?(condition.last_line)
  add_offense(condition, &autocorrect(condition))
end

def multiline_rescue_exceptions?(exception_nodes)

def multiline_rescue_exceptions?(exception_nodes)
  return false if exception_nodes.size <= 1
  first, *_rest, last = *exception_nodes
  first.first_line != last.last_line
end

def multiline_when_condition?(when_node)

def multiline_when_condition?(when_node)
  when_node.conditions.first.first_line != when_node.conditions.last.last_line
end

def next_line_empty?(line)

def next_line_empty?(line)
  processed_source[line].blank?
end

def on_case(node)

def on_case(node)
  node.each_when do |when_node|
    last_condition = when_node.conditions.last
    next if !multiline_when_condition?(when_node) ||
            next_line_empty?(last_condition.last_line)
    add_offense(when_node, &autocorrect(last_condition))
  end
end

def on_if(node)

def on_if(node)
  return if node.ternary?
  if node.modifier_form?
    check_condition(node.condition) if node.right_sibling
  else
    check_condition(node.condition)
  end
end

def on_rescue(node)

def on_rescue(node)
  node.resbody_branches.each do |resbody|
    rescued_exceptions = resbody.exceptions
    next if !multiline_rescue_exceptions?(rescued_exceptions) ||
            next_line_empty?(rescued_exceptions.last.last_line)
    add_offense(resbody, &autocorrect(rescued_exceptions.last))
  end
end

def on_while(node)

def on_while(node)
  check_condition(node.condition)
end

def on_while_post(node)

def on_while_post(node)
  return unless node.right_sibling
  check_condition(node.condition)
end