/
preferred_delimiters.rb
53 lines (43 loc) · 1.41 KB
/
preferred_delimiters.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
52
53
# frozen_string_literal: true
module RuboCop
module Cop
# Common functionality for handling percent literal delimiters.
class PreferredDelimiters
attr_reader :type, :config
PERCENT_LITERAL_TYPES = %w[% %i %I %q %Q %r %s %w %W %x].freeze
def initialize(type, config, preferred_delimiters)
@type = type
@config = config
@preferred_delimiters = preferred_delimiters
end
def delimiters
preferred_delimiters[type].chars
end
private
def ensure_valid_preferred_delimiters
invalid = preferred_delimiters_config.keys -
(PERCENT_LITERAL_TYPES + %w[default])
return if invalid.empty?
raise ArgumentError,
"Invalid preferred delimiter config key: #{invalid.join(', ')}"
end
def preferred_delimiters
@preferred_delimiters ||=
begin
ensure_valid_preferred_delimiters
if preferred_delimiters_config.key?('default')
PERCENT_LITERAL_TYPES.map do |type|
[type, preferred_delimiters_config[type] ||
preferred_delimiters_config['default']]
end.to_h
else
preferred_delimiters_config
end
end
end
def preferred_delimiters_config
config.for_cop('Style/PercentLiteralDelimiters')['PreferredDelimiters']
end
end
end
end