Class: Treetop::Runtime::SyntaxNode

Inherits:
Object
  • Object
show all
Includes:
Replaceability
Defined in:
lib/vsql_node_extensions.rb

Direct Known Subclasses

VSql::VSqlSyntaxNode

Instance Method Summary collapse

Methods included from Replaceability

#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

#piecesObject



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

#rootObject



94
95
96
# File 'lib/vsql_node_extensions.rb', line 94

def root
  parent ? parent.root : self
end

#vanilla?Boolean

Returns:

  • (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