Class: RuboCop::Cop::Style::ArgumentsForwarding::SendNodeClassifier
- Inherits:
-
Object
- Object
- RuboCop::Cop::Style::ArgumentsForwarding::SendNodeClassifier
- Extended by:
- Macros
- Defined in:
- lib/rubocop/cop/style/arguments_forwarding.rb
Overview
Classifies send nodes for possible rest/kwrest/all (including block) forwarding.
Instance Method Summary collapse
- #classification ⇒ Object
- #def_all_anonymous_args?(node) ⇒ Object
- #extract_forwarded_kwrest_arg(node, kwrest_name) ⇒ Object
- #forwarded_block_arg ⇒ Object
- #forwarded_block_arg?(node, block_name) ⇒ Object
- #forwarded_kwrest_arg ⇒ Object
- #forwarded_rest_arg ⇒ Object
- #forwarded_rest_arg?(node, rest_name) ⇒ Object
-
#initialize(def_node, send_node, referenced_lvars, forwardable_args, **config) ⇒ SendNodeClassifier
constructor
A new instance of SendNodeClassifier.
- #send_all_anonymous_args?(node) ⇒ Object
Constructor Details
#initialize(def_node, send_node, referenced_lvars, forwardable_args, **config) ⇒ SendNodeClassifier
Returns a new instance of SendNodeClassifier.
414 415 416 417 418 419 420 421 422 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 414 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 |
Instance Method Details
#classification ⇒ Object
460 461 462 463 464 465 466 467 468 469 470 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 460 def classification return nil unless forwarded_rest_arg || forwarded_kwrest_arg || forwarded_block_arg if ruby_32_only_anonymous_forwarding? :all_anonymous elsif can_forward_all? :all else :rest_or_kwrest end end |
#def_all_anonymous_args?(node) ⇒ Object
398 399 400 401 402 403 404 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 398 def_node_matcher :def_all_anonymous_args?, <<~PATTERN ( def _ (args ... (restarg) (kwrestarg) (blockarg nil?)) _ ) PATTERN |
#extract_forwarded_kwrest_arg(node, kwrest_name) ⇒ Object
392 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 392 def_node_matcher :extract_forwarded_kwrest_arg, '(hash <$(kwsplat (lvar %1)) ...>)' |
#forwarded_block_arg ⇒ Object
448 449 450 451 452 453 454 455 456 457 458 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 448 def forwarded_block_arg return @forwarded_block_arg if defined?(@forwarded_block_arg) @forwarded_block_arg = if referenced_block_arg? nil else arguments.find do |arg| forwarded_block_arg?(arg, @block_arg_name) end end end |
#forwarded_block_arg?(node, block_name) ⇒ Object
395 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 395 def_node_matcher :forwarded_block_arg?, '(block_pass {(lvar %1) nil?})' |
#forwarded_kwrest_arg ⇒ Object
436 437 438 439 440 441 442 443 444 445 446 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 436 def forwarded_kwrest_arg return @forwarded_kwrest_arg if defined?(@forwarded_kwrest_arg) @forwarded_kwrest_arg = if referenced_kwrest_arg? nil else arguments.filter_map do |arg| extract_forwarded_kwrest_arg(arg, @kwrest_arg_name) end.first end end |
#forwarded_rest_arg ⇒ Object
424 425 426 427 428 429 430 431 432 433 434 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 424 def forwarded_rest_arg return @forwarded_rest_arg if defined?(@forwarded_rest_arg) @forwarded_rest_arg = if referenced_rest_arg? nil else arguments.find do |arg| forwarded_rest_arg?(arg, @rest_arg_name) end end end |
#forwarded_rest_arg?(node, rest_name) ⇒ Object
389 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 389 def_node_matcher :forwarded_rest_arg?, '(splat (lvar %1))' |
#send_all_anonymous_args?(node) ⇒ Object
407 408 409 410 411 412 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 407 def_node_matcher :send_all_anonymous_args?, <<~PATTERN ( send _ _ ... (forwarded_restarg) (hash (forwarded_kwrestarg)) (block_pass nil?) ) PATTERN |