class RuboCop::Cop::Style::InPatternThen

Checks for ‘in;` uses in `case` expressions.

@example

# bad
case expression
in pattern_a; foo
in pattern_b; bar
end

# good
case expression
in pattern_a then foo
in pattern_b then bar
end

Constants

MSG

Public Instance Methods

on_in_pattern(node) click to toggle source
# File lib/rubocop/cop/style/in_pattern_then.rb, line 29
def on_in_pattern(node)
  return if node.multiline? || node.then? || !node.body

  pattern = node.pattern
  pattern_source = if pattern.match_alt_type?
                     alternative_pattern_source(pattern)
                   else
                     pattern.source
                   end

  add_offense(node.loc.begin, message: format(MSG, pattern: pattern_source)) do |corrector|
    corrector.replace(node.loc.begin, ' then')
  end
end

Private Instance Methods

alternative_pattern_source(pattern) click to toggle source
# File lib/rubocop/cop/style/in_pattern_then.rb, line 46
def alternative_pattern_source(pattern)
  collect_alternative_patterns(pattern).join(' | ')
end
collect_alternative_patterns(pattern) click to toggle source
# File lib/rubocop/cop/style/in_pattern_then.rb, line 50
def collect_alternative_patterns(pattern)
  return pattern.children.map(&:source) unless pattern.children.first.match_alt_type?

  pattern_sources = collect_alternative_patterns(pattern.children.first)

  pattern_sources << pattern.children[1].source
end