class JinyuDebugTools::CodeParser::CodeTree
Constants
- ROOT_NAME
Public Class Methods
new()
click to toggle source
# 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
Public Instance Methods
_find_mistab_nodes(parent_node_index, child_level, parent_node)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/utils/code_parser.rb, line 94 def get_reverse_index(index) @node_level_list.size - 1 - index end
my_pretty_print()
click to toggle source
# 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_hash()
click to toggle source
# File lib/utils/code_parser.rb, line 138 def to_hash @root.to_hash end