class RuboCop::Cop::Discourse::Services::GroupKeywords


try { step :might_raise }
policy :my_policy
model :my_model
# good
try { step :might_raise }
policy :my_policy
model :my_model
# bad
@example
Don’t put empty lines between keywords that are not multiline blocks.

def extra_empty_line_after?(node)

def extra_empty_line_after?(node)
  processed_source[node.loc.expression.line].blank? &&
    (
      service_keyword?(node.right_sibling) ||
        single_line_block?(node.right_sibling)
    )
end

def on_class(node)

def on_class(node)
  return unless service_include?(node)
  @service = true
end

def on_send(node)

def on_send(node)
  return unless service?
  return unless top_level?(node)
  return unless extra_empty_line_after?(node)
  add_offense(node, message: MSG) do |corrector|
    range =
      node.loc.expression.end.with(
        end_pos: node.right_sibling.loc.expression.begin_pos
      )
    content = range.source.gsub(/^(\n)+/, "\n")
    corrector.replace(range, content)
  end
end

def service?

def service?
  @service
end

def service_keyword?(node)

def service_keyword?(node)
  return unless node
  node.send_type? && RESTRICT_ON_SEND.include?(node.method_name)
end

def single_line_block?(node)

def single_line_block?(node)
  return unless node
  node.block_type? && node.single_line?
end

def top_level?(node)

def top_level?(node)
  while (!node.root?)
    node = node.parent
    return if %i[begin class block].exclude?(node.type)
  end
  true
end