Class: RuboCop::Cop::Style::CollectionMethods

Inherits:
Cop
  • Object
show all
Includes:
MethodPreference
Defined in:
lib/rubocop/cop/style/collection_methods.rb

Overview

This cop enforces the use of consistent method names from the Enumerable module.

Unfortunately we cannot actually know if a method is from Enumerable or not (static analysis limitation), so this cop can yield some false positives.

You can customize the mapping from undesired method to desired method.

e.g. to use `detect` over `find`:

Style/CollectionMethods:
  PreferredMethods:
    find: detect

The default mapping for `PreferredMethods` behaves as follows.

Examples:

# bad
items.collect
items.collect!
items.inject
items.detect
items.find_all

# good
items.map
items.map!
items.reduce
items.find
items.select

Constant Summary collapse

MSG =
'Prefer `%<prefer>s` over `%<current>s`.'.freeze

Constants included from Util

Util::LITERAL_REGEX

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

Methods inherited from Cop

#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, #correct, department, #duplicate_location?, #excluded_file?, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #messages, non_rails, #parse, qualified_cop_name, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first

Methods included from AST::Sexp

#s

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

begins_its_line?, comment_line?, double_quotes_required?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens

Methods included from PathUtil

absolute?, hidden_dir?, hidden_file_in_not_hidden_dir?, match_path?, pwd, relative_path, reset_pwd, smart_path

Constructor Details

This class inherits a constructor from RuboCop::Cop::Cop

Instance Method Details

#autocorrect(node) ⇒ Object



54
55
56
57
58
59
# File 'lib/rubocop/cop/style/collection_methods.rb', line 54

def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.loc.selector,
                      preferred_method(node.loc.selector.source))
  end
end

#on_block(node) ⇒ Object



43
44
45
# File 'lib/rubocop/cop/style/collection_methods.rb', line 43

def on_block(node)
  check_method_node(node.send_node)
end

#on_send(node) ⇒ Object



47
48
49
50
51
52
# File 'lib/rubocop/cop/style/collection_methods.rb', line 47

def on_send(node)
  return unless node.arguments.one? &&
                node.first_argument.block_pass_type?

  check_method_node(node)
end