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