class RuboCop::Cop::Style::BlockEndNewline

This cop checks whether the end statement of a do..end block is on its own line.

@example

# bad
blah do |i|
  foo(i) end

# good
blah do |i|
  foo(i)
end

# bad
blah { |i|
  foo(i) }

# good
blah { |i|
  foo(i)
}

Constants

MSG

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/style/block_end_newline.rb, line 42
def autocorrect(node)
  lambda do |corrector|
    indentation = indentation_of_block_start_line(node)
    corrector.insert_before(node.loc.end, "\n" + (' ' * indentation))
  end
end
indentation_of_block_start_line(node) click to toggle source
# File lib/rubocop/cop/style/block_end_newline.rb, line 49
def indentation_of_block_start_line(node)
  match = /\S.*/.match(node.loc.begin.source_line)
  match.begin(0)
end
on_block(node) click to toggle source
# File lib/rubocop/cop/style/block_end_newline.rb, line 30
def on_block(node)
  end_loc = node.loc.end
  do_loc = node.loc.begin # Actually it's either do or {.
  return if do_loc.line == end_loc.line # Ignore one-liners.

  # If the end is on its own line, there is no offense
  return if end_loc.source_line =~ /^\s*#{end_loc.source}/

  msg = format(MSG, end_loc.line, end_loc.column + 1)
  add_offense(node, end_loc, msg)
end