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
- MESSAGE
- MESSAGE_ONLY_IF
- RESTRICT_ON_SEND
Public Instance Methods
on_block(node)
click to toggle source
# File lib/rubocop/cop/performance/times_map.rb, line 32 def on_block(node) check(node) end
on_send(node)
click to toggle source
# File lib/rubocop/cop/performance/times_map.rb, line 28 def on_send(node) check(node) end
Private Instance Methods
check(node)
click to toggle source
# File lib/rubocop/cop/performance/times_map.rb, line 38 def check(node) times_map_call(node) do |map_or_collect, count| add_offense(node, message: message(map_or_collect, count)) do |corrector| replacement = "Array.new(#{count.source}" \ "#{map_or_collect.arguments.map { |arg| ", #{arg.source}" }.join})" corrector.replace(map_or_collect.loc.expression, replacement) end end end
message(map_or_collect, count)
click to toggle source
# File lib/rubocop/cop/performance/times_map.rb, line 49 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