Sha256: ee6b7af921f7fee48841a96926a4ed534cf75ab1a6e865bd259f0e7f816b02a9
Contents?: true
Size: 1.78 KB
Versions: 6484
Compression:
Stored size: 1.78 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Lint # This cop checks for expressions where there is a call to a predicate # method with at least one argument, where no parentheses are used around # the parameter list, and a boolean operator, && or ||, is used in the # last argument. # # The idea behind warning for these constructs is that the user might # be under the impression that the return value from the method call is # an operand of &&/||. # # @example # # # bad # # if day.is? :tuesday && month == :jan # # ... # end # # @example # # # good # # if day.is?(:tuesday) && month == :jan # # ... # end class RequireParentheses < Cop include RangeHelp MSG = 'Use parentheses in the method call to avoid confusion about ' \ 'precedence.'.freeze 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 alias on_csend on_send private def check_ternary(ternary, node) return unless ternary.condition.operator_keyword? range = range_between(node.source_range.begin_pos, ternary.condition.source_range.end_pos) add_offense(range, location: range) end def check_predicate(predicate, node) return unless predicate.operator_keyword? add_offense(node) end end end end end
Version data entries
6,484 entries across 6,480 versions & 23 rubygems