@@ -26,9 +26,10 @@ module Style
26
26
# "Just some text"
27
27
# "No special chars or interpolation"
28
28
# "Every string in #{project} uses double_quotes"
29
- class StringLiterals < Cop
29
+ class StringLiterals < Base
30
30
include ConfigurableEnforcedStyle
31
31
include StringLiteralsHelp
32
+ extend AutoCorrector
32
33
33
34
MSG_INCONSISTENT = 'Inconsistent quote style.'
34
35
@@ -46,19 +47,25 @@ def on_dstr(node)
46
47
quote_styles = detect_quote_styles ( node )
47
48
48
49
if quote_styles . size > 1
49
- add_offense ( node , message : MSG_INCONSISTENT )
50
+ register_offense ( node , message : MSG_INCONSISTENT )
50
51
else
51
52
check_multiline_quote_style ( node , quote_styles [ 0 ] )
52
53
end
53
54
54
55
ignore_node ( node )
55
56
end
56
57
57
- def autocorrect ( node )
58
- StringLiteralCorrector . correct ( node , style )
58
+ private
59
+
60
+ def autocorrect ( corrector , node )
61
+ StringLiteralCorrector . correct ( corrector , node , style )
59
62
end
60
63
61
- private
64
+ def register_offense ( node , message : nil )
65
+ add_offense ( node , message : message || message ( node ) ) do |corrector |
66
+ autocorrect ( corrector , node )
67
+ end
68
+ end
62
69
63
70
def all_string_literals? ( nodes )
64
71
nodes . all? { |n | n . str_type? || n . dstr_type? }
@@ -99,14 +106,13 @@ def consistent_multiline?
99
106
end
100
107
101
108
def check_multiline_quote_style ( node , quote )
102
- range = node . source_range
103
109
children = node . children
104
110
if unexpected_single_quotes? ( quote )
105
111
all_children_with_quotes = children . all? { |c | wrong_quotes? ( c ) }
106
- add_offense ( node , location : range ) if all_children_with_quotes
112
+ register_offense ( node ) if all_children_with_quotes
107
113
elsif unexpected_double_quotes? ( quote ) &&
108
114
!accept_child_double_quotes? ( children )
109
- add_offense ( node , location : range )
115
+ register_offense ( node )
110
116
end
111
117
end
112
118
0 commit comments