class RuboCop::Cop::Performance::TimesMap

This cop checks for .times.map calls. In most cases such calls can be replaced with an explicit array creation.

@example

@bad
9.times.map do |i|
  i.to_s
end

@good
Array.new(9) do |i|
  i.to_s
end

Constants

MSG

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/performance/times_map.rb, line 28
def on_block(node)
  check(node)
end
on_send(node) click to toggle source
# File lib/rubocop/cop/performance/times_map.rb, line 24
def on_send(node)
  check(node)
end

Private Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/performance/times_map.rb, line 45
def autocorrect(node)
  send_node = node.send_type? ? node : node.each_descendant(:send).first

  receiver, _method_name, *args = *send_node
  count, = *receiver

  replacement = "Array.new(#{count.source}"                          "#{args.map { |arg| ", #{arg.source}" }.join})"

  lambda do |corrector|
    corrector.replace(send_node.loc.expression, replacement)
  end
end
check(node) click to toggle source
# File lib/rubocop/cop/performance/times_map.rb, line 34
def check(node)
  times_map_call(node) do |map_or_collect|
    add_offense(node, :expression, format(MSG, map_or_collect))
  end
end