class Metamorpher::Rewriter::Traverser

Public Instance Methods

traverse(tree) click to toggle source
# File lib/metamorpher/rewriter/traverser.rb, line 4
def traverse(tree)
  Enumerator.new(count(tree)) do |yielder|
    waiting = [tree]
    until waiting.empty?
      current = waiting.shift
      yielder << current
      waiting.concat(children(current))
    end
  end
end

Private Instance Methods

children(node) click to toggle source
# File lib/metamorpher/rewriter/traverser.rb, line 21
def children(node)
  node.respond_to?(:children) ? node.children : []
end
count(tree) click to toggle source
# File lib/metamorpher/rewriter/traverser.rb, line 17
def count(tree)
  children(tree).flat_map { |child| count(child) }.inject(1, :+)
end