class RubbyCop::Cop::Style::MultilineMemoization

This cop checks expressions wrapping styles for multiline memoization.

@example

# EnforcedStyle: keyword (default)

@bad
foo ||= (
  bar
  baz
)

@good
foo ||= begin
  bar
  baz
end

@example

# EnforcedStyle: braces

@bad
foo ||= begin
  bar
  baz
end

@good
foo ||= (
  bar
  baz
)

Constants

MSG

Public Instance Methods

on_or_asgn(node) click to toggle source
# File lib/rubbycop/cop/style/multiline_memoization.rb, line 44
def on_or_asgn(node)
  _lhs, rhs = *node

  return unless bad_rhs?(rhs)

  add_offense(rhs, node.source_range, MSG)
end

Private Instance Methods

autocorrect(node) click to toggle source
# File lib/rubbycop/cop/style/multiline_memoization.rb, line 54
def autocorrect(node)
  lambda do |corrector|
    if style == :keyword
      corrector.replace(node.loc.begin, 'begin')
      corrector.replace(node.loc.end, 'end')
    else
      corrector.replace(node.loc.begin, '(')
      corrector.replace(node.loc.end, ')')
    end
  end
end
bad_rhs?(rhs) click to toggle source
# File lib/rubbycop/cop/style/multiline_memoization.rb, line 66
def bad_rhs?(rhs)
  return false unless rhs.multiline?
  if style == :keyword
    rhs.begin_type?
  else
    rhs.kwbegin_type?
  end
end