class RuboCop::Cop::Lint::RequireParentheses
end
…
if day.is? :tuesday && month == :jan
@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
This cop checks for expressions where there is a call to a predicate
def check_send(arg, node)
def check_send(arg, node) add_offense(node, :expression) if offense?(arg) end
def check_ternary(arg, node)
def check_ternary(arg, node) condition, = *arg return unless offense?(condition) expr = node.source_range range = Parser::Source::Range.new(expr.source_buffer, expr.begin_pos, condition.source_range.end_pos) add_offense(range, range) end
def offense?(node)
def offense?(node) [:and, :or].include?(node.type) end
def on_send(node)
def on_send(node) _receiver, method_name, *args = *node return if parentheses?(node) return if args.empty? if ternary?(args.first) check_ternary(args.first, node) elsif predicate?(method_name) # We're only checking predicate methods. There would be false # positives otherwise. check_send(args.last, node) end end
def predicate?(method_name)
def predicate?(method_name) method_name.to_s.end_with?('?') end