class RuboCop::Cop::Style::IfInsideElse

If the `else` branch of a conditional consists solely of an `if` node, it can be combined with the `else` to become an `elsif`. This helps to keep the nesting level from getting too deep.

@example

# bad
if condition_a
  action_a
else
  if condition_b
    action_b
  else
    action_c
  end
end

# good
if condition_a
  action_a
elsif condition_b
  action_b
else
  action_c
end

@example AllowIfModifier: false (default)

# bad
if condition_a
  action_a
else
  action_b if condition_b
end

# good
if condition_a
  action_a
elsif condition_b
  action_b
end

@example AllowIfModifier: true

# good
if condition_a
  action_a
else
  action_b if condition_b
end

# good
if condition_a
  action_a
elsif condition_b
  action_b
end

Constants

MSG

Public Instance Methods

on_if(node) click to toggle source
# File lib/rubocop/cop/style/if_inside_else.rb, line 64
def on_if(node)
  return if node.ternary? || node.unless?

  else_branch = node.else_branch

  return unless else_branch&.if_type? && else_branch&.if?
  return if allow_if_modifier_in_else_branch?(else_branch)

  add_offense(else_branch, location: :keyword)
end

Private Instance Methods

allow_if_modifier?() click to toggle source
# File lib/rubocop/cop/style/if_inside_else.rb, line 81
def allow_if_modifier?
  cop_config['AllowIfModifier']
end
allow_if_modifier_in_else_branch?(else_branch) click to toggle source
# File lib/rubocop/cop/style/if_inside_else.rb, line 77
def allow_if_modifier_in_else_branch?(else_branch)
  allow_if_modifier? && else_branch&.modifier_form?
end