class RuboCop::Cop::Lint::NestedPercentLiteral
Checks for nested percent literals.
@example
# bad # The percent literal for nested_attributes is parsed as four tokens, # yielding the array [:name, :content, :"%i[incorrectly", :"nested]"]. attributes = { valid_attributes: %i[name content], nested_attributes: %i[name content %i[incorrectly nested]] } # good # Neither is incompatible with the bad case, but probably the intended code. attributes = { valid_attributes: %i[name content], nested_attributes: [:name, :content, %i[incorrectly nested]] } attributes = { valid_attributes: %i[name content], nested_attributes: [:name, :content, [:incorrectly, :nested]] }
Constants
- MSG
- PERCENT_LITERAL_TYPES
-
The array of regular expressions representing percent literals that, if found within a percent literal expression, will cause a
NestedPercentLiteral
violation to be emitted. - REGEXES
Public Instance Methods
Source
# File lib/rubocop/cop/lint/nested_percent_literal.rb, line 44 def on_array(node) process(node, *PERCENT_LITERAL_TYPES) end
Source
# File lib/rubocop/cop/lint/nested_percent_literal.rb, line 48 def on_percent_literal(node) add_offense(node) if contains_percent_literals?(node) end
Private Instance Methods
Source
# File lib/rubocop/cop/lint/nested_percent_literal.rb, line 54 def contains_percent_literals?(node) node.each_child_node.any? do |child| literal = child.children.first.to_s.scrub REGEXES.any? { |regex| literal.match?(regex) } end end