class RuboCop::Cop::Style::TrailingMethodEndStatement

This cop checks for trailing code after the method definition.

@example

# bad
def some_method
do_stuff; end

def do_this(x)
  baz.map { |b| b.this(x) } end

def foo
  block do
    bar
  end end

# good
def some_method
  do_stuff
end

def do_this(x)
  baz.map { |b| b.this(x) }
end

def foo
  block do
    bar
  end
end

Constants

MSG

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/style/trailing_method_end_statement.rb, line 48
def autocorrect(node)
  lambda do |corrector|
    break_line_before_end(node, corrector)
    remove_semicolon(node, corrector)
  end
end
on_def(node) click to toggle source
# File lib/rubocop/cop/style/trailing_method_end_statement.rb, line 42
def on_def(node)
  return unless trailing_end?(node)

  add_offense(node.to_a.last, location: end_token(node).pos)
end

Private Instance Methods

body_and_end_on_same_line?(node) click to toggle source
# File lib/rubocop/cop/style/trailing_method_end_statement.rb, line 67
def body_and_end_on_same_line?(node)
  end_token(node).line == token_before_end(node).line
end
break_line_before_end(node, corrector) click to toggle source
# File lib/rubocop/cop/style/trailing_method_end_statement.rb, line 78
def break_line_before_end(node, corrector)
  corrector.insert_before(
    end_token(node).pos,
    "\n" + ' ' * configured_indentation_width
  )
end
end_token(node) click to toggle source
# File lib/rubocop/cop/style/trailing_method_end_statement.rb, line 63
def end_token(node)
  @end_token ||= tokens(node).reverse.find(&:end?)
end
remove_semicolon(node, corrector) click to toggle source
# File lib/rubocop/cop/style/trailing_method_end_statement.rb, line 85
def remove_semicolon(node, corrector)
  return unless token_before_end(node).semicolon?

  corrector.remove(token_before_end(node).pos)
end
token_before_end(node) click to toggle source
# File lib/rubocop/cop/style/trailing_method_end_statement.rb, line 71
def token_before_end(node)
  @token_before_end ||= begin
    i = tokens(node).index(end_token(node))
    tokens(node)[i - 1]
  end
end
trailing_end?(node) click to toggle source
# File lib/rubocop/cop/style/trailing_method_end_statement.rb, line 57
def trailing_end?(node)
  node.body &&
    node.multiline? &&
    body_and_end_on_same_line?(node)
end