class RuboCop::Cop::Lint::BinaryOperatorWithIdenticalOperands
Checks for places where binary operator has identical operands.
It covers arithmetic operators: `-`, `/`, `%`; comparison operators: `==`, `===`, `=~`, `>`, `>=`, `<`, `<=`; bitwise operators: `|`, `^`, `&`; boolean operators: `&&`, `||` and “spaceship” operator - `<=>`.
Simple arithmetic operations are allowed by this cop: `+`, `*`, `**`, `<<` and `>>`. Although these can be rewritten in a different way, it should not be necessary to do so. This does not include operations such as `-` or `/` where the result will always be the same (`x - x` will always be 0; `x / x` will always be 1), and thus are legitimate offenses.
@safety
This cop is unsafe as it does not consider side effects when calling methods and thus can generate false positives, for example: [source,ruby] ---- if wr.take_char == '\0' && wr.take_char == '\0' # ... end ----
@example
# bad x / x x.top >= x.top if a.x != 0 && a.x != 0 do_something end def child? left_child || left_child end # good x + x 1 << 1
Constants
- ALLOWED_MATH_OPERATORS
- MSG
Public Instance Methods
on_and(node)
click to toggle source
# File lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb, line 61 def on_and(node) add_offense(node, message: format(MSG, op: node.operator)) if node.lhs == node.rhs end
Also aliased as: on_or
on_send(node)
click to toggle source
# File lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb, line 52 def on_send(node) return unless node.binary_operation? lhs, operation, rhs = *node return if ALLOWED_MATH_OPERATORS.include?(node.method_name) add_offense(node, message: format(MSG, op: operation)) if lhs == rhs end