Sha256: 8f60792ab934e8313f5828e913c64d3776adc76c0604ff5ce36d739292d82e5a
Contents?: true
Size: 1.36 KB
Versions: 1
Compression:
Stored size: 1.36 KB
Contents
# frozen_string_literal: true module Synvert::Core # WithinScope finds out nodes which match nql or rules, then changes its scope to matching node. class Rewriter::WithinScope < Rewriter::Scope # Initialize a WithinScope. # # @param instance [Synvert::Core::Rewriter::Instance] # @param nql_or_rules [String|Hash] # @param options [Hash] # @yield run on all matching nodes # @raise [Synvert::Core::NodeQuery::Compiler::ParseError] if the query string is invalid. def initialize(instance, nql_or_rules, options = {}, &block) super(instance, &block) @options = { including_self: true, stop_at_first_match: false, recursive: true }.merge(options) @node_query = NodeQuery.new(nql_or_rules) end # Find out the matching nodes. # # It checks the current node and iterates all child nodes, # then run the block code on each matching node. def process current_node = @instance.current_node return unless current_node matching_nodes = @node_query.query_nodes(current_node, @options) @instance.process_with_node current_node do matching_nodes.each do |matching_node| @instance.process_with_node matching_node do @instance.current_mutation.combine do @instance.instance_eval(&@block) end end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
synvert-core-1.28.5 | lib/synvert/core/rewriter/scope/within_scope.rb |