Class: RuboCop::Cop::Style::QuotedSymbols

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
ConfigurableEnforcedStyle, RuboCop::Cop::StringLiteralsHelp, RuboCop::Cop::SymbolHelp
Defined in:
lib/rubocop/cop/style/quoted_symbols.rb

Overview

Checks if the quotes used for quoted symbols match the configured defaults. By default uses the same configuration as ‘Style/StringLiterals`; if that cop is not enabled, the default `EnforcedStyle` is `single_quotes`.

String interpolation is always kept in double quotes.

NOTE: ‘Lint/SymbolConversion` can be used in parallel to ensure that symbols are not quoted that don’t need to be. This cop is for configuring the quoting style to use for symbols that require quotes.

Examples:

EnforcedStyle: same_as_string_literals (default) / single_quotes

# bad
:"abc-def"

# good
:'abc-def'
:"#{str}"
:"a\'b"

EnforcedStyle: double_quotes

# bad
:'abc-def'

# good
:"abc-def"
:"#{str}"
:"a\'b"

Constant Summary collapse

MSG_SINGLE =
"Prefer single-quoted symbols when you don't need string interpolation " \
'or special symbols.'
MSG_DOUBLE =
'Prefer double-quoted symbols unless you need single quotes to ' \
'avoid extra backslashes for escaping.'

Instance Method Summary collapse

Methods included from AutoCorrector

support_autocorrect?

Methods included from RuboCop::Cop::SymbolHelp

#hash_key?

Methods included from ConfigurableEnforcedStyle

#alternative_styles, #ambiguous_style_detected, #correct_style_detected, #detected_style, #detected_style=, #no_acceptable_style!, #no_acceptable_style?, #opposite_style_detected, #style_configured?, #style_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected

Instance Method Details

#on_sym(node) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rubocop/cop/style/quoted_symbols.rb', line 44

def on_sym(node)
  return unless quoted?(node)

  message = style == :single_quotes ? MSG_SINGLE : MSG_DOUBLE

  if wrong_quotes?(node) || invalid_double_quotes?(node.source)
    add_offense(node, message: message) do |corrector|
      opposite_style_detected
      autocorrect(corrector, node)
    end
  else
    correct_style_detected
  end
end