Class: JinyuDebugTools::CodeParser::CodeTree

Inherits:
Object
  • Object
show all
Defined in:
lib/utils/code_parser.rb

Constant Summary collapse

ROOT_NAME =
'JiNyUsUpErNoDe'

Instance Method Summary collapse

Constructor Details

#initializeCodeTree

Returns a new instance of CodeTree.



63
64
65
66
67
68
# File 'lib/utils/code_parser.rb', line 63

def initialize
  @root = CodeNode.new(ROOT_NAME).tap { |node| node.set_level(0) }
  @node_level_list = []
  @node_level_list << [@root, @root.get_level]
  @root.set_index(@node_level_list.size - 1)
end

Instance Method Details

#_find_mistab_nodes(parent_node_index, child_level, parent_node) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/utils/code_parser.rb', line 125

def _find_mistab_nodes(parent_node_index, child_level, parent_node)
  # ... because, the father node which attached on root directly like new
  # would match this situation, parent is root and level < child_level
  mistab_nodes = @node_level_list[parent_node_index...-1].select do |node, level|
    next false if node.get_parent != @root
    next false if node.get_level >= child_level
    next false if node == parent_node # parent node on root bug
    true
  end
    
  return mistab_nodes
end

#_find_parent_with_index(parent_name) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/utils/code_parser.rb', line 98

def _find_parent_with_index(parent_name)
  if parent_name == @root.get_name
    return @root, @root.get_index
  end
    
  target_index_reverse = @node_level_list.size - 1
    
  node_level_list_reverse = @node_level_list.reverse
  node_level_list_reverse.each_with_index do |node_level_pair, index|
    node, level = *node_level_pair
    
    if node.get_name == parent_name
      target_index_reverse = index
      break
    end
  end
    
  target_node, target_level = node_level_list_reverse[target_index_reverse]
  target_index = get_reverse_index(target_index_reverse)
    
  if target_node == @root
    target_node, target_index = add_record(@root.get_name, parent_name)
  end
    
  return target_node, target_index
end

#add_record(parent_name, child_name) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/utils/code_parser.rb', line 70

def add_record(parent_name, child_name)
  parent_node, parent_node_index = _find_parent_with_index(parent_name)
    
  child_level = parent_node.get_level + 1
    
  mistab_nodes = _find_mistab_nodes(parent_node_index, child_level, parent_node)
  if mistab_nodes.any?
    mistab_nodes.each do |mistab_node|
      mistab_node.set_parent(parent_node)
      @root.delete_child(mistab_node)
      parent_node.append_child(mistab_node)
    end
  end
    
  child_node = CodeNode.new(child_name)
  child_node.set_level(child_level)
  @node_level_list << child_node
  child_node.set_index(@node_level_list.size - 1)
  parent_node.append_child(child_node)
  child_node.set_parent(parent_node)
    
  return child_node, child_node.get_index
end

#get_reverse_index(index) ⇒ Object



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

def get_reverse_index(index)
  @node_level_list.size - 1 - index
end

#my_pretty_printObject



142
143
144
145
146
147
148
# File 'lib/utils/code_parser.rb', line 142

def my_pretty_print
  require 'json'
  output =  JSON.pretty_generate(self.to_hash)
  output.gsub!(/[\{\}\[\],:]| null/,'')
  output.gsub!(/^\s+$/,'')
  output.gsub!(/^\n/,'')
end

#to_hashObject



138
139
140
# File 'lib/utils/code_parser.rb', line 138

def to_hash
  @root.to_hash
end