class RuboCop::Cop::Layout::EmptyLinesAroundExceptionHandlingKeywords

Checks if empty lines exist around the bodies of `begin` sections. This cop doesn't check empty lines at `begin` body beginning/end and around method definition body. `Style/EmptyLinesAroundBeginBody` or `Style/EmptyLinesAroundMethodBody` can be used for this purpose.

@example

# good

begin
  do_something
rescue
  do_something2
else
  do_something3
ensure
  do_something4
end

# good

def foo
  do_something
rescue
  do_something2
end

# bad

begin
  do_something

rescue

  do_something2

else

  do_something3

ensure

  do_something4
end

# bad

def foo
  do_something

rescue

  do_something2
end

Constants

MSG

Public Instance Methods

on_def(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 67
def on_def(node)
  check_body(node.body, node.loc.line)
end
Also aliased as: on_defs
on_defs(node)
Alias for: on_def
on_kwbegin(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 72
def on_kwbegin(node)
  body, = *node
  check_body(body, node.loc.line)
end

Private Instance Methods

check_body(body, line_of_def_or_kwbegin) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 79
def check_body(body, line_of_def_or_kwbegin)
  locations = keyword_locations(body)

  locations.each do |loc|
    line = loc.line
    next if line == line_of_def_or_kwbegin || last_rescue_and_end_on_same_line(body)

    keyword = loc.source
    # below the keyword
    check_line(style, line, message('after', keyword), &:empty?)
    # above the keyword
    check_line(style, line - 2, message('before', keyword), &:empty?)
  end
end
keyword_locations(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 106
def keyword_locations(node)
  return [] unless node

  case node.type
  when :rescue
    keyword_locations_in_rescue(node)
  when :ensure
    keyword_locations_in_ensure(node)
  else
    []
  end
end
keyword_locations_in_ensure(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 123
def keyword_locations_in_ensure(node)
  ensure_body, = *node
  [
    node.loc.keyword,
    *keyword_locations(ensure_body)
  ]
end
keyword_locations_in_rescue(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 119
def keyword_locations_in_rescue(node)
  [node.loc.else, *node.resbody_branches.map { |body| body.loc.keyword }].compact
end
last_rescue_and_end_on_same_line(body) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 94
def last_rescue_and_end_on_same_line(body)
  body.rescue_type? && body.resbody_branches.last.loc.line == body.parent.loc.end.line
end
message(location, keyword) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 98
def message(location, keyword)
  format(MSG, location: location, keyword: keyword)
end
style() click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb, line 102
def style
  :no_empty_lines
end