123456789_123456789_123456789_123456789_123456789_

Class: RuboCop::Cop::Performance::Caller

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, AutoCorrector, Base
Instance Chain:
self, Base
Inherits: Base
  • Object
Defined in: lib/rubocop/cop/performance/caller.rb

Overview

Identifies places where caller[n] can be replaced by caller(n..n).first.

Examples:

# bad
caller[1]
caller.first
caller_locations[1]
caller_locations.first

# good
caller(2..2).first
caller(1..1).first
caller_locations(2..2).first
caller_locations(1..1).first

Constant Summary

Instance Method Summary

Instance Method Details

#int_value(node) (private)

[ GitHub ]

  
# File 'lib/rubocop/cop/performance/caller.rb', line 61

def int_value(node)
  node.children[0]
end

#on_send(node)

[ GitHub ]

  
# File 'lib/rubocop/cop/performance/caller.rb', line 40

def on_send(node)
  return unless caller_with_scope_method?(node)

  method_name = node.receiver.method_name
  caller_arg = node.receiver.first_argument
  n = caller_arg ? int_value(caller_arg) : 1
  if node.method?(:[])
    m = int_value(node.first_argument)
    n += m
  end

  preferred_method = "#{method_name}(#{n}..#{n}).first"

  message = format(MSG, preferred_method: preferred_method, current_method: node.source)
  add_offense(node, message: message) do |corrector|
    corrector.replace(node, preferred_method)
  end
end