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.inject items.detect items.find_all items.member? # good items.map items.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 47 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 53 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 61 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 70 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 78 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 84 def methods_accepting_symbol Array(cop_config['MethodsAcceptingSymbol']) end