class RuboCop::Cop::Style::CollectionMethods
Enforces the use of consistent method names from the Enumerable module.
You can customize the mapping from undesired method to desired method.
e.g. to use ‘detect` over `find`:
Style/CollectionMethods: PreferredMethods: find: detect
@safety
This cop is unsafe because it finds methods by name, without actually being able to determine if the receiver is an Enumerable or not, so this cop may register false positives.
@example
# These examples are based on the default mapping for `PreferredMethods`. # bad items.collect items.collect! items.collect_concat items.inject items.detect items.find_all items.member? # good items.map items.map! items.flat_map items.reduce items.find items.select items.include?
Constants
- MSG
Public Instance Methods
on_block(node)
click to toggle source
# File lib/rubocop/cop/style/collection_methods.rb, line 49 def on_block(node) check_method_node(node.send_node) end
Also aliased as: on_numblock
on_send(node)
click to toggle source
# File lib/rubocop/cop/style/collection_methods.rb, line 55 def on_send(node) return unless implicit_block?(node) check_method_node(node) end
Private Instance Methods
check_method_node(node)
click to toggle source
# File lib/rubocop/cop/style/collection_methods.rb, line 63 def check_method_node(node) return unless preferred_methods[node.method_name] message = message(node) add_offense(node.loc.selector, message: message) do |corrector| corrector.replace(node.loc.selector, preferred_method(node.loc.selector.source)) end end
implicit_block?(node)
click to toggle source
# File lib/rubocop/cop/style/collection_methods.rb, line 72 def implicit_block?(node) return false unless node.arguments.any? node.last_argument.block_pass_type? || (node.last_argument.sym_type? && methods_accepting_symbol.include?(node.method_name.to_s)) end
message(node)
click to toggle source
# File lib/rubocop/cop/style/collection_methods.rb, line 80 def message(node) format(MSG, prefer: preferred_method(node.method_name), current: node.method_name) end
methods_accepting_symbol()
click to toggle source
Some enumerable methods accept a bare symbol (ie. not Symbol#to_proc) instead of a block.
# File lib/rubocop/cop/style/collection_methods.rb, line 86 def methods_accepting_symbol Array(cop_config['MethodsAcceptingSymbol']) end