class RuboCop::Cop::Style::QuotedSymbols

:“a'b”
:“#{str}”
:“abc-def”
# good
:‘abc-def’
# bad
@example EnforcedStyle: double_quotes
:“a'b”
:“#{str}”
:‘abc-def’
# good
:“abc-def”
# bad
@example EnforcedStyle: same_as_string_literals (default) / single_quotes
style to use for symbols that require quotes.
are not quoted that don’t need to be. This cop is for configuring the quoting
Note: ‘Lint/SymbolConversion` can be used in parallel to ensure that symbols
String interpolation is always kept in double quotes.
By default uses the same configuration as `Style/StringLiterals`.
Checks if the quotes used for quoted symbols match the configured defaults.

def alternative_style

def alternative_style
  (supported_styles - [style, :same_as_string_literals]).first
end

def autocorrect(corrector, node)

def autocorrect(corrector, node)
  str = if hash_colon_key?(node)
          # strip quotes
          correct_quotes(node.source[1..-2])
        else
          # strip leading `:` and quotes
          ":#{correct_quotes(node.source[2..-2])}"
        end
  corrector.replace(node, str)
end

def correct_quotes(str)

def correct_quotes(str)
  if style == :single_quotes
    to_string_literal(str)
  else
    str.inspect
  end
end

def hash_colon_key?(node)

def hash_colon_key?(node)
  # Is the node a hash key with the colon style?
  hash_key?(node) && node.parent.colon?
end

def on_sym(node)

def on_sym(node)
  return unless quoted?(node)
  message = style == :single_quotes ? MSG_SINGLE : MSG_DOUBLE
  if wrong_quotes?(node)
    add_offense(node, message: message) do |corrector|
      opposite_style_detected
      autocorrect(corrector, node)
    end
  else
    correct_style_detected
  end
end

def quoted?(sym_node)

def quoted?(sym_node)
  sym_node.source.match?(/\A:?(['"]).*?\1\z/m)
end

def style

def style
  return super unless super == :same_as_string_literals
  string_literals_config = config.for_cop('Style/StringLiterals')
  return :single_quotes unless string_literals_config['Enabled']
  string_literals_config['EnforcedStyle'].to_sym
end

def wrong_quotes?(node)

def wrong_quotes?(node)
  return super if hash_key?(node)
  super(node.source[1..-1])
end