Class: Treetop::Runtime::SyntaxNode
- Inherits:
-
Object
- Object
- Treetop::Runtime::SyntaxNode
show all
- Includes:
- Replaceability
- Defined in:
- lib/vsql_node_extensions.rb
Instance Method Summary
collapse
#adjust_intervals!, #gsub!, #index_of
Instance Method Details
#_pieces_with_gaps(cursor, elements, results = []) ⇒ Object
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/vsql_node_extensions.rb', line 44
def _pieces_with_gaps(cursor, elements, results = [])
return [cursor, results] if elements.nil? || elements.empty?
element, interval, next_elements = elements[0], elements[0].interval, elements[1..-1]
next_results = [*results,
*(input[cursor...interval.first] if cursor != elements.first.interval.first),
element]
_pieces_with_gaps(interval.last,
next_elements,
next_results)
end
|
#delete! ⇒ Object
72
73
74
|
# File 'lib/vsql_node_extensions.rb', line 72
def delete!
parent.elements.delete(self)
end
|
#find(klass) ⇒ Object
68
69
70
|
# File 'lib/vsql_node_extensions.rb', line 68
def find(klass)
match(klass).first
end
|
#match(klass = Treetop::Runtime::SyntaxNode, skip = nil) ⇒ Object
64
65
66
|
# File 'lib/vsql_node_extensions.rb', line 64
def match(klass = Treetop::Runtime::SyntaxNode, skip = nil)
VSql::Helpers.find_elements(self, klass, skip)
end
|
#match_nearest(klass) ⇒ Object
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/vsql_node_extensions.rb', line 98
def match_nearest(klass)
case
when parent.nil?
nil
when parent.is_a?(klass)
parent
else
parent.match_nearest(klass)
end
end
|
#pieces ⇒ Object
55
56
57
58
59
60
61
62
|
# File 'lib/vsql_node_extensions.rb', line 55
def pieces
last_pos, pieces = _pieces_with_gaps(interval.first, elements)
if last_pos != interval.last
[input[last_pos...(interval.last)], *pieces]
else
pieces
end
end
|
#prune! ⇒ Object
86
87
88
89
90
91
92
|
# File 'lib/vsql_node_extensions.rb', line 86
def prune!
es = match(Treetop::Runtime::SyntaxNode)
es.reverse.each do |e|
e.prune_if!(&:vanilla?)
end
self
end
|
#prune_if!(&block) ⇒ Object
82
83
84
|
# File 'lib/vsql_node_extensions.rb', line 82
def prune_if!(&block)
delete! if yield(self)
end
|
#root ⇒ Object
94
95
96
|
# File 'lib/vsql_node_extensions.rb', line 94
def root
parent ? parent.root : self
end
|
#vanilla? ⇒ Boolean
76
77
78
79
80
|
# File 'lib/vsql_node_extensions.rb', line 76
def vanilla?
(self.class == Treetop::Runtime::SyntaxNode) &&
(parent && parent.class == Treetop::Runtime::SyntaxNode || text_value.length == 0) &&
(elements.nil? || elements.all?(&:vanilla?))
end
|