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