class RuboCop::Cop::Performance::TimesMap
end
i.to_s
Array.new(9) do |i|
# good
end
i.to_s
9.times.map do |i|
# bad
@example
with an explicit array creation.
In most cases such calls can be replaced
This cop checks for .times.map calls.
def autocorrect(node)
def autocorrect(node) map_or_collect, count = times_map_call(node) replacement = "Array.new(#{count.source}" \ "#{map_or_collect.arguments.map { |arg| ", #{arg.source}" }.join})" lambda do |corrector| corrector.replace(map_or_collect.loc.expression, replacement) end end
def check(node)
def check(node) times_map_call(node) do |map_or_collect, count| add_offense(node, message: message(map_or_collect, count)) end end
def message(map_or_collect, count)
def message(map_or_collect, count) template = if count.literal? MESSAGE + '.' else "#{MESSAGE} #{MESSAGE_ONLY_IF}." end format(template, count: count.source, map_or_collect: map_or_collect.method_name) end
def on_block(node)
def on_block(node) check(node) end
def on_send(node)
def on_send(node) check(node) end