class RuboCop::Cop::Style::UnneededPercentQ

This cop checks for usage of the %q/%Q syntax when ” or “” would do.

def autocorrect(node)

def autocorrect(node)
  delimiter = node.loc.expression.source =~ /^%Q[^"]+$|'/ ? '"' : "'"
  @corrections << lambda do |corrector|
    corrector.replace(node.loc.begin, delimiter)
    corrector.replace(node.loc.end, delimiter)
  end
end

def check(node)

def check(node)
  if node.loc.respond_to?(:heredoc_body)
    ignore_node(node)
    return
  end
  return if ignored_node?(node) || part_of_ignored_node?(node)
  src = node.loc.expression.source
  return unless src =~ /^%q/i
  return if src =~ /'/ && src =~ /"/
  return if src =~ StringHelp::ESCAPED_CHAR_REGEXP
  extra = if src =~ /^%Q/
            ', or for dynamic strings that contain double quotes'
          else
            ''
          end
  add_offense(node, :expression, format(MSG, src[0, 2], extra))
end

def on_dstr(node)

def on_dstr(node)
  # Using %Q to avoid escaping inner " is ok.
  check(node) unless node.loc.expression.source =~ /"/
end

def on_regexp(node)

confusion in on_str if they start with %( or %Q(.
We process regexp nodes because the inner str nodes can cause
def on_regexp(node)
  string_parts = node.children.select { |child| child.type == :str }
  string_parts.each { |s| ignore_node(s) }
end

def on_str(node)

def on_str(node)
  check(node)
end