class RubbyCop::Cop::Style::PercentLiteralDelimiters
This cop enforces the consistent usage of `%`-literal delimiters.
Specify the 'default' key to set all preferred delimiters at once. You can continue to specify individual preferred delimiters to override the default.
@example
# Style/PercentLiteralDelimiters: # PreferredDelimiters: # default: [] # %i: () # good %w[alpha beta] + %i(gamma delta) # bad %W(alpha #{beta}) # bad %I(alpha beta)
Public Instance Methods
message(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 50 def message(node) type = type(node) delimiters = preferred_delimiters_for(type) "`#{type}`-literals should be delimited by " \ "`#{delimiters[0]}` and `#{delimiters[1]}`." end
on_array(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 29 def on_array(node) process(node, '%w', '%W', '%i', '%I') end
on_regexp(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 33 def on_regexp(node) process(node, '%r') end
on_str(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 37 def on_str(node) process(node, '%', '%Q', '%q') end
Also aliased as: on_dstr
on_sym(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 42 def on_sym(node) process(node, '%s') end
on_xstr(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 46 def on_xstr(node) process(node, '%x') end
Private Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 60 def autocorrect(node) type = type(node) opening_delimiter, closing_delimiter = preferred_delimiters_for(type) lambda do |corrector| corrector.replace(node.loc.begin, "#{type}#{opening_delimiter}") corrector.replace(node.loc.end, closing_delimiter) end end
contains_preferred_delimiter?(node, type)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 83 def contains_preferred_delimiter?(node, type) preferred_delimiters = preferred_delimiters_for(type) node .children.map { |n| string_source(n) }.compact .any? { |s| preferred_delimiters.any? { |d| s.include?(d) } } end
on_percent_literal(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 71 def on_percent_literal(node) type = type(node) return if uses_preferred_delimiter?(node, type) || contains_preferred_delimiter?(node, type) add_offense(node, :expression) end
string_source(node)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 90 def string_source(node) if node.is_a?(String) node elsif node.respond_to?(:type) && node.str_type? node.source end end
uses_preferred_delimiter?(node, type)
click to toggle source
# File lib/rubbycop/cop/style/percent_literal_delimiters.rb, line 79 def uses_preferred_delimiter?(node, type) preferred_delimiters_for(type)[0] == begin_source(node)[-1] end