class RuboCop::Cop::Style::MultilineTernaryOperator


return cond ? b : c
end
c
else
b
a = if cond
a = cond ? b : c
# good
c
b :
return cond ?
c
b :
a = cond ?
c
a = cond ? b :
b : c
a = cond ?
# bad
@example
ternary operator. The same is true for ‘break`, `next`, and method call.
multiline ternary operator expression, it will be autocorrected to single-line
NOTE: `return if … else … end` is syntax error. If `return` is used before
Checks for multi-line ternary op expressions.

def autocorrect(corrector, node)

def autocorrect(corrector, node)
  return unless offense?(node)
  corrector.replace(node, replacement(node))
  return unless (parent = node.parent)
  return unless (comments_in_condition = comments_in_condition(node))
  corrector.insert_before(parent, comments_in_condition)
end

def comments_in_condition(node)

def comments_in_condition(node)
  comments_in_range(node).map do |comment|
    "#{comment.source}\n"
  end.join
end

def enforce_single_line_ternary_operator?(node)

def enforce_single_line_ternary_operator?(node)
  SINGLE_LINE_TYPES.include?(node.parent&.type) && !use_assignment_method?(node.parent)
end

def offense?(node)

def offense?(node)
  node.ternary? && node.multiline?
end

def on_if(node)

def on_if(node)
  return unless offense?(node)
  message = enforce_single_line_ternary_operator?(node) ? MSG_SINGLE_LINE : MSG_IF
  add_offense(node, message: message) do |corrector|
    autocorrect(corrector, node)
  end
end

def replacement(node)

def replacement(node)
  if enforce_single_line_ternary_operator?(node)
    "#{node.condition.source} ? #{node.if_branch.source} : #{node.else_branch.source}"
  else
    <<~RUBY.chop
      if #{node.condition.source}
        #{node.if_branch.source}
      else
        #{node.else_branch.source}
      end
    RUBY
  end
end

def use_assignment_method?(node)

def use_assignment_method?(node)
  node.send_type? && node.assignment_method?
end