class RuboCop::Cop::Style::SingleLineBlockParams
This cop checks whether the block parameters of a single-line method accepting a block match the names specified via configuration.
For instance one can configure `reduce`(`inject`) to use |a, e| as parameters.
Constants
- MSG
Public Instance Methods
on_block(node)
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 13 def on_block(node) return unless node.single_line? return unless eligible_method?(node) return unless eligible_arguments?(node) return if args_match?(node.send_node.method_name, node.arguments) add_offense(node.arguments) end
Private Instance Methods
args_match?(method_name, args)
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 60 def args_match?(method_name, args) actual_args = args.to_a.flat_map(&:to_a) # Prepending an underscore to mark an unused parameter is allowed, so # we remove any leading underscores before comparing. actual_args_no_underscores = actual_args.map do |arg| arg.to_s.sub(/^_+/, '') end actual_args_no_underscores == target_args(method_name) end
eligible_arguments?(node)
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 33 def eligible_arguments?(node) node.arguments? && node.arguments.to_a.all?(&:arg_type?) end
eligible_method?(node)
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 37 def eligible_method?(node) node.send_node.receiver && method_names.include?(node.send_node.method_name) end
message(node)
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 26 def message(node) method_name = node.parent.send_node.method_name arguments = target_args(method_name).join(', ') format(MSG, method_name, arguments) end
method_name(method)
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 50 def method_name(method) method.keys.first end
method_names()
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 46 def method_names methods.map { |method| method_name(method).to_sym } end
methods()
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 42 def methods cop_config['Methods'] end
target_args(method_name)
click to toggle source
# File lib/rubocop/cop/style/single_line_block_params.rb, line 54 def target_args(method_name) method_name = method_name.to_s method_hash = methods.find { |m| method_name(m) == method_name } method_hash[method_name] end