class RuboCop::Cop::Style::ArgumentsForwarding::SendNodeClassifier
Classifies send nodes for possible rest/kwrest/all (including block) forwarding.
Public Class Methods
new(def_node, send_node, referenced_lvars, forwardable_args, **config)
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 252 def initialize(def_node, send_node, referenced_lvars, forwardable_args, **config) @def_node = def_node @send_node = send_node @referenced_lvars = referenced_lvars @rest_arg, @kwrest_arg, @block_arg = *forwardable_args @rest_arg_name, @kwrest_arg_name, @block_arg_name = *forwardable_args.map { |a| a&.name } @config = config end
Public Instance Methods
classification()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 280 def classification return nil unless forwarded_rest_arg || forwarded_kwrest_arg if referenced_none? && (forwarded_exactly_all? || pre_ruby_32_allow_forward_all?) :all elsif target_ruby_version >= 3.2 :rest_or_kwrest end end
forwarded_block_arg()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 274 def forwarded_block_arg return nil if referenced_block_arg? find_forwarded_block_arg(@send_node, @block_arg_name).first end
forwarded_kwrest_arg()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 268 def forwarded_kwrest_arg return nil if referenced_kwrest_arg? find_forwarded_kwrest_arg(@send_node, @kwrest_arg_name).first end
forwarded_rest_arg()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 262 def forwarded_rest_arg return nil if referenced_rest_arg? find_forwarded_rest_arg(@send_node, @rest_arg_name).first end
Private Instance Methods
forwarded_exactly_all?()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 308 def forwarded_exactly_all? @send_node.arguments.size == 3 && forwarded_rest_arg && forwarded_kwrest_arg && forwarded_block_arg end
pre_ruby_32_allow_forward_all?()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 319 def pre_ruby_32_allow_forward_all? target_ruby_version < 3.2 && @def_node.arguments.none?(&:default?) && (@block_arg ? forwarded_block_arg : !@config.fetch(:allow_only_rest_arguments)) end
referenced_block_arg?()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 300 def referenced_block_arg? @referenced_lvars.include?(@block_arg_name) end
referenced_kwrest_arg?()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 296 def referenced_kwrest_arg? @referenced_lvars.include?(@kwrest_arg_name) end
referenced_none?()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 304 def referenced_none? !(referenced_rest_arg? || referenced_kwrest_arg? || referenced_block_arg?) end
referenced_rest_arg?()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 292 def referenced_rest_arg? @referenced_lvars.include?(@rest_arg_name) end
target_ruby_version()
click to toggle source
# File lib/rubocop/cop/style/arguments_forwarding.rb, line 315 def target_ruby_version @config.fetch(:target_ruby_version) end