/
string_literals_in_interpolation.rb
51 lines (44 loc) · 1.35 KB
/
string_literals_in_interpolation.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# frozen_string_literal: true
module RuboCop
module Cop
module Style
# This cop checks that quotes inside the string interpolation
# match the configured preference.
#
# @example EnforcedStyle: single_quotes (default)
# # bad
# result = "Tests #{success ? "PASS" : "FAIL"}"
#
# # good
# result = "Tests #{success ? 'PASS' : 'FAIL'}"
#
# @example EnforcedStyle: double_quotes
# # bad
# result = "Tests #{success ? 'PASS' : 'FAIL'}"
#
# # good
# result = "Tests #{success ? "PASS" : "FAIL"}"
class StringLiteralsInInterpolation < Base
include ConfigurableEnforcedStyle
include StringLiteralsHelp
include StringHelp
extend AutoCorrector
def autocorrect(corrector, node)
StringLiteralCorrector.correct(corrector, node, style)
end
private
def message(_node)
# single_quotes -> single-quoted
kind = style.to_s.sub(/_(.*)s/, '-\1d')
"Prefer #{kind} strings inside interpolations."
end
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
end
end
end
end