class RuboCop::Cop::Performance::Caller
This cop identifies places where `caller` can be replaced by `caller(n..n).first`.
@example
# 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
Constants
- MSG_BRACE
- MSG_FIRST
Public Instance Methods
on_send(node)
click to toggle source
# File lib/rubocop/cop/performance/caller.rb, line 41 def on_send(node) return unless caller_with_scope_method?(node) add_offense(node) end
Private Instance Methods
int_value(node)
click to toggle source
# File lib/rubocop/cop/performance/caller.rb, line 63 def int_value(node) node.children[0] end
message(node)
click to toggle source
# File lib/rubocop/cop/performance/caller.rb, line 49 def message(node) method_name = node.receiver.method_name caller_arg = node.receiver.first_argument n = caller_arg ? int_value(caller_arg) : 1 if node.method_name == :[] m = int_value(node.first_argument) n += m format(MSG_BRACE, n: n, m: m, method: method_name) else format(MSG_FIRST, n: n, method: method_name) end end