class RuboCop::Cop::Lint::RequireParentheses

end
# …
if day.is?(:tuesday) && month == :jan
# good
@example
end
# …
if day.is? :tuesday && month == :jan
# bad
@example
an operand of &&/||.
be under the impression that the return value from the method call is
The idea behind warning for these constructs is that the user might
last argument.
the parameter list, and a boolean operator, && or ||, is used in the
method with at least one argument, where no parentheses are used around
Checks for expressions where there is a call to a predicate

def check_predicate(predicate, node)

def check_predicate(predicate, node)
  return unless predicate.operator_keyword?
  add_offense(node)
end

def check_ternary(ternary, node)

def check_ternary(ternary, node)
  if node.method?(:[]) || node.assignment_method? || !ternary.condition.operator_keyword?
    return
  end
  range = range_between(node.source_range.begin_pos, ternary.condition.source_range.end_pos)
  add_offense(range)
end

def on_send(node)

def on_send(node)
  return if !node.arguments? || node.parenthesized?
  if node.first_argument.if_type? && node.first_argument.ternary?
    check_ternary(node.first_argument, node)
  elsif node.predicate_method?
    check_predicate(node.last_argument, node)
  end
end