class RuboCop::Cop::Lint::PercentSymbolArray

Checks for colons and commas in %i, e.g. ‘%i(: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 symbols.

@example

# bad
%i(:foo, :bar)

# good
%i(foo bar)

Constants

MSG

Public Instance Methods

on_array(node) click to toggle source
# File lib/rubocop/cop/lint/percent_symbol_array.rb, line 26
def on_array(node)
  process(node, '%i', '%I')
end
on_percent_literal(node) click to toggle source
# File lib/rubocop/cop/lint/percent_symbol_array.rb, line 30
def on_percent_literal(node)
  return unless contains_colons_or_commas?(node)

  add_offense(node) { |corrector| autocorrect(corrector, node) }
end

Private Instance Methods

autocorrect(corrector, node) click to toggle source
# File lib/rubocop/cop/lint/percent_symbol_array.rb, line 38
def autocorrect(corrector, node)
  node.children.each do |child|
    range = child.source_range

    corrector.remove_trailing(range, 1) if range.source.end_with?(',')
    corrector.remove_leading(range, 1) if
      range.source.start_with?(':')
  end
end
contains_colons_or_commas?(node) click to toggle source
# File lib/rubocop/cop/lint/percent_symbol_array.rb, line 48
def contains_colons_or_commas?(node)
  node.children.any? do |child|
    literal = child.children.first.to_s

    next if non_alphanumeric_literal?(literal)

    literal.start_with?(':') || literal.end_with?(',')
  end
end
non_alphanumeric_literal?(literal) click to toggle source
# File lib/rubocop/cop/lint/percent_symbol_array.rb, line 58
def non_alphanumeric_literal?(literal)
  !/[[:alnum:]]/.match?(literal)
end