module RuboCop::Ext::RegexpNode
Extensions to AST::RegexpNode for our cached parsed regexp info
Constants
- ANY
Attributes
parsed_tree[R]
@return [Regexp::Expression::Root, nil] Note: we extend Regexp nodes to provide ‘loc` and `expression` see `ext/regexp_parser`.
Public Instance Methods
assign_properties(*)
click to toggle source
Calls superclass method
# File lib/rubocop/ext/regexp_node.rb, line 19 def assign_properties(*) super str = with_interpolations_blanked @parsed_tree = begin Regexp::Parser.parse(str, options: options) rescue StandardError nil end origin = loc.begin.end @parsed_tree&.each_expression(true) { |e| e.origin = origin } end
each_capture(named: ANY) { |exp| ... }
click to toggle source
# File lib/rubocop/ext/regexp_node.rb, line 53 def each_capture(named: ANY) return enum_for(__method__, named: named) unless block_given? parsed_tree&.traverse do |event, exp, _index| yield(exp) if event == :enter && named == exp.respond_to?(:name) && exp.respond_to?(:capturing?) && exp.capturing? end self end
Private Instance Methods
with_interpolations_blanked()
click to toggle source
# File lib/rubocop/ext/regexp_node.rb, line 68 def with_interpolations_blanked # Ignore the trailing regopt node children[0...-1].map do |child| source = child.source # We don't want to consider the contents of interpolations as part of the pattern source, # but need to preserve their width, to allow offsets to correctly line up with the # original source: spaces have no effect, and preserve width. if child.begin_type? ' ' * source.length else source end end.join end