Module: Wood::TreeRewriter
- Defined in:
- lib/wood/tree_rewriter.rb
Defined Under Namespace
Modules: ClassMethods
Classes: Rewriter
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.included(klass) ⇒ Object
26
27
28
|
# File 'lib/wood/tree_rewriter.rb', line 26
def self.included(klass)
klass.extend ClassMethods
end
|
.new(&block) ⇒ Object
14
15
16
|
# File 'lib/wood/tree_rewriter.rb', line 14
def self.new(&block)
Class.new(Rewriter, &block).new
end
|
Instance Method Details
#do_rewrite(node, repeat = false) ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/wood/tree_rewriter.rb', line 43
def do_rewrite(node, repeat = false)
patterns.each do |p|
node = p.replacement_for(node)
end
if node.respond_to? :each_child
node.each_child do |c|
node.set_child(c, rewrite(node.get_child(c), repeat))
end
else
if Array === node
node = node.map do |c|
rewrite(c, repeat)
end
end
end
return node
end
|
#patterns ⇒ Object
63
64
65
|
# File 'lib/wood/tree_rewriter.rb', line 63
def patterns
self.class.patterns
end
|
#rewrite(node, repeat = false) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/wood/tree_rewriter.rb', line 30
def rewrite(node, repeat = false)
return do_rewrite(node, repeat) unless repeat
changed = true
while changed
tmp = do_rewrite(node, repeat)
changed = tmp != node
node = tmp
end
return do_rewrite(node, false)
end
|