class RuboCop::Cop::Style::EndlessMethod


.baz
.bar
def my_method() = x.foo
# bad
def my_method; x end
# bad
@example EnforcedStyle: disallow
.baz
.bar
def my_method() = x.foo
# good
def my_method() = x
# good
@example EnforcedStyle: allow_always
.baz
.bar
def my_method() = x.foo
# bad, multi-line endless method
def my_method() = x
# good
@example EnforcedStyle: allow_single_line (default)
corrected to a multi-line definition.
NOTE: Incorrect endless method definitions will always be
* disallow - all endless method definitions are disallowed.
* allow_always - all endless method definitions are allowed.
* allow_single_line (default) - only single line endless method definitions are allowed.
The supported styles are:
Other method definition types are not considered by this cop.
for single-lined method bodies, or disallow endless methods.
It can enforce either the use of endless methods definitions
This cop checks for endless methods.

def arguments(node, missing = '')

def arguments(node, missing = '')
  node.arguments.any? ? node.arguments.source : missing
end

def correct_to_multiline(corrector, node)

def correct_to_multiline(corrector, node)
  replacement = <<~RUBY.strip
    def #{node.method_name}#{arguments(node)}
      #{node.body.source}
    end
  RUBY
  corrector.replace(node, replacement)
end

def handle_allow_style(node)

def handle_allow_style(node)
  return unless node.endless?
  return if node.single_line? || style == :allow_always
  add_offense(node, message: MSG_MULTI_LINE) do |corrector|
    correct_to_multiline(corrector, node)
  end
end

def handle_disallow_style(node)

def handle_disallow_style(node)
  return unless node.endless?
  add_offense(node) { |corrector| correct_to_multiline(corrector, node) }
end

def on_def(node)

def on_def(node)
  if style == :disallow
    handle_disallow_style(node)
  else
    handle_allow_style(node)
  end
end