class RuboCop::Cop::Lint::PercentStringArray

This cop checks for quotes and commas in %w, e.g. `%w('foo', “bar”)`

It is more likely that the additional characters are unintended (for example, mistranslating an array of literals to percent string notation) rather than meant to be part of the resulting strings.

@example

# bad

%w('foo', "bar")

@example

# good

%w(foo bar)

Constants

LEADING_QUOTE
MSG
QUOTES_AND_COMMAS
TRAILING_QUOTE

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/lint/percent_string_array.rb, line 43
def autocorrect(node)
  lambda do |corrector|
    node.values.each do |value|
      range = value.loc.expression

      match = range.source.match(TRAILING_QUOTE)
      corrector.remove_trailing(range, match[0].length) if match

      if range.source =~ LEADING_QUOTE
        corrector.remove_leading(range, 1)
      end
    end
  end
end
on_array(node) click to toggle source
# File lib/rubocop/cop/lint/percent_string_array.rb, line 33
def on_array(node)
  process(node, '%w', '%W')
end
on_percent_literal(node) click to toggle source
# File lib/rubocop/cop/lint/percent_string_array.rb, line 37
def on_percent_literal(node)
  return unless contains_quotes_or_commas?(node)

  add_offense(node)
end

Private Instance Methods

contains_quotes_or_commas?(node) click to toggle source
# File lib/rubocop/cop/lint/percent_string_array.rb, line 60
def contains_quotes_or_commas?(node)
  node.values.any? do |value|
    literal = value.children.first.to_s.scrub

    # To avoid likely false positives (e.g. a single ' or ")
    next if literal.gsub(/[^[[:alnum:]]]/, '').empty?

    QUOTES_AND_COMMAS.any? { |pat| literal =~ pat }
  end
end