class RuboCop::Cop::Style::SingleLineDoEndBlock

Checks for single-line ‘do`…`end` block.

In practice a single line ‘do`…`end` is autocorrected when `EnforcedStyle: semantic` in `Style/BlockDelimiters`. The autocorrection maintains the `do` … `end` syntax to preserve semantics and does not change it to `{`…`}` block.

@example

# bad
foo do |arg| bar(arg) end

# good
foo do |arg|
  bar(arg)
end

# bad
->(arg) do bar(arg) end

# good
->(arg) { bar(arg) }

Constants

MSG

Public Instance Methods

on_block(node) click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/rubocop/cop/style/single_line_do_end_block.rb, line 34
def on_block(node)
  return if !node.single_line? || node.braces?

  add_offense(node) do |corrector|
    corrector.insert_after(do_line(node), "\n")

    node_body = node.body

    if node_body.respond_to?(:heredoc?) && node_body.heredoc?
      corrector.remove(node.loc.end)
      corrector.insert_after(node_body.loc.heredoc_end, "\nend")
    else
      corrector.insert_before(node.loc.end, "\n")
    end
  end
end
Also aliased as: on_numblock
on_numblock(node)

rubocop:enable Metrics/AbcSize

Alias for: on_block

Private Instance Methods

do_line(node) click to toggle source
# File lib/rubocop/cop/style/single_line_do_end_block.rb, line 55
def do_line(node)
  if node.numblock_type? || node.arguments.children.empty? || node.send_node.lambda_literal?
    node.loc.begin
  else
    node.arguments
  end
end
x(corrector, node) click to toggle source
# File lib/rubocop/cop/style/single_line_do_end_block.rb, line 63
def x(corrector, node); end