Class: RuboCop::Cop::Style::ArrayJoin

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

Overview

This cop checks for uses of “*” as a substitute for join.

Not all cases can reliably checked, due to Ruby’s dynamic types, so we consider only cases when the first argument is an array literal or the second is a string literal.

Examples:


# bad
%w(foo bar baz) * ","

# good
%w(foo bar baz).join(",")

Constant Summary collapse

MSG =
'Favor `Array#join` over `Array#*`.'.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?, #message, #messages, non_rails, #parse, qualified_cop_name, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from AST::Sexp

#s

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 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



29
30
31
32
33
34
35
# File 'lib/rubocop/cop/style/array_join.rb', line 29

def autocorrect(node)
  array, join_arg = join_candidate?(node).map(&:source)

  lambda do |corrector|
    corrector.replace(node.source_range, "#{array}.join(#{join_arg})")
  end
end

#on_send(node) ⇒ Object



25
26
27
# File 'lib/rubocop/cop/style/array_join.rb', line 25

def on_send(node)
  join_candidate?(node) { add_offense(node, location: :selector) }
end