class RuboCop::Cop::Lint::NumberConversion
Complex(‘10’)
Float(‘10.2’)
Integer(‘10’, 10)
# good
’10’.to_c
’10.2’.to_f
’10’.to_i
# bad
@example
fails. Cop prefer parsing with number class instead.
number conversion can cause unexpected error if auto type conversion
This cop warns the usage of unsafe number conversions. Unsafe
def autocorrect(node)
def autocorrect(node) lambda do |corrector| corrector.replace(node.loc.expression, correct_method(node, node.receiver)) end end
def correct_method(node, receiver)
def correct_method(node, receiver) format(CONVERSION_METHOD_CLASS_MAPPING[node.method_name], number_object: receiver.source) end
def date_time_object?(node)
def date_time_object?(node) child = node while child&.send_type? return true if datetime? child child = child.children[0] end end
def on_send(node)
def on_send(node) to_method(node) do |receiver, to_method| next if receiver.nil? || date_time_object?(receiver) message = format( MSG, number_object: receiver.source, to_method: to_method, corrected_method: correct_method(node, receiver) ) add_offense(node, message: message) end end