class RuboCop::Cop::Lint::UselessOr
x&.to_s or fallback
x&.__id__ || fallback
x&.object_id || fallback
x&.hash || fallback
x&.inspect || fallback
x&.intern || fallback
x&.to_sym || fallback
x&.to_s || fallback
x&.to_r || fallback
x&.to_h || fallback
x&.to_f || fallback
x&.to_i || fallback
x&.to_d || fallback
x&.to_c || fallback
x&.to_a || fallback
# good - if the intention is not to call the method on nil
x.__id__ # nil.object_id returns an Integer
x.object_id # nil.object_id returns an Integer
x.hash # nil.hash returns an Integer
x.inspect # nil.inspect returns “nil”
x.intern # nil.intern raises an error
x.to_sym # nil.to_sym raises an error
x.to_s # nil.to_s returns ”
x.to_r # nil.to_r returns (0/1)
x.to_h # nil.to_h returns {}
x.to_f # nil.to_f returns 0.0
x.to_i # nil.to_i returns 0
x.to_d # nil.to_d returns 0.0
x.to_c # nil.to_c returns (0+0i)
x.to_a # nil.to_a returns []
# good - if fallback is same as return value of method called on nil
x.to_s or fallback
x.__id__ || fallback
x.object_id || fallback
x.hash || fallback
x.inspect || fallback
x.intern || fallback
x.to_sym || fallback
x.to_s || fallback
x.to_r || fallback
x.to_h || fallback
x.to_f || fallback
x.to_i || fallback
x.to_d || fallback
x.to_c || fallback
x.to_a || fallback
# bad
@example
appended after these methods will never evaluate.
on ‘nil` (e.g. `nil.to_i` evaluates to `0`). Therefore, OR expressions
Some methods always return a truthy value, even when called
Checks for useless OR (`||` and `or`) expressions.
def on_or(node)
def on_or(node) if truthy_return_value_method?(node.lhs) report_offense(node, node.lhs) elsif truthy_return_value_method?(node.rhs) parent = node.parent parent = parent.parent if parent&.begin_type? report_offense(parent, node.rhs) if parent&.or_type? end end
def report_offense(or_node, truthy_node)
def report_offense(or_node, truthy_node) add_offense(or_node.loc.operator.join(or_node.rhs.source_range), message: format(MSG, lhs: truthy_node.source, rhs: or_node.rhs.source)) end