class RuboCop::Cop::Lint::PercentSymbolArray

%i(foo bar)
# good
@example
%i(:foo, :bar)
# bad
@example
rather than meant to be part of the resulting symbols.
example, mistranslating an array of literals to percent string notation)
It is more likely that the additional characters are unintended (for
This cop checks for colons and commas in %i, e.g. ‘%i(:foo, :bar)`

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    node.children.each do |child|
      range = child.loc.expression
      corrector.remove_trailing(range, 1) if range.source.end_with?(',')
      corrector.remove_leading(range, 1) if
        range.source.start_with?(':')
    end
  end
end

def contains_colons_or_commas?(node)

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

def non_alphanumeric_literal?(literal)

def non_alphanumeric_literal?(literal)
  literal !~ /[[:alnum:]]/
end

def on_array(node)

def on_array(node)
  process(node, '%i', '%I')
end

def on_percent_literal(node)

def on_percent_literal(node)
  return unless contains_colons_or_commas?(node)
  add_offense(node)
end