class RuboCop::Cop::Style::PercentQLiterals

This cop checks for usage of the %Q() syntax when %q() would do.

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.source_range, corrected(node.source))
  end
end

def correct_literal_style?(node)

def correct_literal_style?(node)
  style == :lower_case_q && type(node) == '%q' ||
    style == :upper_case_q && type(node) == '%Q'
end

def corrected(src)

def corrected(src)
  src.sub(src[1], src[1].swapcase)
end

def message(_node)

def message(_node)
  style == :lower_case_q ? LOWER_CASE_Q_MSG : UPPER_CASE_Q_MSG
end

def on_percent_literal(node)

def on_percent_literal(node)
  return if correct_literal_style?(node)
  # Report offense only if changing case doesn't change semantics,
  # i.e., if the string would become dynamic or has special characters.
  return if node.children != parse(corrected(node.source)).ast.children
  add_offense(node, :begin)
end

def on_str(node)

def on_str(node)
  process(node, '%Q', '%q')
end