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
- #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.
Constructor Details
#initialize(def_node, send_node, referenced_lvars, forwardable_args, **config) ⇒ SendNodeClassifier
Returns a new instance of SendNodeClassifier.
249 250 251 252 253 254 255 256 257 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 249 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
277 278 279 280 281 282 283 284 285 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 277 def classification return nil unless forwarded_rest_arg || forwarded_kwrest_arg if can_forward_all? :all elsif target_ruby_version >= 3.2 :rest_or_kwrest end end |
#extract_forwarded_kwrest_arg(node, kwrest_name) ⇒ Object
244 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 244 def_node_matcher :extract_forwarded_kwrest_arg, '(hash <$(kwsplat (lvar %1)) ...>)' |
#forwarded_block_arg ⇒ Object
271 272 273 274 275 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 271 def forwarded_block_arg return nil if referenced_block_arg? arguments.find { |arg| forwarded_block_arg?(arg, @block_arg_name) } end |
#forwarded_block_arg?(node, block_name) ⇒ Object
247 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 247 def_node_matcher :forwarded_block_arg?, '(block_pass {(lvar %1) nil?})' |
#forwarded_kwrest_arg ⇒ Object
265 266 267 268 269 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 265 def forwarded_kwrest_arg return nil if referenced_kwrest_arg? arguments.filter_map { |arg| extract_forwarded_kwrest_arg(arg, @kwrest_arg_name) }.first end |
#forwarded_rest_arg ⇒ Object
259 260 261 262 263 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 259 def forwarded_rest_arg return nil if referenced_rest_arg? arguments.find { |arg| forwarded_rest_arg?(arg, @rest_arg_name) } end |
#forwarded_rest_arg?(node, rest_name) ⇒ Object
241 |
# File 'lib/rubocop/cop/style/arguments_forwarding.rb', line 241 def_node_matcher :forwarded_rest_arg?, '(splat (lvar %1))' |