class RuboCop::Cop::Lint::ElseLayout

end
do_that
do_this
else
# …
if something
# good
@example
end
do_that
else do_this
# …
if something
# bad
@example
which is usually a mistake.
having an expression on the same line as the else keyword,
This cop checks for odd else block layout - like

def check(node)

def check(node)
  return unless node.else_branch
  if node.else? && node.loc.else.is?('else')
    check_else(node)
  elsif node.if?
    check(node.else_branch)
  end
end

def check_else(node)

def check_else(node)
  else_branch = node.else_branch
  return unless else_branch.begin_type?
  first_else = else_branch.children.first
  return unless first_else
  return unless first_else.source_range.line == node.loc.else.line
  add_offense(first_else)
end

def on_if(node)

def on_if(node)
  return if node.ternary? || node.elsif?
  check(node)
end