class RuboCop::Cop::Style::StringLiteralsInInterpolation

Checks that quotes inside string, symbol, and regexp interpolations match the configured preference.

@example EnforcedStyle: single_quotes (default)

# bad
string = "Tests #{success ? "PASS" : "FAIL"}"
symbol = :"Tests #{success ? "PASS" : "FAIL"}"
heredoc = <<~TEXT
  Tests #{success ? "PASS" : "FAIL"}
TEXT
regexp = /Tests #{success ? "PASS" : "FAIL"}/

# good
string = "Tests #{success ? 'PASS' : 'FAIL'}"
symbol = :"Tests #{success ? 'PASS' : 'FAIL'}"
heredoc = <<~TEXT
  Tests #{success ? 'PASS' : 'FAIL'}
TEXT
regexp = /Tests #{success ? 'PASS' : 'FAIL'}/

@example EnforcedStyle: double_quotes

# bad
string = "Tests #{success ? 'PASS' : 'FAIL'}"
symbol = :"Tests #{success ? 'PASS' : 'FAIL'}"
heredoc = <<~TEXT
  Tests #{success ? 'PASS' : 'FAIL'}
TEXT
regexp = /Tests #{success ? 'PASS' : 'FAIL'}/

# good
string = "Tests #{success ? "PASS" : "FAIL"}"
symbol = :"Tests #{success ? "PASS" : "FAIL"}"
heredoc = <<~TEXT
  Tests #{success ? "PASS" : "FAIL"}
TEXT
regexp = /Tests #{success ? "PASS" : "FAIL"}/

Public Instance Methods

autocorrect(corrector, node) click to toggle source
# File lib/rubocop/cop/style/string_literals_in_interpolation.rb, line 48
def autocorrect(corrector, node)
  StringLiteralCorrector.correct(corrector, node, style)
end
on_regexp(node) click to toggle source

Cop classes that include the StringHelp module usually ignore regexp nodes. Not so for this cop, which is why we override the on_regexp definition with an empty one.

# File lib/rubocop/cop/style/string_literals_in_interpolation.rb, line 55
def on_regexp(node); end

Private Instance Methods

message(_node) click to toggle source
# File lib/rubocop/cop/style/string_literals_in_interpolation.rb, line 59
def message(_node)
  # single_quotes -> single-quoted
  kind = style.to_s.sub(/_(.*)s/, '-\1d')

  "Prefer #{kind} strings inside interpolations."
end
offense?(node) click to toggle source
# File lib/rubocop/cop/style/string_literals_in_interpolation.rb, line 66
def offense?(node)
  # If it's not a string within an interpolation, then it's not an
  # offense for this cop.
  return false unless inside_interpolation?(node)

  wrong_quotes?(node)
end