class RuboCop::Cop::Layout::EmptyLineAfterMultilineCondition

Enforces empty line after multiline condition.

@example

# bad
if multiline &&
  condition
  do_something
end

# good
if multiline &&
  condition

  do_something
end

# bad
case x
when foo,
  bar
  do_something
end

# good
case x
when foo,
  bar

  do_something
end

# bad
begin
  do_something
rescue FooError,
  BarError
  handle_error
end

# good
begin
  do_something
rescue FooError,
  BarError

  handle_error
end

Constants

MSG

Public Instance Methods

on_case(node) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 82
def on_case(node)
  node.when_branches.each 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
on_if(node) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 60
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
on_rescue(node) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 93
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
on_until(node)
Alias for: on_while
on_until_post(node)
Alias for: on_while_post
on_while(node) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 70
def on_while(node)
  check_condition(node.condition)
end
Also aliased as: on_until
on_while_post(node) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 75
def on_while_post(node)
  return unless node.right_sibling

  check_condition(node.condition)
end
Also aliased as: on_until_post

Private Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 127
def autocorrect(node)
  lambda do |corrector|
    range = range_by_whole_lines(node.source_range)
    corrector.insert_after(range, "\n")
  end
end
check_condition(condition) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 105
def check_condition(condition)
  return unless condition.multiline?
  return if next_line_empty?(condition.last_line)

  add_offense(condition, &autocorrect(condition))
end
multiline_rescue_exceptions?(exception_nodes) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 120
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
multiline_when_condition?(when_node) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 116
def multiline_when_condition?(when_node)
  when_node.conditions.first.first_line != when_node.conditions.last.last_line
end
next_line_empty?(line) click to toggle source
# File lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb, line 112
def next_line_empty?(line)
  processed_source[line].blank?
end