class RuboCop::Cop::Style::PercentLiteralDelimiters

This cop enforces the consistent usage of `%`-literal delimiters.

Public Instance Methods

message(node) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 31
def message(node)
  type = type(node)
  delimiters = preferred_delimiters(type)

  "`#{type}`-literals should be delimited by "            "`#{delimiters[0]}` and `#{delimiters[1]}`."
end
on_array(node) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 10
def on_array(node)
  process(node, '%w', '%W', '%i')
end
on_dstr(node)
Alias for: on_str
on_regexp(node) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 14
def on_regexp(node)
  process(node, '%r')
end
on_str(node) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 18
def on_str(node)
  process(node, '%', '%Q', '%q')
end
Also aliased as: on_dstr
on_sym(node) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 23
def on_sym(node)
  process(node, '%s')
end
on_xstr(node) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 27
def on_xstr(node)
  process(node, '%x')
end

Private Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 41
def autocorrect(node)
  type = type(node)

  opening_delimiter, closing_delimiter = preferred_delimiters(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/rubocop/cop/style/percent_literal_delimiters.rb, line 68
def contains_preferred_delimiter?(node, type)
  preferred_delimiters = preferred_delimiters(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/rubocop/cop/style/percent_literal_delimiters.rb, line 52
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
preferred_delimiters(type) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 60
def preferred_delimiters(type)
  cop_config['PreferredDelimiters'][type].split(//)
end
string_source(node) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 75
def string_source(node)
  if node.is_a?(String)
    node
  elsif node.respond_to?(:type) && node.type == :str
    node.source
  end
end
uses_preferred_delimiter?(node, type) click to toggle source
# File lib/rubocop/cop/style/percent_literal_delimiters.rb, line 64
def uses_preferred_delimiter?(node, type)
  preferred_delimiters(type)[0] == begin_source(node)[-1]
end